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  })