mirror of
https://github.com/opencontainers/runc.git
synced 2026-07-10 21:53:57 +08:00
deps: bump cgroups to v0.0.3, fix tests
For changelog, see https://github.com/opencontainers/cgroups/releases/tag/v0.0.3 This fixes two runc issues: 1. JSON incompatibility introduced in cgroups v0.0.2 (see https://github.com/opencontainers/cgroups/pull/22). 2. Bad CPU shares to CPU weight conversion (see https://github.com/opencontainers/runc/issues/4772). Due to item 2, modify some tests accordingly. Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
This commit is contained in:
@@ -14,7 +14,7 @@ require (
|
||||
github.com/moby/sys/user v0.4.0
|
||||
github.com/moby/sys/userns v0.1.0
|
||||
github.com/mrunalp/fileutils v0.5.1
|
||||
github.com/opencontainers/cgroups v0.0.2
|
||||
github.com/opencontainers/cgroups v0.0.3
|
||||
github.com/opencontainers/runtime-spec v1.2.2-0.20250401095657-e935f995dd67
|
||||
github.com/opencontainers/selinux v1.12.0
|
||||
github.com/seccomp/libseccomp-golang v0.11.0
|
||||
|
||||
@@ -45,8 +45,8 @@ github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g
|
||||
github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28=
|
||||
github.com/mrunalp/fileutils v0.5.1 h1:F+S7ZlNKnrwHfSwdlgNSkKo67ReVf8o9fel6C3dkm/Q=
|
||||
github.com/mrunalp/fileutils v0.5.1/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ=
|
||||
github.com/opencontainers/cgroups v0.0.2 h1:A+mAPPMfgKNCEZUUtibESFx06uvhAmvo8sSz3Abwk7o=
|
||||
github.com/opencontainers/cgroups v0.0.2/go.mod h1:s8lktyhlGUqM7OSRL5P7eAW6Wb+kWPNvt4qvVfzA5vs=
|
||||
github.com/opencontainers/cgroups v0.0.3 h1:Jc9dWh/0YLGjdy6J/9Ln8NM5BfTA4W2BY0GMozy3aDU=
|
||||
github.com/opencontainers/cgroups v0.0.3/go.mod h1:s8lktyhlGUqM7OSRL5P7eAW6Wb+kWPNvt4qvVfzA5vs=
|
||||
github.com/opencontainers/runtime-spec v1.2.2-0.20250401095657-e935f995dd67 h1:Q+KewUGTMamIe6Q39xCD/T1NC1POmaTlWnhjikCrZHA=
|
||||
github.com/opencontainers/runtime-spec v1.2.2-0.20250401095657-e935f995dd67/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||
github.com/opencontainers/selinux v1.12.0 h1:6n5JV4Cf+4y0KNXW48TLj5DwfXpvWlxXplUkdTrmPb8=
|
||||
|
||||
@@ -352,7 +352,18 @@ function check_cpu_shares() {
|
||||
local shares=$1
|
||||
|
||||
if [ -v CGROUP_V2 ]; then
|
||||
local weight=$((1 + ((shares - 2) * 9999) / 262142))
|
||||
# Same formula as ConvertCPUSharesToCgroupV2Value.
|
||||
local weight
|
||||
weight=$(awk -v shares="$shares" '
|
||||
BEGIN {
|
||||
if (shares == 0) { print 0; exit }
|
||||
if (shares <= 2) { print 1; exit }
|
||||
if (shares >= 262144) { print 10000; exit }
|
||||
l = log(shares) / log(2)
|
||||
exponent = (l*l + 125*l) / 612.0 - 7.0/34.0
|
||||
print int(exp(exponent * log(10)) + 0.99)
|
||||
}')
|
||||
|
||||
check_cpu_weight "$weight"
|
||||
else
|
||||
check_cgroup_value "cpu.shares" "$shares"
|
||||
|
||||
@@ -545,10 +545,9 @@ EOF
|
||||
runc run -d --console-socket "$CONSOLE_SOCKET" test_update
|
||||
[ "$status" -eq 0 ]
|
||||
|
||||
# Check that initial values were properly set.
|
||||
# Check that initial values (from setup) were properly set.
|
||||
check_cpu_quota 500000 1000000
|
||||
# Initial cpu shares of 100 corresponds to weight of 4.
|
||||
check_cpu_weight 4
|
||||
check_cpu_shares 100
|
||||
check_systemd_value "TasksMax" 20
|
||||
|
||||
runc update -r - test_update <<EOF
|
||||
|
||||
+1
-1
@@ -29,7 +29,7 @@ type Cgroup struct {
|
||||
ScopePrefix string `json:"scope_prefix,omitempty"`
|
||||
|
||||
// Resources contains various cgroups settings to apply.
|
||||
*Resources `json:"Resources,omitempty"`
|
||||
*Resources
|
||||
|
||||
// Systemd tells if systemd should be used to manage cgroups.
|
||||
Systemd bool `json:"Systemd,omitempty"`
|
||||
|
||||
+21
-6
@@ -5,6 +5,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"math"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
@@ -413,16 +414,30 @@ func WriteCgroupProc(dir string, pid int) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// Since the OCI spec is designed for cgroup v1, in some cases
|
||||
// there is need to convert from the cgroup v1 configuration to cgroup v2
|
||||
// the formula for cpuShares is y = (1 + ((x - 2) * 9999) / 262142)
|
||||
// convert from [2-262144] to [1-10000]
|
||||
// 262144 comes from Linux kernel definition "#define MAX_SHARES (1UL << 18)"
|
||||
// ConvertCPUSharesToCgroupV2Value converts CPU shares, used by cgroup v1,
|
||||
// to CPU weight, used by cgroup v2.
|
||||
//
|
||||
// Cgroup v1 CPU shares has a range of [2^1...2^18], i.e. [2...262144],
|
||||
// and the default value is 1024.
|
||||
//
|
||||
// Cgroup v2 CPU weight has a range of [10^0...10^4], i.e. [1...10000],
|
||||
// and the default value is 100.
|
||||
func ConvertCPUSharesToCgroupV2Value(cpuShares uint64) uint64 {
|
||||
// The value of 0 means "unset".
|
||||
if cpuShares == 0 {
|
||||
return 0
|
||||
}
|
||||
return (1 + ((cpuShares-2)*9999)/262142)
|
||||
if cpuShares <= 2 {
|
||||
return 1
|
||||
}
|
||||
if cpuShares >= 262144 {
|
||||
return 10000
|
||||
}
|
||||
l := math.Log2(float64(cpuShares))
|
||||
// Quadratic function which fits min, max, and default.
|
||||
exponent := (l*l+125*l)/612.0 - 7.0/34.0
|
||||
|
||||
return uint64(math.Ceil(math.Pow(10, exponent)))
|
||||
}
|
||||
|
||||
// ConvertMemorySwapToCgroupV2Value converts MemorySwap value from OCI spec
|
||||
|
||||
Vendored
+1
-1
@@ -51,7 +51,7 @@ github.com/moby/sys/userns
|
||||
# github.com/mrunalp/fileutils v0.5.1
|
||||
## explicit; go 1.13
|
||||
github.com/mrunalp/fileutils
|
||||
# github.com/opencontainers/cgroups v0.0.2
|
||||
# github.com/opencontainers/cgroups v0.0.3
|
||||
## explicit; go 1.23.0
|
||||
github.com/opencontainers/cgroups
|
||||
github.com/opencontainers/cgroups/devices
|
||||
|
||||
Reference in New Issue
Block a user