mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#3885 Include "Cached" memory in available virtual memory on Linux.
* Cached memory is easily available to processes if needed.
This commit is contained in:
@@ -41,6 +41,46 @@ std::map<QString, uint64_t> readProcessBytesLinux()
|
|||||||
}
|
}
|
||||||
return quantities;
|
return quantities;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
/// Read bytes of memory of different types for system from /proc/meminfo
|
||||||
|
/// See: http://man7.org/linux/man-pages/man5/proc.5.html
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
std::map<QString, uint64_t> readMemInfoLinuxMiB()
|
||||||
|
{
|
||||||
|
std::map<QString, uint64_t> quantities;
|
||||||
|
uint64_t conversionToMiB = 1024;
|
||||||
|
QFile procMemInfo("/proc/meminfo");
|
||||||
|
|
||||||
|
if (procMemInfo.open(QIODevice::ReadOnly | QIODevice::Text))
|
||||||
|
{
|
||||||
|
char buf[1024];
|
||||||
|
qint64 lineLength = 0;
|
||||||
|
while (lineLength != -1)
|
||||||
|
{
|
||||||
|
lineLength = procMemInfo.readLine(buf, sizeof(buf));
|
||||||
|
if (lineLength > 0)
|
||||||
|
{
|
||||||
|
QString line = QString::fromLatin1(buf, lineLength);
|
||||||
|
QStringList words = line.split(QRegExp(":*\\s+"), QString::SkipEmptyParts);
|
||||||
|
if (words.size() > 1)
|
||||||
|
{
|
||||||
|
bool ok = true;
|
||||||
|
unsigned long long value = words[1].toULongLong(&ok);
|
||||||
|
if (ok)
|
||||||
|
{
|
||||||
|
quantities[words[0]] = value / conversionToMiB;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
quantities[words[0]] = 0u;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return quantities;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
@@ -93,7 +133,8 @@ uint64_t caf::MemoryInspector::getTotalVirtualMemoryMiB()
|
|||||||
long long totalVirtualMem = memInfo.totalram;
|
long long totalVirtualMem = memInfo.totalram;
|
||||||
totalVirtualMem += memInfo.totalswap;
|
totalVirtualMem += memInfo.totalswap;
|
||||||
totalVirtualMem *= memInfo.mem_unit;
|
totalVirtualMem *= memInfo.mem_unit;
|
||||||
return totalVirtualMem / MIB_DIV;
|
uint64_t totalVirtualMemMiB = totalVirtualMem / MIB_DIV;
|
||||||
|
return totalVirtualMemMiB;
|
||||||
#else
|
#else
|
||||||
return 0u;
|
return 0u;
|
||||||
#endif
|
#endif
|
||||||
@@ -137,8 +178,12 @@ uint64_t caf::MemoryInspector::getAvailableVirtualMemoryMiB()
|
|||||||
sysinfo(&memInfo);
|
sysinfo(&memInfo);
|
||||||
long long availVirtualMem = memInfo.freeram;
|
long long availVirtualMem = memInfo.freeram;
|
||||||
availVirtualMem += memInfo.freeswap;
|
availVirtualMem += memInfo.freeswap;
|
||||||
|
availVirtualMem += memInfo.bufferram;
|
||||||
availVirtualMem *= memInfo.mem_unit;
|
availVirtualMem *= memInfo.mem_unit;
|
||||||
return availVirtualMem / MIB_DIV;
|
uint64_t virtualMemoryWithoutCachedMiB = availVirtualMem / MIB_DIV;
|
||||||
|
uint64_t cachedMemMiB = readMemInfoLinuxMiB()["Cached"];
|
||||||
|
uint64_t totalFreeVirtualMemoryMiB = virtualMemoryWithoutCachedMiB + cachedMemMiB;
|
||||||
|
return totalFreeVirtualMemoryMiB;
|
||||||
#else
|
#else
|
||||||
return 0u;
|
return 0u;
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user