diff --git a/src/Makefile.am b/src/Makefile.am index 952dfdbb5f..12dd6b80e1 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -108,6 +108,7 @@ include locking/Makefile.inc.am include admin/Makefile.inc.am include rpc/Makefile.inc.am include test/Makefile.inc.am +include hypervisor/Makefile.inc.am include esx/Makefile.inc.am include hyperv/Makefile.inc.am include vmx/Makefile.inc.am diff --git a/src/hypervisor/Makefile.inc.am b/src/hypervisor/Makefile.inc.am new file mode 100644 index 0000000000..961b4e2b95 --- /dev/null +++ b/src/hypervisor/Makefile.inc.am @@ -0,0 +1,14 @@ +# vim: filetype=automake + +HYPERVISOR_SOURCES = \ + hypervisor/domain_cgroup.h \ + hypervisor/domain_cgroup.c \ + $(NULL) + +noinst_LTLIBRARIES += libvirt_hypervisor.la +libvirt_la_BUILT_LIBADD += libvirt_hypervisor.la +libvirt_hypervisor_la_CFLAGS = \ + -I$(srcdir)/conf \ + $(AM_CFLAGS) \ + $(NULL) +libvirt_hypervisor_la_SOURCES = $(HYPERVISOR_SOURCES) diff --git a/src/hypervisor/domain_cgroup.c b/src/hypervisor/domain_cgroup.c new file mode 100644 index 0000000000..bef60f56c5 --- /dev/null +++ b/src/hypervisor/domain_cgroup.c @@ -0,0 +1,67 @@ +/* + * domain_cgroup.c: cgroup functions shared between hypervisor drivers + * + * Copyright IBM Corp. 2020 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * . + */ + +#include + +#include "domain_cgroup.h" + + +int +virDomainCgroupSetupBlkio(virCgroupPtr cgroup, virDomainBlkiotune blkio) +{ + size_t i; + + if (blkio.weight != 0 && + virCgroupSetBlkioWeight(cgroup, blkio.weight) < 0) + return -1; + + if (blkio.ndevices) { + for (i = 0; i < blkio.ndevices; i++) { + virBlkioDevicePtr dev = &blkio.devices[i]; + + if (dev->weight && + virCgroupSetupBlkioDeviceWeight(cgroup, dev->path, + &dev->weight) < 0) + return -1; + + if (dev->riops && + virCgroupSetupBlkioDeviceReadIops(cgroup, dev->path, + &dev->riops) < 0) + return -1; + + if (dev->wiops && + virCgroupSetupBlkioDeviceWriteIops(cgroup, dev->path, + &dev->wiops) < 0) + return -1; + + if (dev->rbps && + virCgroupSetupBlkioDeviceReadBps(cgroup, dev->path, + &dev->rbps) < 0) + return -1; + + if (dev->wbps && + virCgroupSetupBlkioDeviceWriteBps(cgroup, dev->path, + &dev->wbps) < 0) + return -1; + } + } + + return 0; +} diff --git a/src/hypervisor/domain_cgroup.h b/src/hypervisor/domain_cgroup.h new file mode 100644 index 0000000000..af244bd2d2 --- /dev/null +++ b/src/hypervisor/domain_cgroup.h @@ -0,0 +1,27 @@ +/* + * domain_cgroup.h: cgroup functions shared between hypervisor drivers + * + * Copyright IBM Corp. 2020 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * . + */ + +#pragma once + +#include "vircgroup.h" +#include "domain_conf.h" + + +int virDomainCgroupSetupBlkio(virCgroupPtr cgroup, virDomainBlkiotune blkio); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 354fc79c16..283d6ef71f 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1390,6 +1390,10 @@ virSetConnectSecret; virSetConnectStorage; +# hypervisor/domain_cgroup.h +virDomainCgroupSetupBlkio; + + # libvirt_internal.h virConnectSupportsFeature; virDomainMigrateBegin3; diff --git a/src/lxc/Makefile.inc.am b/src/lxc/Makefile.inc.am index f69c1acff5..2fee607d3d 100644 --- a/src/lxc/Makefile.inc.am +++ b/src/lxc/Makefile.inc.am @@ -97,6 +97,7 @@ libvirt_driver_lxc_impl_la_CFLAGS = \ -I$(srcdir)/conf \ -I$(builddir)/lxc \ -I$(builddir)/rpc \ + -I$(srcdir)/hypervisor \ $(AM_CFLAGS) \ $(NULL) libvirt_driver_lxc_impl_la_LIBADD = \ @@ -221,6 +222,7 @@ libvirt_lxc_CFLAGS = \ -I$(srcdir)/conf \ -I$(builddir)/lxc \ -I$(builddir)/rpc \ + -I$(srcdir)/hypervisor \ $(AM_CFLAGS) \ $(PIE_CFLAGS) \ $(CAPNG_CFLAGS) \ diff --git a/src/lxc/lxc_cgroup.c b/src/lxc/lxc_cgroup.c index 3c7e31c36b..96a89256a1 100644 --- a/src/lxc/lxc_cgroup.c +++ b/src/lxc/lxc_cgroup.c @@ -23,6 +23,7 @@ #include "lxc_cgroup.h" #include "lxc_container.h" +#include "domain_cgroup.h" #include "virfile.h" #include "virerror.h" #include "virlog.h" @@ -101,44 +102,7 @@ static int virLXCCgroupSetupCpusetTune(virDomainDefPtr def, static int virLXCCgroupSetupBlkioTune(virDomainDefPtr def, virCgroupPtr cgroup) { - size_t i; - - if (def->blkio.weight && - virCgroupSetBlkioWeight(cgroup, def->blkio.weight) < 0) - return -1; - - if (def->blkio.ndevices) { - for (i = 0; i < def->blkio.ndevices; i++) { - virBlkioDevicePtr dev = &def->blkio.devices[i]; - - if (dev->weight && - virCgroupSetupBlkioDeviceWeight(cgroup, dev->path, - &dev->weight) < 0) - return -1; - - if (dev->riops && - virCgroupSetupBlkioDeviceReadIops(cgroup, dev->path, - &dev->riops) < 0) - return -1; - - if (dev->wiops && - virCgroupSetupBlkioDeviceWriteIops(cgroup, dev->path, - &dev->wiops) < 0) - return -1; - - if (dev->rbps && - virCgroupSetupBlkioDeviceReadBps(cgroup, dev->path, - &dev->rbps) < 0) - return -1; - - if (dev->wbps && - virCgroupSetupBlkioDeviceWriteBps(cgroup, dev->path, - &dev->wbps) < 0) - return -1; - } - } - - return 0; + return virDomainCgroupSetupBlkio(cgroup, def->blkio); } diff --git a/src/qemu/Makefile.inc.am b/src/qemu/Makefile.inc.am index b9c0c6ea9c..94a333f855 100644 --- a/src/qemu/Makefile.inc.am +++ b/src/qemu/Makefile.inc.am @@ -98,6 +98,7 @@ libvirt_driver_qemu_impl_la_CFLAGS = \ -I$(builddir)/access \ -I$(srcdir)/conf \ -I$(srcdir)/secret \ + -I$(srcdir)/hypervisor \ $(AM_CFLAGS) \ $(NULL) libvirt_driver_qemu_impl_la_LDFLAGS = $(AM_LDFLAGS) diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c index da96a60a08..475c063823 100644 --- a/src/qemu/qemu_cgroup.c +++ b/src/qemu/qemu_cgroup.c @@ -30,6 +30,7 @@ #include "viralloc.h" #include "virerror.h" #include "domain_audit.h" +#include "domain_cgroup.h" #include "virscsi.h" #include "virstring.h" #include "virfile.h" @@ -591,7 +592,6 @@ static int qemuSetupBlkioCgroup(virDomainObjPtr vm) { qemuDomainObjPrivatePtr priv = vm->privateData; - size_t i; if (!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_BLKIO)) { @@ -604,43 +604,7 @@ qemuSetupBlkioCgroup(virDomainObjPtr vm) } } - if (vm->def->blkio.weight != 0 && - virCgroupSetBlkioWeight(priv->cgroup, vm->def->blkio.weight) < 0) - return -1; - - if (vm->def->blkio.ndevices) { - for (i = 0; i < vm->def->blkio.ndevices; i++) { - virBlkioDevicePtr dev = &vm->def->blkio.devices[i]; - virCgroupPtr cgroup = priv->cgroup; - - if (dev->weight && - virCgroupSetupBlkioDeviceWeight(cgroup, dev->path, - &dev->weight) < 0) - return -1; - - if (dev->riops && - virCgroupSetupBlkioDeviceReadIops(cgroup, dev->path, - &dev->riops) < 0) - return -1; - - if (dev->wiops && - virCgroupSetupBlkioDeviceWriteIops(cgroup, dev->path, - &dev->wiops) < 0) - return -1; - - if (dev->rbps && - virCgroupSetupBlkioDeviceReadBps(cgroup, dev->path, - &dev->rbps) < 0) - return -1; - - if (dev->wbps && - virCgroupSetupBlkioDeviceWriteBps(cgroup, dev->path, - &dev->wbps) < 0) - return -1; - } - } - - return 0; + return virDomainCgroupSetupBlkio(priv->cgroup, vm->def->blkio); }