MemAvailable field in /proc/meminfo appeared in Linux kernel around 2015 and is recommended way to query free RAM. The way we currently estimate it consistently reports more free RAM available.
The old way of estimating free RAM should still work if MemAvailable field is not there.
From: Paul Gofman pgofman@codeweavers.com
--- dlls/ntdll/unix/system.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/unix/system.c b/dlls/ntdll/unix/system.c index b9762fd278f..33e93bbdf32 100644 --- a/dlls/ntdll/unix/system.c +++ b/dlls/ntdll/unix/system.c @@ -1885,7 +1885,7 @@ static void get_performance_info( SYSTEM_PERFORMANCE_INFORMATION *info )
if ((fp = fopen("/proc/meminfo", "r"))) { - unsigned long long value; + unsigned long long value, mem_available = 0; char line[64];
while (fgets(line, sizeof(line), fp)) @@ -1902,8 +1902,11 @@ static void get_performance_info( SYSTEM_PERFORMANCE_INFORMATION *info ) freeram += value * 1024; else if (sscanf(line, "Cached: %llu", &value)) freeram += value * 1024; + else if (sscanf(line, "MemAvailable: %llu", &value)) + mem_available = value * 1024; } fclose(fp); + if (mem_available) freeram = mem_available; } } #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || \