[libvirt] [PATCH 0/9] fix thread related controllers in cgroups
Henning Schild
henning.schild at siemens.com
Fri Feb 26 10:26:11 UTC 2016
John,
thanks for the review so far. Since i will have to rebase and check
conflicts with other queued patches i would like to also get a review
of the semantics of the overall series.
Or do i first have to get the changes past a CI testsuit?
Henning
On Tue, 23 Feb 2016 16:58:33 +0100
Henning Schild <henning.schild at siemens.com> wrote:
> This series picks up the cgroups work i started earlier. My initial
> patches got in and later reverted before 1.3.1.
>
> The problem the series is solving is about qemu-threads becoming
> runnable on pcpus outside the pinning masks configured for the
> machine. That only happens for a short time before the thread is
> moved to its final cpuset. But it can disturb other load on the
> system or can lead to qemu never starting. (qemu main thread
> ends up on a pcpu with busy high prio rt-task).
>
> The problem in the original series was the lack of understanding
> that one virCgroup can cover all controllers. Instead of just touching
> cpusets the patches had side effects on all the other controllers
> (memory, blkio etc.) Again the general idea is to put all threads
> right into the correct cgroups and to not move them around. But this
> series touches only the cpu, cpuset, and cpuacct controllers. That are
> the ones relevant to threads and that are the controllers the
> threading sub-groups have mounted.
>
> Patches 1, 2, and 9 deal with asserting correct behaviour. They are
> optional. But given the complexity of the "bringup" and the importance
> of getting that right, i think they should go in as well!
>
> The tricky bits are in patches 5 and 8, i kept them as simple as
> possible.
>
> The series is based on v1.3.1.
>
> Henning Schild (9):
> vircgroup: one central point for adding tasks to cgroups
> vircgroup: add assertion to allow cgroup controllers to stay empty
> vircgroup: introduce controller mask for threads
> util: cgroups do not implicitly add task to new machine cgroup
> qemu_cgroup: put qemu right into emulator sub-cgroup
> qemu_cgroup: use virCgroupAddTask instead of virCgroupMoveTask
> vircgroup: add controller mask to virCgroupAddTask
> qemu_cgroup: dont put qemu main thread into wrong cgroup
> qemu_cgroup: assert threading cgroup layout for machine cgroup
>
> src/libvirt_private.syms | 3 +-
> src/lxc/lxc_cgroup.c | 11 ++++
> src/lxc/lxc_controller.c | 4 +-
> src/qemu/qemu_cgroup.c | 30 +++++++--
> src/qemu/qemu_driver.c | 2 +-
> src/qemu/qemu_process.c | 8 +--
> src/util/vircgroup.c | 155
> ++++++++---------------------------------------
> src/util/vircgroup.h | 13 +++- src/util/vircgrouppriv.h | 1 +
> 9 files changed, 81 insertions(+), 146 deletions(-)
>
More information about the libvir-list
mailing list