Skip to content

Commit

Permalink
Memory (Linux): Use MemAvailable if available
Browse files Browse the repository at this point in the history
  • Loading branch information
CarterLi committed Dec 7, 2023
1 parent 0182e32 commit a9c5c28
Showing 1 changed file with 26 additions and 16 deletions.
42 changes: 26 additions & 16 deletions src/detection/memory/memory_linux.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,33 +13,43 @@ const char* ffDetectMemory(FFMemoryResult* ram)
buf[nRead] = '\0';

uint64_t memTotal = 0,
memAvailable = 0,
shmem = 0,
memFree = 0,
buffers = 0,
cached = 0,
sReclaimable = 0;

char *token = NULL;
if((token = strstr(buf, "MemTotal:")) != NULL)
memTotal = strtoul(token + strlen("MemTotal:"), NULL, 10);
else
return "MemTotal not found in /proc/meminfo";

if((token = strstr(buf, "MemAvailable:")) != NULL)
memAvailable = strtoul(token + strlen("MemAvailable:"), NULL, 10);
else
{
if((token = strstr(buf, "MemFree:")) != NULL)
memFree = strtoul(token + strlen("MemFree:"), NULL, 10);

if((token = strstr(buf, "Buffers:")) != NULL)
buffers = strtoul(token + strlen("Buffers:"), NULL, 10);

if((token = strstr(buf, "Cached:")) != NULL)
cached = strtoul(token + strlen("Cached:"), NULL, 10);

if((token = strstr(buf, "Shmem:")) != NULL)
shmem = strtoul(token + strlen("Shmem:"), NULL, 10);

if((token = strstr(buf, "SReclaimable:")) != NULL)
sReclaimable = strtoul(token + strlen("SReclaimable:"), NULL, 10);

if((token = strstr(buf, "MemFree:")) != NULL)
memFree = strtoul(token + strlen("MemFree:"), NULL, 10);

if((token = strstr(buf, "Buffers:")) != NULL)
buffers = strtoul(token + strlen("Buffers:"), NULL, 10);

if((token = strstr(buf, "Cached:")) != NULL)
cached = strtoul(token + strlen("Cached:"), NULL, 10);

if((token = strstr(buf, "Shmem:")) != NULL)
shmem = strtoul(token + strlen("Shmem:"), NULL, 10);

if((token = strstr(buf, "SReclaimable:")) != NULL)
sReclaimable = strtoul(token + strlen("SReclaimable:"), NULL, 10);
memAvailable = memFree + buffers + cached + sReclaimable - shmem;
}

ram->bytesTotal = memTotal * 1024lu;
ram->bytesUsed = (memTotal + shmem - memFree - buffers - cached - sReclaimable) * 1024lu;
ram->bytesUsed = (memTotal - memAvailable) * 1024lu;

return NULL;
}

0 comments on commit a9c5c28

Please sign in to comment.