From 0f765706778513e4fcc1a2585ed0847d4106ec47 Mon Sep 17 00:00:00 2001 From: Tim Zhang Date: Thu, 5 Nov 2020 19:05:14 +0800 Subject: [PATCH] Avoid exception caused by cgroup writeback feature The cgroup writeback feature requires cooperation between memcgs and blkcgs. To avoid exceptions, we should add_task for blkcg before memcg(push BlkIo before Mem). For more Information: https://www.alibabacloud.com/help/doc-detail/155509.ht Signed-off-by: Tim Zhang --- src/hierarchies.rs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/hierarchies.rs b/src/hierarchies.rs index e498f70..50a2bd3 100644 --- a/src/hierarchies.rs +++ b/src/hierarchies.rs @@ -50,12 +50,19 @@ impl Hierarchy for V1 { fn subsystems(&self) -> Vec { let mut subs = vec![]; - if self.check_support(Controllers::Pids) { - subs.push(Subsystem::Pid(PidController::new(self.root(), false))); + + // The cgroup writeback feature requires cooperation between memcgs and blkcgs + // To avoid exceptions, we should add_task for blkcg before memcg(push BlkIo before Mem) + // For more Information: https://www.alibabacloud.com/help/doc-detail/155509.htm + if self.check_support(Controllers::BlkIo) { + subs.push(Subsystem::BlkIo(BlkIoController::new(self.root(), false))); } if self.check_support(Controllers::Mem) { subs.push(Subsystem::Mem(MemController::new(self.root(), false))); } + if self.check_support(Controllers::Pids) { + subs.push(Subsystem::Pid(PidController::new(self.root(), false))); + } if self.check_support(Controllers::CpuSet) { subs.push(Subsystem::CpuSet(CpuSetController::new(self.root(), false))); } @@ -77,9 +84,6 @@ impl Hierarchy for V1 { if self.check_support(Controllers::NetCls) { subs.push(Subsystem::NetCls(NetClsController::new(self.root()))); } - if self.check_support(Controllers::BlkIo) { - subs.push(Subsystem::BlkIo(BlkIoController::new(self.root(), false))); - } if self.check_support(Controllers::PerfEvent) { subs.push(Subsystem::PerfEvent(PerfEventController::new(self.root()))); }