systemd: Add support for managing cgroups through systemd

`SystemdCgroup` takes a `parent`, which is the name of a slice, and a
`unit`, which is the name of a slice or a scope unit, and provides methods
to start, kill the unit, as well as set properties for the unit.

The mods, `cpu`, `memory`, `cpuset`, and `pids`, are designed to generate
properties quickly. It hides the difference between cgroups v1 and v2, and
does simple checks for the systemd version and arguments.

Signed-off-by: Xuewei Niu <niuxuewei.nxw@antgroup.com>
This commit is contained in:
Xuewei Niu
2025-07-03 20:02:03 +08:00
parent 1250cbe182
commit 4a68c762e1
17 changed files with 1804 additions and 0 deletions
+16
View File
@@ -0,0 +1,16 @@
// Copyright (c) 2025 Ant Group
//
// SPDX-License-Identifier: Apache-2.0 or MIT
//
use zbus::blocking::Connection;
use zbus::Result;
use crate::systemd::dbus::systemd_manager_proxy::ManagerProxyBlocking as SystemManager;
pub(crate) fn systemd_manager_proxy<'a>() -> Result<SystemManager<'a>> {
let connection = Connection::system()?;
let proxy = SystemManager::new(&connection)?;
Ok(proxy)
}