Merge pull request #6641 from gkurz/backport-cgroup-fixes-to-3.1

Backport cgroup fixes to 3.1
This commit is contained in:
Jeremi Piotrowski 2023-04-12 12:24:23 +02:00 committed by GitHub
commit abd028c6c2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 13 additions and 10 deletions

View File

@ -26,7 +26,7 @@ pub trait SystemdInterface {
fn get_version(&self) -> Result<String>; fn get_version(&self) -> Result<String>;
fn unit_exist(&self, unit_name: &str) -> Result<bool>; fn unit_exists(&self, unit_name: &str) -> Result<bool>;
fn add_process(&self, pid: i32, unit_name: &str) -> Result<()>; fn add_process(&self, pid: i32, unit_name: &str) -> Result<()>;
} }
@ -36,8 +36,9 @@ pub struct DBusClient {}
impl DBusClient { impl DBusClient {
fn build_proxy(&self) -> Result<SystemManager<'static>> { fn build_proxy(&self) -> Result<SystemManager<'static>> {
let connection = zbus::blocking::Connection::system()?; let connection =
let proxy = SystemManager::new(&connection)?; zbus::blocking::Connection::system().context("Establishing a D-Bus connection")?;
let proxy = SystemManager::new(&connection).context("Building a D-Bus proxy manager")?;
Ok(proxy) Ok(proxy)
} }
} }
@ -108,8 +109,10 @@ impl SystemdInterface for DBusClient {
Ok(systemd_version) Ok(systemd_version)
} }
fn unit_exist(&self, unit_name: &str) -> Result<bool> { fn unit_exists(&self, unit_name: &str) -> Result<bool> {
let proxy = self.build_proxy()?; let proxy = self
.build_proxy()
.with_context(|| format!("Checking if systemd unit {} exists", unit_name))?;
Ok(proxy.get_unit(unit_name).is_ok()) Ok(proxy.get_unit(unit_name).is_ok())
} }

View File

@ -41,7 +41,7 @@ pub struct Manager {
impl CgroupManager for Manager { impl CgroupManager for Manager {
fn apply(&self, pid: pid_t) -> Result<()> { fn apply(&self, pid: pid_t) -> Result<()> {
let unit_name = self.unit_name.as_str(); let unit_name = self.unit_name.as_str();
if self.dbus_client.unit_exist(unit_name).unwrap() { if self.dbus_client.unit_exists(unit_name)? {
self.dbus_client.add_process(pid, self.unit_name.as_str())?; self.dbus_client.add_process(pid, self.unit_name.as_str())?;
} else { } else {
self.dbus_client.start_unit( self.dbus_client.start_unit(

View File

@ -71,7 +71,7 @@ impl Cpu {
} }
// v2: // v2:
// cpu.shares <-> CPUShares // cpu.shares <-> CPUWeight
// cpu.period <-> CPUQuotaPeriodUSec // cpu.period <-> CPUQuotaPeriodUSec
// cpu.period & cpu.quota <-> CPUQuotaPerSecUSec // cpu.period & cpu.quota <-> CPUQuotaPerSecUSec
fn unified_apply( fn unified_apply(
@ -80,8 +80,8 @@ impl Cpu {
systemd_version: &str, systemd_version: &str,
) -> Result<()> { ) -> Result<()> {
if let Some(shares) = cpu_resources.shares { if let Some(shares) = cpu_resources.shares {
let unified_shares = get_unified_cpushares(shares); let weight = shares_to_weight(shares);
properties.push(("CPUShares", Value::U64(unified_shares))); properties.push(("CPUWeight", Value::U64(weight)));
} }
if let Some(period) = cpu_resources.period { if let Some(period) = cpu_resources.period {
@ -104,7 +104,7 @@ impl Cpu {
// ref: https://github.com/containers/crun/blob/main/crun.1.md#cgroup-v2 // ref: https://github.com/containers/crun/blob/main/crun.1.md#cgroup-v2
// [2-262144] to [1-10000] // [2-262144] to [1-10000]
fn get_unified_cpushares(shares: u64) -> u64 { fn shares_to_weight(shares: u64) -> u64 {
if shares == 0 { if shares == 0 {
return 100; return 100;
} }