+Fri Mar 6 15:42:46 CET 2009 Daniel Veillard <veilard@redhat.com>
+
+ * src/cgroup.c src/cgroup.h src/lxc_driver.c: allows to get
+ CPU usage of a lxc using cpuacct subsystem of cgroups, patch
+ by Ryota Ozaki
+
Wed Mar 4 14:11:15 CET 2009 Daniel Veillard <veilard@redhat.com>
* NEWS configure.in libvirt.spec.in doc/* include/libvirt/libvirt.h:
const char *supported_controllers[] = {
"memory",
"devices",
+ "cpuacct",
NULL
};
{
return virCgroupGetValueU64(group, "cpu.shares", (uint64_t *)shares);
}
+
+int virCgroupGetCpuacctUsage(virCgroupPtr group, unsigned long long *usage)
+{
+ return virCgroupGetValueU64(group, "cpuacct.usage", (uint64_t *)usage);
+}
int virCgroupSetCpuShares(virCgroupPtr group, unsigned long shares);
int virCgroupGetCpuShares(virCgroupPtr group, unsigned long *shares);
+int virCgroupGetCpuacctUsage(virCgroupPtr group, unsigned long long *usage);
+
int virCgroupRemove(virCgroupPtr group);
void virCgroupFree(virCgroupPtr *group);
{
lxc_driver_t *driver = dom->conn->privateData;
virDomainObjPtr vm;
+ virCgroupPtr cgroup = NULL;
int ret = -1;
lxcDriverLock(driver);
info->state = vm->state;
- if (!virDomainIsActive(vm)) {
+ if (!virDomainIsActive(vm) || virCgroupHaveSupport() != 0) {
info->cpuTime = 0;
} else {
- info->cpuTime = 0;
+ if (virCgroupForDomain(vm->def, "lxc", &cgroup) != 0) {
+ lxcError(dom->conn, dom, VIR_ERR_INTERNAL_ERROR,
+ _("Unable to get cgroup for %s\n"), vm->def->name);
+ goto cleanup;
+ }
+
+ if (virCgroupGetCpuacctUsage(cgroup, &(info->cpuTime)) < 0) {
+ lxcError(dom->conn, dom, VIR_ERR_OPERATION_FAILED, ("cannot read cputime for domain"));
+ goto cleanup;
+ }
}
info->maxMem = vm->def->maxmem;
ret = 0;
cleanup:
+ if (cgroup)
+ virCgroupFree(&cgroup);
if (vm)
virDomainObjUnlock(vm);
return ret;