On Thu, Oct 04, 2018 at 01:18:16PM +0200, Michal Privoznik wrote: > On 10/02/2018 10:43 AM, Pavel Hrdina wrote: > > Cgroup v2 has only single mount point for all controllers. The list > > of controllers is stored in cgroup.controllers file, name of controllers > > are separated by space. > > > > In cgroup v2 there is no cpuacct controller, the cpu.stat file always > > exists with usage stats. > > > > Signed-off-by: Pavel Hrdina <phrdina@xxxxxxxxxx> > > --- > > src/util/vircgroupv2.c | 67 ++++++++++++++++++++++++++++++++++++++++++ > > 1 file changed, 67 insertions(+) > > > > diff --git a/src/util/vircgroupv2.c b/src/util/vircgroupv2.c > > index d4e0366780..3200338fe3 100644 > > --- a/src/util/vircgroupv2.c > > +++ b/src/util/vircgroupv2.c > > @@ -32,6 +32,7 @@ > > #include "vircgroup.h" > > #include "vircgroupbackend.h" > > #include "vircgroupv2.h" > > +#include "virerror.h" > > #include "virfile.h" > > #include "virlog.h" > > #include "virstring.h" > > @@ -232,6 +233,71 @@ virCgroupV2StealPlacement(virCgroupPtr group) > > } > > > > > > +static int > > +virCgroupV2ParseControllersFile(virCgroupPtr group) > > +{ > > + int rc; > > + VIR_AUTOFREE(char *) contStr = NULL; > > + VIR_AUTOFREE(char *) contFile = NULL; > > + char **contList = NULL; > > + char **tmp; > > + > > + if (virAsprintf(&contFile, "%s/cgroup.controllers", > > + group->unified.mountPoint) < 0) > > + return -1; > > + > > + rc = virFileReadAll(contFile, 1024 * 1024, &contStr); > > + if (rc < 0) { > > + virReportSystemError(errno, _("Unable to read from '%s'"), contFile); > > + return -1; > > + } > > + > > + virTrimSpaces(contStr, NULL); > > + > > + contList = virStringSplit(contStr, " ", 20); > > + if (!contList) > > + return -1; > > + > > + tmp = contList; > > + > > + while (*tmp) { > > + int type = virCgroupV2ControllerTypeFromString(*tmp); > > + > > + if (type >= 0) > > + group->unified.controllers |= 1 << type; > > + > > + tmp++; > > + } > > + > > + virStringListFree(contList); > > + > > + return 0; > > +} > > + > > + > > +static int > > +virCgroupV2DetectControllers(virCgroupPtr group, > > + int controllers) > > +{ > > + size_t i; > > + > > + if (virCgroupV2ParseControllersFile(group) < 0) > > + return -1; > > + > > + group->unified.controllers |= 1 << VIR_CGROUP_CONTROLLER_CPUACCT; > > I'd put a comment here describing what you do in the commit message. > Sure I can go to commit message if I want to, but a comment is more handy. Since I was considering it I'll fix it before pushing, thanks. > > > + > > + for (i = 0; i < VIR_CGROUP_CONTROLLER_LAST; i++) > > + VIR_DEBUG("Controller '%s' present=%s", > > + virCgroupV2ControllerTypeToString(i), > > + (group->unified.controllers & 1 << i) ? "yes" : "no"); > > + > > + if (controllers >= 0) > > + return controllers & group->unified.controllers; > > + else > > + return group->unified.controllers; > > +} > > + > > + > > virCgroupBackend virCgroupV2Backend = { > > .type = VIR_CGROUP_BACKEND_TYPE_V2, > > > > @@ -243,6 +309,7 @@ virCgroupBackend virCgroupV2Backend = { > > .detectPlacement = virCgroupV2DetectPlacement, > > .validatePlacement = virCgroupV2ValidatePlacement, > > .stealPlacement = virCgroupV2StealPlacement, > > + .detectControllers = virCgroupV2DetectControllers, > > }; > > > > > > > > ACK > > Michal
Attachment:
signature.asc
Description: PGP signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list