Skip to content

Commit

Permalink
Ignore cpu realtime options on cgroups V2 systems
Browse files Browse the repository at this point in the history
`--cpu-rt-period` and `--cpu-rt-runtime` options are only
supported on cgroups V2 systems.

Therefore, podman prints an warning message and ignores these
options when we use cgroups V2 systems.

Related to: containers#15666

Signed-off-by: Toshiki Sonoda <sonoda.toshiki@fujitsu.com>
  • Loading branch information
sstosh committed Sep 9, 2022
1 parent 6d8bafe commit db23027
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 1 deletion.
16 changes: 15 additions & 1 deletion pkg/specgen/generate/validate.go
Expand Up @@ -82,7 +82,7 @@ func verifyContainerResourcesCgroupV1(s *specgen.SpecGenerator) ([]string, error
}
}

// CPU Checks
// CPU checks
if s.ResourceLimits.CPU != nil {
cpu := s.ResourceLimits.CPU
if cpu.Shares != nil && !sysInfo.CPUShares {
Expand Down Expand Up @@ -169,6 +169,7 @@ func verifyContainerResourcesCgroupV2(s *specgen.SpecGenerator) ([]string, error
return warnings, nil
}

// Memory checks
if s.ResourceLimits.Memory != nil && s.ResourceLimits.Memory.Swap != nil {
own, err := utils.GetOwnCgroup()
if err != nil {
Expand Down Expand Up @@ -198,6 +199,19 @@ func verifyContainerResourcesCgroupV2(s *specgen.SpecGenerator) ([]string, error
s.ResourceLimits.Memory.Swap = nil
}
}

// CPU checks
if s.ResourceLimits.CPU != nil {
cpu := s.ResourceLimits.CPU
if cpu.RealtimePeriod != nil {
warnings = append(warnings, "Realtime period not supported on cgroups V2 systems")
cpu.RealtimePeriod = nil
}
if cpu.RealtimeRuntime != nil {
warnings = append(warnings, "Realtime runtime not supported on cgroups V2 systems")
cpu.RealtimeRuntime = nil
}
}
return warnings, nil
}

Expand Down
16 changes: 16 additions & 0 deletions test/e2e/run_cpu_test.go
Expand Up @@ -138,4 +138,20 @@ var _ = Describe("Podman run cpu", func() {
result.WaitWithDefaultTimeout()
Expect(result).To(ExitWithError())
})

It("podman run invalid cpu-rt-period with cgroupsv2", func() {
SkipIfCgroupV1("testing options that only work in cgroup v2")
result := podmanTest.Podman([]string{"run", "--rm", "--cpu-rt-period=5000", ALPINE, "ls"})
result.WaitWithDefaultTimeout()
Expect(result).Should(Exit(0))
Expect(result.ErrorToString()).To(ContainSubstring("Realtime period not supported on cgroups V2 systems"))
})

It("podman run invalid cpu-rt-runtime with cgroupsv2", func() {
SkipIfCgroupV1("testing options that only work in cgroup v2")
result := podmanTest.Podman([]string{"run", "--rm", "--cpu-rt-runtime=5000", ALPINE, "ls"})
result.WaitWithDefaultTimeout()
Expect(result).Should(Exit(0))
Expect(result.ErrorToString()).To(ContainSubstring("Realtime runtime not supported on cgroups V2 systems"))
})
})

0 comments on commit db23027

Please sign in to comment.