summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com>2021-11-13 13:12:48 +0100
committerGitHub <noreply@github.com>2021-11-13 13:12:48 +0100
commitcca6df428cb9ce187ae1341740ac1137c7a67a75 (patch)
tree7372a67e90ea951c0ad2f64bc9c3a676f4b54fe1
parent8f3fb743ee57964594b36fdffb7b8fc5e3ca3371 (diff)
parent9226ccb59f5967f5c784280b993711530615dcd7 (diff)
downloadpodman-cca6df428cb9ce187ae1341740ac1137c7a67a75.tar.gz
podman-cca6df428cb9ce187ae1341740ac1137c7a67a75.tar.bz2
podman-cca6df428cb9ce187ae1341740ac1137c7a67a75.zip
Merge pull request #12272 from hshiina/memory-swappiness
Enable 'podman run --memory-swappiness=0'
-rw-r--r--cmd/podman/containers/create.go4
-rw-r--r--cmd/podman/pods/create.go3
-rw-r--r--pkg/api/handlers/libpod/pods.go6
-rw-r--r--pkg/domain/entities/pods.go9
-rw-r--r--pkg/domain/infra/abi/play.go2
-rw-r--r--pkg/specgenutil/specgen.go2
-rw-r--r--test/e2e/run_memory_test.go19
7 files changed, 31 insertions, 14 deletions
diff --git a/cmd/podman/containers/create.go b/cmd/podman/containers/create.go
index d35c1a192..9b53a730f 100644
--- a/cmd/podman/containers/create.go
+++ b/cmd/podman/containers/create.go
@@ -376,7 +376,9 @@ func createPodIfNecessary(s *specgen.SpecGenerator, netOpts *entities.NetOptions
return nil, err
}
- infraOpts := entities.ContainerCreateOptions{ImageVolume: "bind", Net: netOpts, Quiet: true}
+ infraOpts := entities.NewInfraContainerCreateOptions()
+ infraOpts.Net = netOpts
+ infraOpts.Quiet = true
imageName := config.DefaultInfraImage
podGen.InfraImage = imageName
podGen.InfraContainerSpec = specgen.NewSpecGenerator(imageName, false)
diff --git a/cmd/podman/pods/create.go b/cmd/podman/pods/create.go
index 0d759a586..7399dd029 100644
--- a/cmd/podman/pods/create.go
+++ b/cmd/podman/pods/create.go
@@ -46,7 +46,7 @@ var (
var (
createOptions entities.PodCreateOptions
- infraOptions entities.ContainerCreateOptions
+ infraOptions = entities.NewInfraContainerCreateOptions()
infraImage string
labels, labelFile []string
podIDFile string
@@ -61,7 +61,6 @@ func init() {
})
flags := createCommand.Flags()
flags.SetInterspersed(false)
- infraOptions.IsInfra = true
common.DefineCreateFlags(createCommand, &infraOptions, true)
common.DefineNetFlags(createCommand)
diff --git a/pkg/api/handlers/libpod/pods.go b/pkg/api/handlers/libpod/pods.go
index 2ba292579..3d18406a5 100644
--- a/pkg/api/handlers/libpod/pods.go
+++ b/pkg/api/handlers/libpod/pods.go
@@ -39,8 +39,10 @@ func PodCreate(w http.ResponseWriter, r *http.Request) {
return
}
if !psg.NoInfra {
- infraOptions := &entities.ContainerCreateOptions{ImageVolume: "bind", IsInfra: true, Net: &entities.NetOptions{}, Devices: psg.Devices} // options for pulling the image and FillOutSpec
- err = specgenutil.FillOutSpecGen(psg.InfraContainerSpec, infraOptions, []string{}) // necessary for default values in many cases (userns, idmappings)
+ infraOptions := entities.NewInfraContainerCreateOptions() // options for pulling the image and FillOutSpec
+ infraOptions.Net = &entities.NetOptions{}
+ infraOptions.Devices = psg.Devices
+ err = specgenutil.FillOutSpecGen(psg.InfraContainerSpec, &infraOptions, []string{}) // necessary for default values in many cases (userns, idmappings)
if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error filling out specgen"))
return
diff --git a/pkg/domain/entities/pods.go b/pkg/domain/entities/pods.go
index 1df18be58..70d2be1e6 100644
--- a/pkg/domain/entities/pods.go
+++ b/pkg/domain/entities/pods.go
@@ -266,6 +266,15 @@ type ContainerCreateOptions struct {
CgroupConf []string
}
+func NewInfraContainerCreateOptions() ContainerCreateOptions {
+ options := ContainerCreateOptions{
+ IsInfra: true,
+ ImageVolume: "bind",
+ MemorySwappiness: -1,
+ }
+ return options
+}
+
type PodCreateReport struct {
Id string //nolint
}
diff --git a/pkg/domain/infra/abi/play.go b/pkg/domain/infra/abi/play.go
index 3fdb3f286..d2bb95f7c 100644
--- a/pkg/domain/infra/abi/play.go
+++ b/pkg/domain/infra/abi/play.go
@@ -270,7 +270,7 @@ func (ic *ContainerEngine) playKubePod(ctx context.Context, podName string, podY
if podOpt.Infra {
infraImage := util.DefaultContainerConfig().Engine.InfraImage
- infraOptions := entities.ContainerCreateOptions{ImageVolume: "bind"}
+ infraOptions := entities.NewInfraContainerCreateOptions()
podSpec.PodSpecGen.InfraImage = infraImage
podSpec.PodSpecGen.NoInfra = false
podSpec.PodSpecGen.InfraContainerSpec = specgen.NewSpecGenerator(infraImage, false)
diff --git a/pkg/specgenutil/specgen.go b/pkg/specgenutil/specgen.go
index 4e8f954fb..04d3add32 100644
--- a/pkg/specgenutil/specgen.go
+++ b/pkg/specgenutil/specgen.go
@@ -172,7 +172,7 @@ func getMemoryLimits(s *specgen.SpecGenerator, c *entities.ContainerCreateOption
memory.Kernel = &mk
hasLimits = true
}
- if c.MemorySwappiness > 0 {
+ if c.MemorySwappiness >= 0 {
swappiness := uint64(c.MemorySwappiness)
memory.Swappiness = &swappiness
hasLimits = true
diff --git a/test/e2e/run_memory_test.go b/test/e2e/run_memory_test.go
index e2f2937ba..04952bb03 100644
--- a/test/e2e/run_memory_test.go
+++ b/test/e2e/run_memory_test.go
@@ -1,6 +1,7 @@
package integration
import (
+ "fmt"
"os"
"strconv"
@@ -67,13 +68,17 @@ var _ = Describe("Podman run memory", func() {
Expect(session.OutputToString()).To(Equal("41943040"))
})
- It("podman run memory-swappiness test", func() {
- SkipIfCgroupV2("memory-swappiness not supported on cgroupV2")
- session := podmanTest.Podman([]string{"run", "--memory-swappiness=15", ALPINE, "cat", "/sys/fs/cgroup/memory/memory.swappiness"})
- session.WaitWithDefaultTimeout()
- Expect(session).Should(Exit(0))
- Expect(session.OutputToString()).To(Equal("15"))
- })
+ for _, limit := range []string{"0", "15", "100"} {
+ limit := limit // Keep this value in a proper scope
+ testName := fmt.Sprintf("podman run memory-swappiness test(%s)", limit)
+ It(testName, func() {
+ SkipIfCgroupV2("memory-swappiness not supported on cgroupV2")
+ session := podmanTest.Podman([]string{"run", fmt.Sprintf("--memory-swappiness=%s", limit), ALPINE, "cat", "/sys/fs/cgroup/memory/memory.swappiness"})
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+ Expect(session.OutputToString()).To(Equal(limit))
+ })
+ }
It("podman run kernel-memory test", func() {
if podmanTest.Host.Distribution == "ubuntu" {