mirror of
https://github.com/opencontainers/runc.git
synced 2026-04-22 23:17:17 +08:00
runc exec: implement CPU affinity
As per - https://github.com/opencontainers/runtime-spec/pull/1253 - https://github.com/opencontainers/runtime-spec/pull/1261 CPU affinity can be set in two ways: 1. When creating/starting a container, in config.json's Process.ExecCPUAffinity, which is when applied to all execs. 2. When running an exec, in process.json's CPUAffinity, which applied to a given exec and overrides the value from (1). Add some basic tests. Note that older kernels (RHEL8, Ubuntu 20.04) change CPU affinity of a process to that of a container's cgroup, as soon as it is moved to that cgroup, while newer kernels (Ubuntu 24.04, Fedora 41) don't do that. Because of the above, - it's impossible to really test initial CPU affinity without adding debug logging to libcontainer/nsenter; - for older kernels, there can be a brief moment when exec's affinity is different than either initial or final affinity being set; - exec's final CPU affinity, if not specified, can be different depending on the kernel, therefore we don't test it. Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
This commit is contained in:
@@ -709,6 +709,7 @@ func (c *Container) newInitConfig(process *Process) *initConfig {
|
||||
Rlimits: c.config.Rlimits,
|
||||
IOPriority: c.config.IOPriority,
|
||||
Scheduler: c.config.Scheduler,
|
||||
CPUAffinity: c.config.ExecCPUAffinity,
|
||||
CreateConsole: process.ConsoleSocket != nil,
|
||||
ConsoleWidth: process.ConsoleWidth,
|
||||
ConsoleHeight: process.ConsoleHeight,
|
||||
@@ -737,6 +738,9 @@ func (c *Container) newInitConfig(process *Process) *initConfig {
|
||||
if process.Scheduler != nil {
|
||||
cfg.Scheduler = process.Scheduler
|
||||
}
|
||||
if process.CPUAffinity != nil {
|
||||
cfg.CPUAffinity = process.CPUAffinity
|
||||
}
|
||||
|
||||
// Set misc properties.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user