github.com/containers/libpod@v1.9.4-0.20220419124438-4284fd425507/test/e2e/run_cpu_test.go (about) 1 // +build !remoteclient 2 3 package integration 4 5 import ( 6 "io/ioutil" 7 "os" 8 9 "github.com/containers/libpod/pkg/cgroups" 10 . "github.com/containers/libpod/test/utils" 11 . "github.com/onsi/ginkgo" 12 . "github.com/onsi/gomega" 13 ) 14 15 var _ = Describe("Podman run cpu", func() { 16 var ( 17 tempdir string 18 err error 19 podmanTest *PodmanTestIntegration 20 ) 21 22 BeforeEach(func() { 23 tempdir, err = CreateTempDirInTempDir() 24 if err != nil { 25 os.Exit(1) 26 } 27 28 cgroupsv2, err := cgroups.IsCgroup2UnifiedMode() 29 Expect(err).To(BeNil()) 30 31 if cgroupsv2 { 32 if err := ioutil.WriteFile("/sys/fs/cgroup/cgroup.subtree_control", []byte("+cpuset"), 0644); err != nil { 33 Skip("cpuset controller not available on the current kernel") 34 } 35 } 36 37 podmanTest = PodmanTestCreate(tempdir) 38 podmanTest.Setup() 39 podmanTest.SeedImages() 40 }) 41 42 AfterEach(func() { 43 podmanTest.Cleanup() 44 f := CurrentGinkgoTestDescription() 45 processTestResult(f) 46 47 }) 48 49 It("podman run cpu-period", func() { 50 SkipIfRootless() 51 52 cgroupsv2, err := cgroups.IsCgroup2UnifiedMode() 53 Expect(err).To(BeNil()) 54 55 var result *PodmanSessionIntegration 56 if cgroupsv2 { 57 result = podmanTest.Podman([]string{"run", "--rm", "--cpu-period=5000", ALPINE, "sh", "-c", "cat /sys/fs/cgroup/$(sed -e 's|0::||' < /proc/self/cgroup)/cpu.max"}) 58 } else { 59 result = podmanTest.Podman([]string{"run", "--rm", "--cpu-period=5000", ALPINE, "cat", "/sys/fs/cgroup/cpu/cpu.cfs_period_us"}) 60 } 61 result.WaitWithDefaultTimeout() 62 Expect(result.ExitCode()).To(Equal(0)) 63 Expect(result.LineInOutputContains("5000")).To(BeTrue()) 64 }) 65 66 It("podman run cpu-quota", func() { 67 SkipIfRootless() 68 69 cgroupsv2, err := cgroups.IsCgroup2UnifiedMode() 70 Expect(err).To(BeNil()) 71 72 var result *PodmanSessionIntegration 73 74 if cgroupsv2 { 75 result = podmanTest.Podman([]string{"run", "--rm", "--cpu-quota=5000", ALPINE, "sh", "-c", "cat /sys/fs/cgroup/$(sed -e 's|0::||' < /proc/self/cgroup)/cpu.max"}) 76 } else { 77 result = podmanTest.Podman([]string{"run", "--rm", "--cpu-quota=5000", ALPINE, "cat", "/sys/fs/cgroup/cpu/cpu.cfs_quota_us"}) 78 } 79 result.WaitWithDefaultTimeout() 80 Expect(result.ExitCode()).To(Equal(0)) 81 Expect(result.LineInOutputContains("5000")).To(BeTrue()) 82 }) 83 84 It("podman run cpus", func() { 85 SkipIfRootless() 86 87 cgroupsv2, err := cgroups.IsCgroup2UnifiedMode() 88 Expect(err).To(BeNil()) 89 90 if cgroupsv2 { 91 result := podmanTest.Podman([]string{"run", "--rm", "--cpu-quota=5000", ALPINE, "sh", "-c", "cat /sys/fs/cgroup/$(sed -e 's|0::||' < /proc/self/cgroup)/cpu.max"}) 92 result.WaitWithDefaultTimeout() 93 Expect(result.ExitCode()).To(Equal(0)) 94 Expect(result.OutputToString()).To(Equal("5000 100000")) 95 } else { 96 result := podmanTest.Podman([]string{"run", "--rm", "--cpus=0.5", ALPINE, "cat", "/sys/fs/cgroup/cpu/cpu.cfs_period_us"}) 97 result.WaitWithDefaultTimeout() 98 Expect(result.ExitCode()).To(Equal(0)) 99 Expect(result.OutputToString()).To(Equal("100000")) 100 101 result = podmanTest.Podman([]string{"run", "--rm", "--cpus=0.5", ALPINE, "cat", "/sys/fs/cgroup/cpu/cpu.cfs_quota_us"}) 102 result.WaitWithDefaultTimeout() 103 Expect(result.ExitCode()).To(Equal(0)) 104 Expect(result.OutputToString()).To(Equal("50000")) 105 } 106 }) 107 108 It("podman run cpu-shares", func() { 109 SkipIfRootless() 110 111 cgroupsv2, err := cgroups.IsCgroup2UnifiedMode() 112 Expect(err).To(BeNil()) 113 114 if cgroupsv2 { 115 // [2-262144] is mapped to [1-10000] 116 result := podmanTest.Podman([]string{"run", "--rm", "--cpu-shares=262144", ALPINE, "sh", "-c", "cat /sys/fs/cgroup/$(sed -e 's|0::||' < /proc/self/cgroup)/cpu.weight"}) 117 result.WaitWithDefaultTimeout() 118 Expect(result.ExitCode()).To(Equal(0)) 119 Expect(result.OutputToString()).To(Equal("10000")) 120 } else { 121 result := podmanTest.Podman([]string{"run", "--rm", "--cpu-shares=2", ALPINE, "cat", "/sys/fs/cgroup/cpu/cpu.shares"}) 122 result.WaitWithDefaultTimeout() 123 Expect(result.ExitCode()).To(Equal(0)) 124 Expect(result.OutputToString()).To(Equal("2")) 125 } 126 }) 127 128 It("podman run cpuset-cpus", func() { 129 SkipIfRootless() 130 131 cgroupsv2, err := cgroups.IsCgroup2UnifiedMode() 132 Expect(err).To(BeNil()) 133 134 var result *PodmanSessionIntegration 135 136 if cgroupsv2 { 137 result = podmanTest.Podman([]string{"run", "--rm", "--cpuset-cpus=0", ALPINE, "sh", "-c", "cat /sys/fs/cgroup/$(sed -e 's|0::||' < /proc/self/cgroup)/cpuset.cpus.effective"}) 138 } else { 139 result = podmanTest.Podman([]string{"run", "--rm", "--cpuset-cpus=0", ALPINE, "cat", "/sys/fs/cgroup/cpuset/cpuset.cpus"}) 140 } 141 result.WaitWithDefaultTimeout() 142 Expect(result.ExitCode()).To(Equal(0)) 143 Expect(result.OutputToString()).To(Equal("0")) 144 }) 145 146 It("podman run cpuset-mems", func() { 147 SkipIfRootless() 148 149 cgroupsv2, err := cgroups.IsCgroup2UnifiedMode() 150 Expect(err).To(BeNil()) 151 152 var result *PodmanSessionIntegration 153 154 if cgroupsv2 { 155 result = podmanTest.Podman([]string{"run", "--rm", "--cpuset-mems=0", ALPINE, "sh", "-c", "cat /sys/fs/cgroup/$(sed -e 's|0::||' < /proc/self/cgroup)/cpuset.mems.effective"}) 156 } else { 157 result = podmanTest.Podman([]string{"run", "--rm", "--cpuset-mems=0", ALPINE, "cat", "/sys/fs/cgroup/cpuset/cpuset.mems"}) 158 } 159 result.WaitWithDefaultTimeout() 160 Expect(result.ExitCode()).To(Equal(0)) 161 Expect(result.OutputToString()).To(Equal("0")) 162 }) 163 164 It("podman run cpus and cpu-period", func() { 165 result := podmanTest.Podman([]string{"run", "--rm", "--cpu-period=5000", "--cpus=0.5", ALPINE, "ls"}) 166 result.WaitWithDefaultTimeout() 167 Expect(result).To(ExitWithError()) 168 }) 169 170 It("podman run cpus and cpu-quota", func() { 171 result := podmanTest.Podman([]string{"run", "--rm", "--cpu-quota=5000", "--cpus=0.5", ALPINE, "ls"}) 172 result.WaitWithDefaultTimeout() 173 Expect(result).To(ExitWithError()) 174 }) 175 })