mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-04-29 12:14:48 +00:00
qemu: fix memory prealloc handling
Memory preallocation is just a property of different memory backends. We should treat it similar to memory sharing property. Also rename FileBackedMemShared to MemShared as it is just another memory backend property that works with different memory backends not just file backed memory. Signed-off-by: Peng Tao <bergwolf@hyper.sh>
This commit is contained in:
parent
30bfcaaa6d
commit
234e0edfd7
70
qemu/qemu.go
70
qemu/qemu.go
@ -1456,8 +1456,8 @@ type Knobs struct {
|
||||
// be set.
|
||||
FileBackedMem bool
|
||||
|
||||
// FileBackedMemShared will set the FileBackedMem device as shared.
|
||||
FileBackedMemShared bool
|
||||
// MemShared will set the memory device as shared.
|
||||
MemShared bool
|
||||
|
||||
// Mlock will control locking of memory
|
||||
// Only active when Realtime is set to true
|
||||
@ -1758,46 +1758,34 @@ func (config *Config) appendKernel() {
|
||||
}
|
||||
|
||||
func (config *Config) appendMemoryKnobs() {
|
||||
if config.Knobs.HugePages {
|
||||
if config.Memory.Size != "" {
|
||||
dimmName := "dimm1"
|
||||
objMemParam := "memory-backend-file,id=" + dimmName + ",size=" + config.Memory.Size + ",mem-path=/dev/hugepages,share=on,prealloc=on"
|
||||
numaMemParam := "node,memdev=" + dimmName
|
||||
|
||||
config.qemuParams = append(config.qemuParams, "-object")
|
||||
config.qemuParams = append(config.qemuParams, objMemParam)
|
||||
|
||||
config.qemuParams = append(config.qemuParams, "-numa")
|
||||
config.qemuParams = append(config.qemuParams, numaMemParam)
|
||||
}
|
||||
} else if config.Knobs.MemPrealloc {
|
||||
if config.Memory.Size != "" {
|
||||
dimmName := "dimm1"
|
||||
objMemParam := "memory-backend-ram,id=" + dimmName + ",size=" + config.Memory.Size + ",prealloc=on"
|
||||
numaMemParam := "node,memdev=" + dimmName
|
||||
|
||||
config.qemuParams = append(config.qemuParams, "-object")
|
||||
config.qemuParams = append(config.qemuParams, objMemParam)
|
||||
|
||||
config.qemuParams = append(config.qemuParams, "-numa")
|
||||
config.qemuParams = append(config.qemuParams, numaMemParam)
|
||||
}
|
||||
} else if config.Knobs.FileBackedMem {
|
||||
if config.Memory.Size != "" && config.Memory.Path != "" {
|
||||
dimmName := "dimm1"
|
||||
objMemParam := "memory-backend-file,id=" + dimmName + ",size=" + config.Memory.Size + ",mem-path=" + config.Memory.Path
|
||||
if config.Knobs.FileBackedMemShared {
|
||||
objMemParam += ",share=on"
|
||||
}
|
||||
numaMemParam := "node,memdev=" + dimmName
|
||||
|
||||
config.qemuParams = append(config.qemuParams, "-object")
|
||||
config.qemuParams = append(config.qemuParams, objMemParam)
|
||||
|
||||
config.qemuParams = append(config.qemuParams, "-numa")
|
||||
config.qemuParams = append(config.qemuParams, numaMemParam)
|
||||
}
|
||||
if config.Memory.Size == "" {
|
||||
return
|
||||
}
|
||||
|
||||
var objMemParam, numaMemParam string
|
||||
dimmName := "dimm1"
|
||||
if config.Knobs.HugePages {
|
||||
objMemParam = "memory-backend-file,id=" + dimmName + ",size=" + config.Memory.Size + ",mem-path=/dev/hugepages"
|
||||
numaMemParam = "node,memdev=" + dimmName
|
||||
} else if config.Knobs.FileBackedMem && config.Memory.Path != "" {
|
||||
objMemParam = "memory-backend-file,id=" + dimmName + ",size=" + config.Memory.Size + ",mem-path=" + config.Memory.Path
|
||||
numaMemParam = "node,memdev=" + dimmName
|
||||
} else {
|
||||
objMemParam = "memory-backend-ram,id=" + dimmName + ",size=" + config.Memory.Size
|
||||
numaMemParam = "node,memdev=" + dimmName
|
||||
}
|
||||
|
||||
if config.Knobs.MemShared {
|
||||
objMemParam += ",share=on"
|
||||
}
|
||||
if config.Knobs.MemPrealloc {
|
||||
objMemParam += ",prealloc=on"
|
||||
}
|
||||
config.qemuParams = append(config.qemuParams, "-object")
|
||||
config.qemuParams = append(config.qemuParams, objMemParam)
|
||||
|
||||
config.qemuParams = append(config.qemuParams, "-numa")
|
||||
config.qemuParams = append(config.qemuParams, numaMemParam)
|
||||
}
|
||||
|
||||
func (config *Config) appendKnobs() {
|
||||
|
@ -488,16 +488,16 @@ func TestAppendEmptyDevice(t *testing.T) {
|
||||
func TestAppendKnobsAllTrue(t *testing.T) {
|
||||
var knobsString = "-no-user-config -nodefaults -nographic -daemonize -realtime mlock=on -S"
|
||||
knobs := Knobs{
|
||||
NoUserConfig: true,
|
||||
NoDefaults: true,
|
||||
NoGraphic: true,
|
||||
Daemonize: true,
|
||||
MemPrealloc: true,
|
||||
FileBackedMem: true,
|
||||
FileBackedMemShared: true,
|
||||
Realtime: true,
|
||||
Mlock: true,
|
||||
Stopped: true,
|
||||
NoUserConfig: true,
|
||||
NoDefaults: true,
|
||||
NoGraphic: true,
|
||||
Daemonize: true,
|
||||
MemPrealloc: true,
|
||||
FileBackedMem: true,
|
||||
MemShared: true,
|
||||
Realtime: true,
|
||||
Mlock: true,
|
||||
Stopped: true,
|
||||
}
|
||||
|
||||
testAppend(knobs, knobsString, t)
|
||||
@ -506,15 +506,15 @@ func TestAppendKnobsAllTrue(t *testing.T) {
|
||||
func TestAppendKnobsAllFalse(t *testing.T) {
|
||||
var knobsString = "-realtime mlock=off"
|
||||
knobs := Knobs{
|
||||
NoUserConfig: false,
|
||||
NoDefaults: false,
|
||||
NoGraphic: false,
|
||||
MemPrealloc: false,
|
||||
FileBackedMem: false,
|
||||
FileBackedMemShared: false,
|
||||
Realtime: false,
|
||||
Mlock: false,
|
||||
Stopped: false,
|
||||
NoUserConfig: false,
|
||||
NoDefaults: false,
|
||||
NoGraphic: false,
|
||||
MemPrealloc: false,
|
||||
FileBackedMem: false,
|
||||
MemShared: false,
|
||||
Realtime: false,
|
||||
Mlock: false,
|
||||
Stopped: false,
|
||||
}
|
||||
|
||||
testAppend(knobs, knobsString, t)
|
||||
@ -533,10 +533,10 @@ func TestAppendMemoryHugePages(t *testing.T) {
|
||||
testConfigAppend(conf, conf.Memory, memString, t)
|
||||
|
||||
knobs := Knobs{
|
||||
HugePages: true,
|
||||
MemPrealloc: true,
|
||||
FileBackedMem: true,
|
||||
FileBackedMemShared: true,
|
||||
HugePages: true,
|
||||
MemPrealloc: true,
|
||||
FileBackedMem: true,
|
||||
MemShared: true,
|
||||
}
|
||||
knobsString := "-object memory-backend-file,id=dimm1,size=1G,mem-path=/dev/hugepages,share=on,prealloc=on -numa node,memdev=dimm1"
|
||||
mlockFalseString := "-realtime mlock=off"
|
||||
@ -557,17 +557,16 @@ func TestAppendMemoryMemPrealloc(t *testing.T) {
|
||||
testConfigAppend(conf, conf.Memory, memString, t)
|
||||
|
||||
knobs := Knobs{
|
||||
MemPrealloc: true,
|
||||
FileBackedMem: true,
|
||||
FileBackedMemShared: true,
|
||||
MemPrealloc: true,
|
||||
MemShared: true,
|
||||
}
|
||||
knobsString := "-object memory-backend-ram,id=dimm1,size=1G,prealloc=on -numa node,memdev=dimm1"
|
||||
knobsString := "-object memory-backend-ram,id=dimm1,size=1G,share=on,prealloc=on -numa node,memdev=dimm1"
|
||||
mlockFalseString := "-realtime mlock=off"
|
||||
|
||||
testConfigAppend(conf, knobs, memString+" "+knobsString+" "+mlockFalseString, t)
|
||||
}
|
||||
|
||||
func TestAppendMemoryFileBackedMemShared(t *testing.T) {
|
||||
func TestAppendMemoryMemShared(t *testing.T) {
|
||||
conf := &Config{
|
||||
Memory: Memory{
|
||||
Size: "1G",
|
||||
@ -580,8 +579,8 @@ func TestAppendMemoryFileBackedMemShared(t *testing.T) {
|
||||
testConfigAppend(conf, conf.Memory, memString, t)
|
||||
|
||||
knobs := Knobs{
|
||||
FileBackedMem: true,
|
||||
FileBackedMemShared: true,
|
||||
FileBackedMem: true,
|
||||
MemShared: true,
|
||||
}
|
||||
knobsString := "-object memory-backend-file,id=dimm1,size=1G,mem-path=foobar,share=on -numa node,memdev=dimm1"
|
||||
mlockFalseString := "-realtime mlock=off"
|
||||
@ -602,8 +601,8 @@ func TestAppendMemoryFileBackedMem(t *testing.T) {
|
||||
testConfigAppend(conf, conf.Memory, memString, t)
|
||||
|
||||
knobs := Knobs{
|
||||
FileBackedMem: true,
|
||||
FileBackedMemShared: false,
|
||||
FileBackedMem: true,
|
||||
MemShared: false,
|
||||
}
|
||||
knobsString := "-object memory-backend-file,id=dimm1,size=1G,mem-path=foobar -numa node,memdev=dimm1"
|
||||
mlockFalseString := "-realtime mlock=off"
|
||||
@ -611,6 +610,29 @@ func TestAppendMemoryFileBackedMem(t *testing.T) {
|
||||
testConfigAppend(conf, knobs, memString+" "+knobsString+" "+mlockFalseString, t)
|
||||
}
|
||||
|
||||
func TestAppendMemoryFileBackedMemPrealloc(t *testing.T) {
|
||||
conf := &Config{
|
||||
Memory: Memory{
|
||||
Size: "1G",
|
||||
Slots: 8,
|
||||
MaxMem: "3G",
|
||||
Path: "foobar",
|
||||
},
|
||||
}
|
||||
memString := "-m 1G,slots=8,maxmem=3G"
|
||||
testConfigAppend(conf, conf.Memory, memString, t)
|
||||
|
||||
knobs := Knobs{
|
||||
FileBackedMem: true,
|
||||
MemShared: true,
|
||||
MemPrealloc: true,
|
||||
}
|
||||
knobsString := "-object memory-backend-file,id=dimm1,size=1G,mem-path=foobar,share=on,prealloc=on -numa node,memdev=dimm1"
|
||||
mlockFalseString := "-realtime mlock=off"
|
||||
|
||||
testConfigAppend(conf, knobs, memString+" "+knobsString+" "+mlockFalseString, t)
|
||||
}
|
||||
|
||||
var kernelString = "-kernel /opt/vmlinux.container -initrd /opt/initrd.container -append root=/dev/pmem0p1 rootflags=dax,data=ordered,errors=remount-ro rw rootfstype=ext4 tsc=reliable"
|
||||
|
||||
func TestAppendKernel(t *testing.T) {
|
||||
@ -987,7 +1009,7 @@ func TestBadMemoryKnobs(t *testing.T) {
|
||||
|
||||
c = &Config{
|
||||
Knobs: Knobs{
|
||||
HugePages: true,
|
||||
MemShared: true,
|
||||
},
|
||||
}
|
||||
c.appendMemoryKnobs()
|
||||
@ -1004,19 +1026,6 @@ func TestBadMemoryKnobs(t *testing.T) {
|
||||
if len(c.qemuParams) != 0 {
|
||||
t.Errorf("Expected empty qemuParams, found %s", c.qemuParams)
|
||||
}
|
||||
|
||||
c = &Config{
|
||||
Knobs: Knobs{
|
||||
FileBackedMem: true,
|
||||
},
|
||||
Memory: Memory{
|
||||
Size: "1024",
|
||||
},
|
||||
}
|
||||
c.appendMemoryKnobs()
|
||||
if len(c.qemuParams) != 0 {
|
||||
t.Errorf("Expected empty qemuParams, found %s", c.qemuParams)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBadKnobs(t *testing.T) {
|
||||
|
Loading…
Reference in New Issue
Block a user