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(a)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(-)