mirror of https://github.com/containers/podman.git
Enable 'podman run --memory-swappiness=0'
'--memory-swappiness=0' used to work. This patch fixes the regression issue, which was caused by the change of infra container creation process. Signed-off-by: Hironori Shiina <shiina.hironori@jp.fujitsu.com>
This commit is contained in:
parent
0aecacb865
commit
9226ccb59f
|
@ -376,7 +376,9 @@ func createPodIfNecessary(s *specgen.SpecGenerator, netOpts *entities.NetOptions
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
infraOpts := entities.ContainerCreateOptions{ImageVolume: "bind", Net: netOpts, Quiet: true}
|
infraOpts := entities.NewInfraContainerCreateOptions()
|
||||||
|
infraOpts.Net = netOpts
|
||||||
|
infraOpts.Quiet = true
|
||||||
imageName := config.DefaultInfraImage
|
imageName := config.DefaultInfraImage
|
||||||
podGen.InfraImage = imageName
|
podGen.InfraImage = imageName
|
||||||
podGen.InfraContainerSpec = specgen.NewSpecGenerator(imageName, false)
|
podGen.InfraContainerSpec = specgen.NewSpecGenerator(imageName, false)
|
||||||
|
|
|
@ -46,7 +46,7 @@ var (
|
||||||
|
|
||||||
var (
|
var (
|
||||||
createOptions entities.PodCreateOptions
|
createOptions entities.PodCreateOptions
|
||||||
infraOptions entities.ContainerCreateOptions
|
infraOptions = entities.NewInfraContainerCreateOptions()
|
||||||
infraImage string
|
infraImage string
|
||||||
labels, labelFile []string
|
labels, labelFile []string
|
||||||
podIDFile string
|
podIDFile string
|
||||||
|
@ -61,7 +61,6 @@ func init() {
|
||||||
})
|
})
|
||||||
flags := createCommand.Flags()
|
flags := createCommand.Flags()
|
||||||
flags.SetInterspersed(false)
|
flags.SetInterspersed(false)
|
||||||
infraOptions.IsInfra = true
|
|
||||||
common.DefineCreateFlags(createCommand, &infraOptions, true)
|
common.DefineCreateFlags(createCommand, &infraOptions, true)
|
||||||
common.DefineNetFlags(createCommand)
|
common.DefineNetFlags(createCommand)
|
||||||
|
|
||||||
|
|
|
@ -39,8 +39,10 @@ func PodCreate(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !psg.NoInfra {
|
if !psg.NoInfra {
|
||||||
infraOptions := &entities.ContainerCreateOptions{ImageVolume: "bind", IsInfra: true, Net: &entities.NetOptions{}, Devices: psg.Devices} // options for pulling the image and FillOutSpec
|
infraOptions := entities.NewInfraContainerCreateOptions() // options for pulling the image and FillOutSpec
|
||||||
err = specgenutil.FillOutSpecGen(psg.InfraContainerSpec, infraOptions, []string{}) // necessary for default values in many cases (userns, idmappings)
|
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 {
|
if err != nil {
|
||||||
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error filling out specgen"))
|
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error filling out specgen"))
|
||||||
return
|
return
|
||||||
|
|
|
@ -266,6 +266,15 @@ type ContainerCreateOptions struct {
|
||||||
CgroupConf []string
|
CgroupConf []string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewInfraContainerCreateOptions() ContainerCreateOptions {
|
||||||
|
options := ContainerCreateOptions{
|
||||||
|
IsInfra: true,
|
||||||
|
ImageVolume: "bind",
|
||||||
|
MemorySwappiness: -1,
|
||||||
|
}
|
||||||
|
return options
|
||||||
|
}
|
||||||
|
|
||||||
type PodCreateReport struct {
|
type PodCreateReport struct {
|
||||||
Id string //nolint
|
Id string //nolint
|
||||||
}
|
}
|
||||||
|
|
|
@ -270,7 +270,7 @@ func (ic *ContainerEngine) playKubePod(ctx context.Context, podName string, podY
|
||||||
|
|
||||||
if podOpt.Infra {
|
if podOpt.Infra {
|
||||||
infraImage := util.DefaultContainerConfig().Engine.InfraImage
|
infraImage := util.DefaultContainerConfig().Engine.InfraImage
|
||||||
infraOptions := entities.ContainerCreateOptions{ImageVolume: "bind"}
|
infraOptions := entities.NewInfraContainerCreateOptions()
|
||||||
podSpec.PodSpecGen.InfraImage = infraImage
|
podSpec.PodSpecGen.InfraImage = infraImage
|
||||||
podSpec.PodSpecGen.NoInfra = false
|
podSpec.PodSpecGen.NoInfra = false
|
||||||
podSpec.PodSpecGen.InfraContainerSpec = specgen.NewSpecGenerator(infraImage, false)
|
podSpec.PodSpecGen.InfraContainerSpec = specgen.NewSpecGenerator(infraImage, false)
|
||||||
|
|
|
@ -172,7 +172,7 @@ func getMemoryLimits(s *specgen.SpecGenerator, c *entities.ContainerCreateOption
|
||||||
memory.Kernel = &mk
|
memory.Kernel = &mk
|
||||||
hasLimits = true
|
hasLimits = true
|
||||||
}
|
}
|
||||||
if c.MemorySwappiness > 0 {
|
if c.MemorySwappiness >= 0 {
|
||||||
swappiness := uint64(c.MemorySwappiness)
|
swappiness := uint64(c.MemorySwappiness)
|
||||||
memory.Swappiness = &swappiness
|
memory.Swappiness = &swappiness
|
||||||
hasLimits = true
|
hasLimits = true
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package integration
|
package integration
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
|
@ -67,13 +68,17 @@ var _ = Describe("Podman run memory", func() {
|
||||||
Expect(session.OutputToString()).To(Equal("41943040"))
|
Expect(session.OutputToString()).To(Equal("41943040"))
|
||||||
})
|
})
|
||||||
|
|
||||||
It("podman run memory-swappiness test", func() {
|
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")
|
SkipIfCgroupV2("memory-swappiness not supported on cgroupV2")
|
||||||
session := podmanTest.Podman([]string{"run", "--memory-swappiness=15", ALPINE, "cat", "/sys/fs/cgroup/memory/memory.swappiness"})
|
session := podmanTest.Podman([]string{"run", fmt.Sprintf("--memory-swappiness=%s", limit), ALPINE, "cat", "/sys/fs/cgroup/memory/memory.swappiness"})
|
||||||
session.WaitWithDefaultTimeout()
|
session.WaitWithDefaultTimeout()
|
||||||
Expect(session).Should(Exit(0))
|
Expect(session).Should(Exit(0))
|
||||||
Expect(session.OutputToString()).To(Equal("15"))
|
Expect(session.OutputToString()).To(Equal(limit))
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
|
||||||
It("podman run kernel-memory test", func() {
|
It("podman run kernel-memory test", func() {
|
||||||
if podmanTest.Host.Distribution == "ubuntu" {
|
if podmanTest.Host.Distribution == "ubuntu" {
|
||||||
|
|
Loading…
Reference in New Issue