Packages

nerves_system_br

1.33.3
1.34.0 1.33.9 1.33.8 1.33.7 1.33.6 1.33.5 1.33.4 1.33.3 1.33.2 1.33.1 1.33.0 1.32.5 1.32.4 1.32.3 1.32.2 1.32.1 1.32.0 1.31.7 1.31.6 1.31.5 1.31.4 1.31.3 1.31.2 1.31.1 1.31.0 1.30.1 1.30.0 1.29.3 1.29.2 1.29.1 1.29.0 1.28.3 1.28.2 1.28.1 1.28.0 1.27.3 1.27.2 1.27.1 1.27.0 1.26.1 1.26.0 1.25.3 1.25.2 1.25.1 1.25.0 1.24.1 1.24.0 1.23.3 1.23.2 1.23.1 1.23.0 1.22.8 1.22.7 1.22.6 1.22.5 1.22.4 1.22.3 1.22.2 1.22.1 1.22.0 1.21.6 1.21.5 1.21.4 1.21.3 1.21.2 1.21.1 1.21.0 1.20.6 1.20.5 1.20.4 1.20.3 1.20.2 1.20.1 1.20.0 1.19.1 1.19.0 1.18.6 1.18.5 1.18.4 1.18.3 1.18.2 1.18.1 1.18.0 1.17.4 1.17.3 1.17.2 1.17.1 1.17.0 1.16.5 1.16.4 1.16.3 1.16.2 1.16.1 1.16.0 1.15.2 1.15.1 1.15.0 1.14.5 1.14.4 1.14.3 1.14.2 1.14.1 1.14.0 1.13.8 1.13.7 1.13.6 1.13.5 1.13.4 1.13.3 1.13.2 1.13.1 1.13.0 1.12.4 1.12.3 1.12.2 1.12.1 1.12.0 1.12.0-rc.0 1.11.4 1.11.3 1.11.2 1.11.1 1.11.0 1.10.3 1.10.2 1.10.1 1.10.0 1.9.5 1.9.4 1.9.3 1.9.2 1.9.1 1.9.0 1.8.6 1.8.5 1.8.4 1.8.3 1.8.2 1.8.1 1.8.0 1.7.3 1.7.2 1.7.1 1.7.0 1.6.8 1.6.7 1.6.6 1.6.5 1.6.4 1.6.3 1.6.2 1.6.1 1.6.0 1.5.6 1.5.5 1.5.4 1.5.3 1.5.2 1.5.1 1.5.0 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 1.3.2 1.3.1 1.3.0 1.2.2 1.2.1 1.2.0 1.1.0 1.0.1 1.0.0 1.0.0-rc.4 1.0.0-rc.3 1.0.0-rc.2 1.0.0-rc.1 1.0.0-rc.0 0.17.0 0.16.4 0.16.3 0.16.2 0.16.1-2017-11 0.16.0-2017-11 0.15.1 0.15.0 0.14.1 0.14.0 0.13.9 0.13.8 0.13.7 0.13.6 0.13.5 0.13.4 retired 0.13.3 0.13.2 0.13.0 0.12.1 0.12.0 0.11.1 0.11.0 0.10.1 0.10.0 0.9.4 0.9.3 0.9.2 0.9.1 0.9.0 0.8.2 0.8.1 0.8.0 0.7.0 0.6.1 0.6.0 0.5.2 0.5.1 0.5.0 0.4.2 0.4.1

Nerves System BR - Buildroot based build platform for Nerves Systems

Current section

Files

Jump to
nerves_system_br patches buildroot 0015-erlang-use-available-memory-for-used-memory-calculat.patch
Raw

patches/buildroot/0015-erlang-use-available-memory-for-used-memory-calculat.patch

From 1738e04d0ea51757b9030f44500f820ba5ad2a25 Mon Sep 17 00:00:00 2001
From: Frank Hunleth <fhunleth@troodon-software.com>
Date: Mon, 7 Jul 2025 14:23:04 -0400
Subject: [PATCH] erlang: use available memory for used memory calculation
---
...able-memory-on-Linux-for-used-memory.patch | 79 +++++++++++++++++++
...able-memory-on-Linux-for-used-memory.patch | 79 +++++++++++++++++++
2 files changed, 158 insertions(+)
create mode 100644 package/erlang/27.3.4.3/0002-memsup-use-available-memory-on-Linux-for-used-memory.patch
create mode 100644 package/erlang/28.4/0002-memsup-use-available-memory-on-Linux-for-used-memory.patch
diff --git a/package/erlang/27.3.4.3/0002-memsup-use-available-memory-on-Linux-for-used-memory.patch b/package/erlang/27.3.4.3/0002-memsup-use-available-memory-on-Linux-for-used-memory.patch
new file mode 100644
index 0000000000..9922e5c58d
--- /dev/null
+++ b/package/erlang/27.3.4.3/0002-memsup-use-available-memory-on-Linux-for-used-memory.patch
@@ -0,0 +1,79 @@
+From 3ee931e8acf916653bdc329f0543d415ccdc7326 Mon Sep 17 00:00:00 2001
+From: Frank Hunleth <fhunleth@troodon-software.com>
+Date: Sat, 5 Jul 2025 21:47:29 -0400
+Subject: [PATCH] memsup: use available memory on Linux for used memory
+ calculation
+
+This updates `get_basic_mem` to improve the used memory calculation on
+Linux since the less accurate `__SC_AVPHYS_PAGES` code started being
+used.
+
+Since Linux is quick to use available DRAM as a filesystem cache, the
+`system_memory_high_watermark` alarm was getting set even though there
+was plenty of memory.
+
+Since `memsup:get_memory_data()` returns the values checked for the
+alarm, the following shows why the alarm was incorrectly set. In it, it
+shows about 222 MB out of 254 MB in use, but if you look at the
+`available_memory`, there's more like 254 MB - 114 MB = 140 MB in use.
+
+```
+> memsup:get_memory_data().
+{254287872, 222711808, {<0.3654.0>, 3819324}}
+> memsup:get_system_memory_data().
+[{available_memory,114470912},
+ {buffered_memory,139264},
+ {cached_memory,89665536},
+ {free_memory,33357824},
+ {free_swap,0},
+ {system_total_memory,254287872},
+ {total_memory,254287872},
+ {total_swap,0}]
+```
+
+With the change, the second element from `get_memory_data()` is much
+lower since it subtracts `available_memory` and the memory threshold
+isn't exceeded.
+---
+ lib/os_mon/c_src/memsup.c | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
+
+diff --git a/lib/os_mon/c_src/memsup.c b/lib/os_mon/c_src/memsup.c
+index 2e9f337070..1e80e4beb3 100644
+--- a/lib/os_mon/c_src/memsup.c
++++ b/lib/os_mon/c_src/memsup.c
+@@ -493,15 +493,7 @@ get_extended_mem(memory_ext *me) {
+
+ static void
+ get_basic_mem(unsigned long *tot, unsigned long *used, unsigned long *pagesize){
+-#if defined(_SC_AVPHYS_PAGES) /* Does this exist on others than Solaris2? */
+- unsigned long avPhys, phys, pgSz;
+-
+- phys = sysconf(_SC_PHYS_PAGES);
+- avPhys = sysconf(_SC_AVPHYS_PAGES);
+- *used = (phys - avPhys);
+- *tot = phys;
+- *pagesize = sysconf(_SC_PAGESIZE);
+-#elif defined(__linux__) && !defined(_SC_AVPHYS_PAGES)
++#if defined(__linux__)
+ memory_ext me;
+ if (get_mem_procfs(&me) < 0) {
+ print_error("ProcFS read error");
+@@ -514,6 +506,14 @@ get_basic_mem(unsigned long *tot, unsigned long *used, unsigned long *pagesize){
+ } else {
+ *used = me.total - me.free;
+ }
++#elif defined(_SC_AVPHYS_PAGES)
++ unsigned long avPhys, phys, pgSz;
++
++ phys = sysconf(_SC_PHYS_PAGES);
++ avPhys = sysconf(_SC_AVPHYS_PAGES);
++ *used = (phys - avPhys);
++ *tot = phys;
++ *pagesize = sysconf(_SC_PAGESIZE);
+ #elif defined(BSD4_4)
+ struct vmtotal vt;
+ long pgsz;
+--
+2.43.0
+
diff --git a/package/erlang/28.4/0002-memsup-use-available-memory-on-Linux-for-used-memory.patch b/package/erlang/28.4/0002-memsup-use-available-memory-on-Linux-for-used-memory.patch
new file mode 100644
index 0000000000..0a71c25069
--- /dev/null
+++ b/package/erlang/28.4/0002-memsup-use-available-memory-on-Linux-for-used-memory.patch
@@ -0,0 +1,79 @@
+From bd3c5eb3141a8fe243346387a14a7e38c5af8238 Mon Sep 17 00:00:00 2001
+From: Frank Hunleth <fhunleth@troodon-software.com>
+Date: Sat, 5 Jul 2025 21:47:29 -0400
+Subject: [PATCH] memsup: use available memory on Linux for used memory
+ calculation
+
+This updates `get_basic_mem` to improve the used memory calculation on
+Linux since the less accurate `__SC_AVPHYS_PAGES` code started being
+used.
+
+Since Linux is quick to use available DRAM as a filesystem cache, the
+`system_memory_high_watermark` alarm was getting set even though there
+was plenty of memory.
+
+Since `memsup:get_memory_data()` returns the values checked for the
+alarm, the following shows why the alarm was incorrectly set. In it, it
+shows about 222 MB out of 254 MB in use, but if you look at the
+`available_memory`, there's more like 254 MB - 114 MB = 140 MB in use.
+
+```
+> memsup:get_memory_data().
+{254287872, 222711808, {<0.3654.0>, 3819324}}
+> memsup:get_system_memory_data().
+[{available_memory,114470912},
+ {buffered_memory,139264},
+ {cached_memory,89665536},
+ {free_memory,33357824},
+ {free_swap,0},
+ {system_total_memory,254287872},
+ {total_memory,254287872},
+ {total_swap,0}]
+```
+
+With the change, the second element from `get_memory_data()` is much
+lower since it subtracts `available_memory` and the memory threshold
+isn't exceeded.
+---
+ lib/os_mon/c_src/memsup.c | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
+
+diff --git a/lib/os_mon/c_src/memsup.c b/lib/os_mon/c_src/memsup.c
+index 855bfa1a70..1e5a8cfd5b 100644
+--- a/lib/os_mon/c_src/memsup.c
++++ b/lib/os_mon/c_src/memsup.c
+@@ -494,15 +494,7 @@ get_extended_mem(memory_ext *me) {
+
+ static void
+ get_basic_mem(unsigned long *tot, unsigned long *used, unsigned long *pagesize){
+-#if defined(_SC_AVPHYS_PAGES) /* Does this exist on others than Solaris2? */
+- unsigned long avPhys, phys;
+-
+- phys = sysconf(_SC_PHYS_PAGES);
+- avPhys = sysconf(_SC_AVPHYS_PAGES);
+- *used = (phys - avPhys);
+- *tot = phys;
+- *pagesize = sysconf(_SC_PAGESIZE);
+-#elif defined(__linux__) && !defined(_SC_AVPHYS_PAGES)
++#if defined(__linux__)
+ memory_ext me;
+ if (get_mem_procfs(&me) < 0) {
+ print_error("ProcFS read error");
+@@ -515,6 +507,14 @@ get_basic_mem(unsigned long *tot, unsigned long *used, unsigned long *pagesize){
+ } else {
+ *used = me.total - me.free;
+ }
++#elif defined(_SC_AVPHYS_PAGES)
++ unsigned long avPhys, phys;
++
++ phys = sysconf(_SC_PHYS_PAGES);
++ avPhys = sysconf(_SC_AVPHYS_PAGES);
++ *used = (phys - avPhys);
++ *tot = phys;
++ *pagesize = sysconf(_SC_PAGESIZE);
+ #elif defined(BSD4_4)
+ struct vmtotal vt;
+ long pgsz;
+--
+2.43.0
+
--
2.43.0