Memory (Linux): try improving performance

This commit is contained in:
李通洲
2023-11-24 10:12:34 +08:00
parent 919bd8231e
commit 96d60184d5
+27 -17
View File
@@ -1,42 +1,52 @@
#include "memory.h"
#include "common/io/io.h"
#include "util/mallocHelper.h"
#include <stdlib.h>
#include <string.h>
#include <inttypes.h>
const char* ffDetectMemory(FFMemoryResult* ram)
{
FILE* meminfo = fopen("/proc/meminfo", "r");
FF_AUTO_CLOSE_FILE FILE* meminfo = fopen("/proc/meminfo", "r");
if(meminfo == NULL)
return "Failed to open /proc/meminfo";
char* FF_AUTO_FREE line = NULL;
size_t len = 0;
uint32_t memTotal = 0,
uint64_t memTotal = 0,
shmem = 0,
memFree = 0,
buffers = 0,
cached = 0,
sReclaimable = 0;
uint8_t count = 0;
while (getline(&line, &len, meminfo) != EOF)
{
if(!sscanf(line, "MemTotal: %u", &memTotal))
if(!sscanf(line, "Shmem: %u", &shmem))
if(!sscanf(line, "MemFree: %u", &memFree))
if(!sscanf(line, "Buffers: %u", &buffers))
if(!sscanf(line, "Cached: %u", &cached))
sscanf(line, "SReclaimable: %u", &sReclaimable);
switch (line[0])
{
case 'B':
if (sscanf(line, "Buffers: %" PRIu64, &buffers) > 0)
if (++count >= 6) goto done;
break;
case 'C':
if (sscanf(line, "Cached: %" PRIu64, &cached) > 0)
if (++count >= 6) goto done;
break;
case 'M':
if(sscanf(line, "MemTotal: %" PRIu64, &memTotal) > 0 || sscanf(line, "MemFree: %u", &memFree) > 0)
if (++count >= 6) goto done;
break;
case 'S':
if(sscanf(line, "Shmem: %" PRIu64, &shmem) > 0 || sscanf(line, "SReclaimable: %u", &sReclaimable) > 0)
if (++count >= 6) goto done;
break;
}
}
fclose(meminfo);
ram->bytesTotal = memTotal * (uint64_t) 1024;
if(ram->bytesTotal == 0)
return "Failed to read MemTotal";
else
ram->bytesUsed = (memTotal + shmem - memFree - buffers - cached - sReclaimable) * (uint64_t) 1024;
done:
ram->bytesTotal = memTotal * 1024lu;
ram->bytesUsed = (memTotal + shmem - memFree - buffers - cached - sReclaimable) * 1024lu;
return NULL;
}