mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 19:32:19 +00:00
vircgroup: Introduce virCgroupGetMemoryStat
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
This commit is contained in:
parent
db868852fd
commit
901d2b9c87
@ -1532,6 +1532,7 @@ virCgroupGetDomainTotalCpuStats;
|
|||||||
virCgroupGetFreezerState;
|
virCgroupGetFreezerState;
|
||||||
virCgroupGetMemoryHardLimit;
|
virCgroupGetMemoryHardLimit;
|
||||||
virCgroupGetMemorySoftLimit;
|
virCgroupGetMemorySoftLimit;
|
||||||
|
virCgroupGetMemoryStat;
|
||||||
virCgroupGetMemoryUsage;
|
virCgroupGetMemoryUsage;
|
||||||
virCgroupGetMemSwapHardLimit;
|
virCgroupGetMemSwapHardLimit;
|
||||||
virCgroupGetMemSwapUsage;
|
virCgroupGetMemSwapUsage;
|
||||||
|
@ -2427,6 +2427,94 @@ virCgroupSetMemory(virCgroupPtr group, unsigned long long kb)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virCgroupGetMemoryStat:
|
||||||
|
*
|
||||||
|
* @group: The cgroup to change memory for
|
||||||
|
* @cache: page cache memory in KiB
|
||||||
|
* @activeAnon: anonymous and swap cache memory in KiB
|
||||||
|
* @inactiveAnon: anonymous and swap cache memory in KiB
|
||||||
|
* @activeFile: file-backed memory in KiB
|
||||||
|
* @inactiveFile: file-backed memory in KiB
|
||||||
|
* @unevictable: memory that cannot be reclaimed KiB
|
||||||
|
*
|
||||||
|
* Returns: 0 on success, -1 on error
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
virCgroupGetMemoryStat(virCgroupPtr group,
|
||||||
|
unsigned long long *cache,
|
||||||
|
unsigned long long *activeAnon,
|
||||||
|
unsigned long long *inactiveAnon,
|
||||||
|
unsigned long long *activeFile,
|
||||||
|
unsigned long long *inactiveFile,
|
||||||
|
unsigned long long *unevictable)
|
||||||
|
{
|
||||||
|
int ret = -1;
|
||||||
|
char *stat = NULL;
|
||||||
|
char *line = NULL;
|
||||||
|
unsigned long long cacheVal = 0;
|
||||||
|
unsigned long long activeAnonVal = 0;
|
||||||
|
unsigned long long inactiveAnonVal = 0;
|
||||||
|
unsigned long long activeFileVal = 0;
|
||||||
|
unsigned long long inactiveFileVal = 0;
|
||||||
|
unsigned long long unevictableVal = 0;
|
||||||
|
|
||||||
|
if (virCgroupGetValueStr(group,
|
||||||
|
VIR_CGROUP_CONTROLLER_MEMORY,
|
||||||
|
"memory.stat",
|
||||||
|
&stat) < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
line = stat;
|
||||||
|
|
||||||
|
while (line) {
|
||||||
|
char *newLine = strchr(line, '\n');
|
||||||
|
char *valueStr = strchr(line, ' ');
|
||||||
|
unsigned long long value;
|
||||||
|
|
||||||
|
if (newLine)
|
||||||
|
*newLine = '\0';
|
||||||
|
|
||||||
|
if (!valueStr) {
|
||||||
|
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||||
|
_("Cannot parse 'memory.stat' cgroup file."));
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
*valueStr = '\0';
|
||||||
|
|
||||||
|
if (virStrToLong_ull(valueStr + 1, NULL, 10, &value) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (STREQ(line, "cache"))
|
||||||
|
cacheVal = value >> 10;
|
||||||
|
else if (STREQ(line, "active_anon"))
|
||||||
|
activeAnonVal = value >> 10;
|
||||||
|
else if (STREQ(line, "inactive_anon"))
|
||||||
|
inactiveAnonVal = value >> 10;
|
||||||
|
else if (STREQ(line, "active_file"))
|
||||||
|
activeFileVal = value >> 10;
|
||||||
|
else if (STREQ(line, "inactive_file"))
|
||||||
|
inactiveFileVal = value >> 10;
|
||||||
|
else if (STREQ(line, "unevictable"))
|
||||||
|
unevictableVal = value >> 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
*cache = cacheVal;
|
||||||
|
*activeAnon = activeAnonVal;
|
||||||
|
*inactiveAnon = inactiveAnonVal;
|
||||||
|
*activeFile = activeFileVal;
|
||||||
|
*inactiveFile = inactiveFileVal;
|
||||||
|
*unevictable = unevictableVal;
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
VIR_FREE(stat);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* virCgroupGetMemoryUsage:
|
* virCgroupGetMemoryUsage:
|
||||||
*
|
*
|
||||||
|
@ -177,6 +177,13 @@ int virCgroupGetBlkioDeviceWriteBps(virCgroupPtr group,
|
|||||||
unsigned long long *wbps);
|
unsigned long long *wbps);
|
||||||
|
|
||||||
int virCgroupSetMemory(virCgroupPtr group, unsigned long long kb);
|
int virCgroupSetMemory(virCgroupPtr group, unsigned long long kb);
|
||||||
|
int virCgroupGetMemoryStat(virCgroupPtr group,
|
||||||
|
unsigned long long *cache,
|
||||||
|
unsigned long long *activeAnon,
|
||||||
|
unsigned long long *inactiveAnon,
|
||||||
|
unsigned long long *activeFile,
|
||||||
|
unsigned long long *inactiveFile,
|
||||||
|
unsigned long long *unevictable);
|
||||||
int virCgroupGetMemoryUsage(virCgroupPtr group, unsigned long *kb);
|
int virCgroupGetMemoryUsage(virCgroupPtr group, unsigned long *kb);
|
||||||
|
|
||||||
int virCgroupSetMemoryHardLimit(virCgroupPtr group, unsigned long long kb);
|
int virCgroupSetMemoryHardLimit(virCgroupPtr group, unsigned long long kb);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user