github.com/AbhinandanKurakure/podman/v3@v3.4.10/test/e2e/run_cpu_test.go (about) 1 package integration 2 3 import ( 4 "io/ioutil" 5 "os" 6 7 . "github.com/containers/podman/v3/test/utils" 8 . "github.com/onsi/ginkgo" 9 . "github.com/onsi/gomega" 10 . "github.com/onsi/gomega/gexec" 11 ) 12 13 var _ = Describe("Podman run cpu", func() { 14 var ( 15 tempdir string 16 err error 17 podmanTest *PodmanTestIntegration 18 ) 19 20 BeforeEach(func() { 21 SkipIfRootlessCgroupsV1("Setting CPU not supported on cgroupv1 for rootless users") 22 23 tempdir, err = CreateTempDirInTempDir() 24 if err != nil { 25 os.Exit(1) 26 } 27 28 if CGROUPSV2 { 29 if err := ioutil.WriteFile("/sys/fs/cgroup/cgroup.subtree_control", []byte("+cpuset"), 0644); err != nil { 30 Skip("cpuset controller not available on the current kernel") 31 } 32 } 33 34 podmanTest = PodmanTestCreate(tempdir) 35 podmanTest.Setup() 36 podmanTest.SeedImages() 37 }) 38 39 AfterEach(func() { 40 podmanTest.Cleanup() 41 f := CurrentGinkgoTestDescription() 42 processTestResult(f) 43 44 }) 45 46 It("podman run cpu-period", func() { 47 var result *PodmanSessionIntegration 48 if CGROUPSV2 { 49 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"}) 50 } else { 51 result = podmanTest.Podman([]string{"run", "--rm", "--cpu-period=5000", ALPINE, "cat", "/sys/fs/cgroup/cpu/cpu.cfs_period_us"}) 52 } 53 result.WaitWithDefaultTimeout() 54 Expect(result).Should(Exit(0)) 55 Expect(result.LineInOutputContains("5000")).To(BeTrue()) 56 }) 57 58 It("podman run cpu-quota", func() { 59 var result *PodmanSessionIntegration 60 61 if CGROUPSV2 { 62 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"}) 63 } else { 64 result = podmanTest.Podman([]string{"run", "--rm", "--cpu-quota=5000", ALPINE, "cat", "/sys/fs/cgroup/cpu/cpu.cfs_quota_us"}) 65 } 66 result.WaitWithDefaultTimeout() 67 Expect(result).Should(Exit(0)) 68 Expect(result.LineInOutputContains("5000")).To(BeTrue()) 69 }) 70 71 It("podman run cpus", func() { 72 if CGROUPSV2 { 73 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"}) 74 result.WaitWithDefaultTimeout() 75 Expect(result).Should(Exit(0)) 76 Expect(result.OutputToString()).To(Equal("5000 100000")) 77 } else { 78 result := podmanTest.Podman([]string{"run", "--rm", "--cpus=0.5", ALPINE, "cat", "/sys/fs/cgroup/cpu/cpu.cfs_period_us"}) 79 result.WaitWithDefaultTimeout() 80 Expect(result).Should(Exit(0)) 81 Expect(result.OutputToString()).To(Equal("100000")) 82 83 result = podmanTest.Podman([]string{"run", "--rm", "--cpus=0.5", ALPINE, "cat", "/sys/fs/cgroup/cpu/cpu.cfs_quota_us"}) 84 result.WaitWithDefaultTimeout() 85 Expect(result).Should(Exit(0)) 86 Expect(result.OutputToString()).To(Equal("50000")) 87 } 88 }) 89 90 It("podman run cpu-shares", func() { 91 if CGROUPSV2 { 92 // [2-262144] is mapped to [1-10000] 93 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"}) 94 result.WaitWithDefaultTimeout() 95 Expect(result).Should(Exit(0)) 96 Expect(result.OutputToString()).To(Equal("10000")) 97 } else { 98 result := podmanTest.Podman([]string{"run", "--rm", "--cpu-shares=2", ALPINE, "cat", "/sys/fs/cgroup/cpu/cpu.shares"}) 99 result.WaitWithDefaultTimeout() 100 Expect(result).Should(Exit(0)) 101 Expect(result.OutputToString()).To(Equal("2")) 102 } 103 }) 104 105 It("podman run cpuset-cpus", func() { 106 var result *PodmanSessionIntegration 107 108 if CGROUPSV2 { 109 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"}) 110 } else { 111 result = podmanTest.Podman([]string{"run", "--rm", "--cpuset-cpus=0", ALPINE, "cat", "/sys/fs/cgroup/cpuset/cpuset.cpus"}) 112 } 113 result.WaitWithDefaultTimeout() 114 Expect(result).Should(Exit(0)) 115 Expect(result.OutputToString()).To(Equal("0")) 116 }) 117 118 It("podman run cpuset-mems", func() { 119 var result *PodmanSessionIntegration 120 121 if CGROUPSV2 { 122 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"}) 123 } else { 124 result = podmanTest.Podman([]string{"run", "--rm", "--cpuset-mems=0", ALPINE, "cat", "/sys/fs/cgroup/cpuset/cpuset.mems"}) 125 } 126 result.WaitWithDefaultTimeout() 127 Expect(result).Should(Exit(0)) 128 Expect(result.OutputToString()).To(Equal("0")) 129 }) 130 131 It("podman run cpus and cpu-period", func() { 132 result := podmanTest.Podman([]string{"run", "--rm", "--cpu-period=5000", "--cpus=0.5", ALPINE, "ls"}) 133 result.WaitWithDefaultTimeout() 134 Expect(result).To(ExitWithError()) 135 }) 136 137 It("podman run cpus and cpu-quota", func() { 138 result := podmanTest.Podman([]string{"run", "--rm", "--cpu-quota=5000", "--cpus=0.5", ALPINE, "ls"}) 139 result.WaitWithDefaultTimeout() 140 Expect(result).To(ExitWithError()) 141 }) 142 })