mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-06-26 15:32:30 +00:00
Merge pull request #2017 from devimc/2021-06-11/fixPmemCSI
memory_offset must be larger than 32 bit
This commit is contained in:
commit
85bb5cffe1
@ -79,7 +79,7 @@ There are several kinds of Kata configurations and they are listed below.
|
|||||||
| `io.katacontainers.config.hypervisor.kernel` | string | the kernel used to boot the container VM |
|
| `io.katacontainers.config.hypervisor.kernel` | string | the kernel used to boot the container VM |
|
||||||
| `io.katacontainers.config.hypervisor.machine_accelerators` | string | machine specific accelerators for the hypervisor |
|
| `io.katacontainers.config.hypervisor.machine_accelerators` | string | machine specific accelerators for the hypervisor |
|
||||||
| `io.katacontainers.config.hypervisor.machine_type` | string | the type of machine being emulated by the hypervisor |
|
| `io.katacontainers.config.hypervisor.machine_type` | string | the type of machine being emulated by the hypervisor |
|
||||||
| `io.katacontainers.config.hypervisor.memory_offset` | uint32| the memory space used for `nvdimm` device by the hypervisor |
|
| `io.katacontainers.config.hypervisor.memory_offset` | uint64| the memory space used for `nvdimm` device by the hypervisor |
|
||||||
| `io.katacontainers.config.hypervisor.memory_slots` | uint32| the memory slots assigned to the VM by the hypervisor |
|
| `io.katacontainers.config.hypervisor.memory_slots` | uint32| the memory slots assigned to the VM by the hypervisor |
|
||||||
| `io.katacontainers.config.hypervisor.msize_9p` | uint32 | the `msize` for 9p shares |
|
| `io.katacontainers.config.hypervisor.msize_9p` | uint32 | the `msize` for 9p shares |
|
||||||
| `io.katacontainers.config.hypervisor.path` | string | the hypervisor that will run the container VM |
|
| `io.katacontainers.config.hypervisor.path` | string | the hypervisor that will run the container VM |
|
||||||
|
@ -26,7 +26,7 @@ const defaultVCPUCount uint32 = 1
|
|||||||
const defaultMaxVCPUCount uint32 = 0
|
const defaultMaxVCPUCount uint32 = 0
|
||||||
const defaultMemSize uint32 = 2048 // MiB
|
const defaultMemSize uint32 = 2048 // MiB
|
||||||
const defaultMemSlots uint32 = 10
|
const defaultMemSlots uint32 = 10
|
||||||
const defaultMemOffset uint32 = 0 // MiB
|
const defaultMemOffset uint64 = 0 // MiB
|
||||||
const defaultVirtioMem bool = false
|
const defaultVirtioMem bool = false
|
||||||
const defaultBridgesCount uint32 = 1
|
const defaultBridgesCount uint32 = 1
|
||||||
const defaultInterNetworkingModel = "tcfilter"
|
const defaultInterNetworkingModel = "tcfilter"
|
||||||
|
@ -114,7 +114,7 @@ type hypervisor struct {
|
|||||||
DefaultMaxVCPUs uint32 `toml:"default_maxvcpus"`
|
DefaultMaxVCPUs uint32 `toml:"default_maxvcpus"`
|
||||||
MemorySize uint32 `toml:"default_memory"`
|
MemorySize uint32 `toml:"default_memory"`
|
||||||
MemSlots uint32 `toml:"memory_slots"`
|
MemSlots uint32 `toml:"memory_slots"`
|
||||||
MemOffset uint32 `toml:"memory_offset"`
|
MemOffset uint64 `toml:"memory_offset"`
|
||||||
DefaultBridges uint32 `toml:"default_bridges"`
|
DefaultBridges uint32 `toml:"default_bridges"`
|
||||||
Msize9p uint32 `toml:"msize_9p"`
|
Msize9p uint32 `toml:"msize_9p"`
|
||||||
PCIeRootPort uint32 `toml:"pcie_root_port"`
|
PCIeRootPort uint32 `toml:"pcie_root_port"`
|
||||||
@ -359,7 +359,7 @@ func (h hypervisor) defaultMemSlots() uint32 {
|
|||||||
return slots
|
return slots
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h hypervisor) defaultMemOffset() uint32 {
|
func (h hypervisor) defaultMemOffset() uint64 {
|
||||||
offset := h.MemOffset
|
offset := h.MemOffset
|
||||||
if offset == 0 {
|
if offset == 0 {
|
||||||
offset = defaultMemOffset
|
offset = defaultMemOffset
|
||||||
|
@ -222,6 +222,10 @@ type Param struct {
|
|||||||
|
|
||||||
// HypervisorConfig is the hypervisor configuration.
|
// HypervisorConfig is the hypervisor configuration.
|
||||||
type HypervisorConfig struct {
|
type HypervisorConfig struct {
|
||||||
|
// PCIeRootPort is used to indicate the number of PCIe Root Port devices
|
||||||
|
// The PCIe Root Port device is used to hot-plug the PCIe device
|
||||||
|
PCIeRootPort uint32
|
||||||
|
|
||||||
// NumVCPUs specifies default number of vCPUs for the VM.
|
// NumVCPUs specifies default number of vCPUs for the VM.
|
||||||
NumVCPUs uint32
|
NumVCPUs uint32
|
||||||
|
|
||||||
@ -241,9 +245,6 @@ type HypervisorConfig struct {
|
|||||||
// MemSlots specifies default memory slots the VM.
|
// MemSlots specifies default memory slots the VM.
|
||||||
MemSlots uint32
|
MemSlots uint32
|
||||||
|
|
||||||
// MemOffset specifies memory space for nvdimm device
|
|
||||||
MemOffset uint32
|
|
||||||
|
|
||||||
// VirtioFSCacheSize is the DAX cache size in MiB
|
// VirtioFSCacheSize is the DAX cache size in MiB
|
||||||
VirtioFSCacheSize uint32
|
VirtioFSCacheSize uint32
|
||||||
|
|
||||||
@ -310,9 +311,6 @@ type HypervisorConfig struct {
|
|||||||
// entropy (/dev/random, /dev/urandom or real hardware RNG device)
|
// entropy (/dev/random, /dev/urandom or real hardware RNG device)
|
||||||
EntropySource string
|
EntropySource string
|
||||||
|
|
||||||
// EntropySourceList is the list of valid entropy sources
|
|
||||||
EntropySourceList []string
|
|
||||||
|
|
||||||
// Shared file system type:
|
// Shared file system type:
|
||||||
// - virtio-9p (default)
|
// - virtio-9p (default)
|
||||||
// - virtio-fs
|
// - virtio-fs
|
||||||
@ -321,6 +319,12 @@ type HypervisorConfig struct {
|
|||||||
// VirtioFSDaemon is the virtio-fs vhost-user daemon path
|
// VirtioFSDaemon is the virtio-fs vhost-user daemon path
|
||||||
VirtioFSDaemon string
|
VirtioFSDaemon string
|
||||||
|
|
||||||
|
// File based memory backend root directory
|
||||||
|
FileBackedMemRootDir string
|
||||||
|
|
||||||
|
// EntropySourceList is the list of valid entropy sources
|
||||||
|
EntropySourceList []string
|
||||||
|
|
||||||
// VirtioFSDaemonList is the list of valid virtiofs names for annotations
|
// VirtioFSDaemonList is the list of valid virtiofs names for annotations
|
||||||
VirtioFSDaemonList []string
|
VirtioFSDaemonList []string
|
||||||
|
|
||||||
@ -330,8 +334,8 @@ type HypervisorConfig struct {
|
|||||||
// VirtioFSExtraArgs passes options to virtiofsd daemon
|
// VirtioFSExtraArgs passes options to virtiofsd daemon
|
||||||
VirtioFSExtraArgs []string
|
VirtioFSExtraArgs []string
|
||||||
|
|
||||||
// File based memory backend root directory
|
// Enable annotations by name
|
||||||
FileBackedMemRootDir string
|
EnableAnnotations []string
|
||||||
|
|
||||||
// FileBackedMemRootList is the list of valid root directories values for annotations
|
// FileBackedMemRootList is the list of valid root directories values for annotations
|
||||||
FileBackedMemRootList []string
|
FileBackedMemRootList []string
|
||||||
@ -339,6 +343,9 @@ type HypervisorConfig struct {
|
|||||||
// PFlash image paths
|
// PFlash image paths
|
||||||
PFlash []string
|
PFlash []string
|
||||||
|
|
||||||
|
// VhostUserStorePathList is the list of valid values for vhost-user paths
|
||||||
|
VhostUserStorePathList []string
|
||||||
|
|
||||||
// customAssets is a map of assets.
|
// customAssets is a map of assets.
|
||||||
// Each value in that map takes precedence over the configured assets.
|
// Each value in that map takes precedence over the configured assets.
|
||||||
// For example, if there is a value for the "kernel" key in this map,
|
// For example, if there is a value for the "kernel" key in this map,
|
||||||
@ -401,9 +408,14 @@ type HypervisorConfig struct {
|
|||||||
// root bus instead of a bridge.
|
// root bus instead of a bridge.
|
||||||
HotplugVFIOOnRootBus bool
|
HotplugVFIOOnRootBus bool
|
||||||
|
|
||||||
// PCIeRootPort is used to indicate the number of PCIe Root Port devices
|
// GuestMemoryDumpPaging is used to indicate if enable paging
|
||||||
// The PCIe Root Port device is used to hot-plug the PCIe device
|
// for QEMU dump-guest-memory command
|
||||||
PCIeRootPort uint32
|
GuestMemoryDumpPaging bool
|
||||||
|
|
||||||
|
// Enable confidential guest support.
|
||||||
|
// Enable or disable different hardware features, ranging
|
||||||
|
// from memory encryption to both memory and CPU-state encryption and integrity.
|
||||||
|
ConfidentialGuest bool
|
||||||
|
|
||||||
// BootToBeTemplate used to indicate if the VM is created to be a template VM
|
// BootToBeTemplate used to indicate if the VM is created to be a template VM
|
||||||
BootToBeTemplate bool
|
BootToBeTemplate bool
|
||||||
@ -421,8 +433,8 @@ type HypervisorConfig struct {
|
|||||||
// related folders, sockets and device nodes should be.
|
// related folders, sockets and device nodes should be.
|
||||||
VhostUserStorePath string
|
VhostUserStorePath string
|
||||||
|
|
||||||
// VhostUserStorePathList is the list of valid values for vhost-user paths
|
// GuestCoredumpPath is the path in host for saving guest memory dump
|
||||||
VhostUserStorePathList []string
|
GuestMemoryDumpPath string
|
||||||
|
|
||||||
// GuestHookPath is the path within the VM that will be used for 'drop-in' hooks
|
// GuestHookPath is the path within the VM that will be used for 'drop-in' hooks
|
||||||
GuestHookPath string
|
GuestHookPath string
|
||||||
@ -434,30 +446,18 @@ type HypervisorConfig struct {
|
|||||||
// SELinux label for the VM
|
// SELinux label for the VM
|
||||||
SELinuxProcessLabel string
|
SELinuxProcessLabel string
|
||||||
|
|
||||||
|
// SGXEPCSize specifies the size in bytes for the EPC Section.
|
||||||
|
// Enable SGX. Hardware-based isolation and memory encryption.
|
||||||
|
SGXEPCSize int64
|
||||||
|
|
||||||
// RxRateLimiterMaxRate is used to control network I/O inbound bandwidth on VM level.
|
// RxRateLimiterMaxRate is used to control network I/O inbound bandwidth on VM level.
|
||||||
RxRateLimiterMaxRate uint64
|
RxRateLimiterMaxRate uint64
|
||||||
|
|
||||||
// TxRateLimiterMaxRate is used to control network I/O outbound bandwidth on VM level.
|
// TxRateLimiterMaxRate is used to control network I/O outbound bandwidth on VM level.
|
||||||
TxRateLimiterMaxRate uint64
|
TxRateLimiterMaxRate uint64
|
||||||
|
|
||||||
// SGXEPCSize specifies the size in bytes for the EPC Section.
|
// MemOffset specifies memory space for nvdimm device
|
||||||
// Enable SGX. Hardware-based isolation and memory encryption.
|
MemOffset uint64
|
||||||
SGXEPCSize int64
|
|
||||||
|
|
||||||
// Enable annotations by name
|
|
||||||
EnableAnnotations []string
|
|
||||||
|
|
||||||
// GuestCoredumpPath is the path in host for saving guest memory dump
|
|
||||||
GuestMemoryDumpPath string
|
|
||||||
|
|
||||||
// GuestMemoryDumpPaging is used to indicate if enable paging
|
|
||||||
// for QEMU dump-guest-memory command
|
|
||||||
GuestMemoryDumpPaging bool
|
|
||||||
|
|
||||||
// Enable confidential guest support.
|
|
||||||
// Enable or disable different hardware features, ranging
|
|
||||||
// from memory encryption to both memory and CPU-state encryption and integrity.
|
|
||||||
ConfidentialGuest bool
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// vcpu mapping from vcpu number to thread number
|
// vcpu mapping from vcpu number to thread number
|
||||||
|
@ -33,7 +33,7 @@ type HypervisorConfig struct {
|
|||||||
MemSlots uint32
|
MemSlots uint32
|
||||||
|
|
||||||
// MemOffset specifies memory space for nvdimm device
|
// MemOffset specifies memory space for nvdimm device
|
||||||
MemOffset uint32
|
MemOffset uint64
|
||||||
|
|
||||||
// VirtioFSCacheSize is the DAX cache size in MiB
|
// VirtioFSCacheSize is the DAX cache size in MiB
|
||||||
VirtioFSCacheSize uint32
|
VirtioFSCacheSize uint32
|
||||||
|
@ -576,13 +576,13 @@ func addHypervisorMemoryOverrides(ocispec specs.Spec, sbConfig *vc.SandboxConfig
|
|||||||
}
|
}
|
||||||
|
|
||||||
if value, ok := ocispec.Annotations[vcAnnotations.MemOffset]; ok {
|
if value, ok := ocispec.Annotations[vcAnnotations.MemOffset]; ok {
|
||||||
moffset, err := strconv.ParseUint(value, 10, 32)
|
moffset, err := strconv.ParseUint(value, 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error parsing annotation for memory_offset: %v, please specify positive numeric value", err)
|
return fmt.Errorf("Error parsing annotation for memory_offset: %v, please specify positive numeric value", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if moffset > 0 {
|
if moffset > 0 {
|
||||||
sbConfig.HypervisorConfig.MemOffset = uint32(moffset)
|
sbConfig.HypervisorConfig.MemOffset = moffset
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -870,7 +870,7 @@ func TestAddHypervisorAnnotations(t *testing.T) {
|
|||||||
assert.Equal(config.HypervisorConfig.DefaultMaxVCPUs, uint32(1))
|
assert.Equal(config.HypervisorConfig.DefaultMaxVCPUs, uint32(1))
|
||||||
assert.Equal(config.HypervisorConfig.MemorySize, uint32(1024))
|
assert.Equal(config.HypervisorConfig.MemorySize, uint32(1024))
|
||||||
assert.Equal(config.HypervisorConfig.MemSlots, uint32(20))
|
assert.Equal(config.HypervisorConfig.MemSlots, uint32(20))
|
||||||
assert.Equal(config.HypervisorConfig.MemOffset, uint32(512))
|
assert.Equal(config.HypervisorConfig.MemOffset, uint64(512))
|
||||||
assert.Equal(config.HypervisorConfig.VirtioMem, true)
|
assert.Equal(config.HypervisorConfig.VirtioMem, true)
|
||||||
assert.Equal(config.HypervisorConfig.MemPrealloc, true)
|
assert.Equal(config.HypervisorConfig.MemPrealloc, true)
|
||||||
assert.Equal(config.HypervisorConfig.Mlock, false)
|
assert.Equal(config.HypervisorConfig.Mlock, false)
|
||||||
|
@ -2116,12 +2116,12 @@ func genericBridges(number uint32, machineType string) []types.Bridge {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// nolint: unused, deadcode
|
// nolint: unused, deadcode
|
||||||
func genericMemoryTopology(memoryMb, hostMemoryMb uint64, slots uint8, memoryOffset uint32) govmmQemu.Memory {
|
func genericMemoryTopology(memoryMb, hostMemoryMb uint64, slots uint8, memoryOffset uint64) govmmQemu.Memory {
|
||||||
// image NVDIMM device needs memory space 1024MB
|
// image NVDIMM device needs memory space 1024MB
|
||||||
// See https://github.com/clearcontainers/runtime/issues/380
|
// See https://github.com/clearcontainers/runtime/issues/380
|
||||||
memoryOffset += 1024
|
memoryOffset += 1024
|
||||||
|
|
||||||
memMax := fmt.Sprintf("%dM", hostMemoryMb+uint64(memoryOffset))
|
memMax := fmt.Sprintf("%dM", hostMemoryMb+memoryOffset)
|
||||||
|
|
||||||
mem := fmt.Sprintf("%dM", memoryMb)
|
mem := fmt.Sprintf("%dM", memoryMb)
|
||||||
|
|
||||||
|
@ -109,7 +109,7 @@ func TestQemuAmd64CPUModel(t *testing.T) {
|
|||||||
func TestQemuAmd64MemoryTopology(t *testing.T) {
|
func TestQemuAmd64MemoryTopology(t *testing.T) {
|
||||||
assert := assert.New(t)
|
assert := assert.New(t)
|
||||||
amd64 := newTestQemu(assert, QemuPC)
|
amd64 := newTestQemu(assert, QemuPC)
|
||||||
memoryOffset := 1024
|
memoryOffset := uint64(1024)
|
||||||
|
|
||||||
hostMem := uint64(100)
|
hostMem := uint64(100)
|
||||||
mem := uint64(120)
|
mem := uint64(120)
|
||||||
@ -117,7 +117,7 @@ func TestQemuAmd64MemoryTopology(t *testing.T) {
|
|||||||
expectedMemory := govmmQemu.Memory{
|
expectedMemory := govmmQemu.Memory{
|
||||||
Size: fmt.Sprintf("%dM", mem),
|
Size: fmt.Sprintf("%dM", mem),
|
||||||
Slots: slots,
|
Slots: slots,
|
||||||
MaxMem: fmt.Sprintf("%dM", hostMem+uint64(memoryOffset)),
|
MaxMem: fmt.Sprintf("%dM", hostMem+memoryOffset),
|
||||||
}
|
}
|
||||||
|
|
||||||
m := amd64.memoryTopology(mem, hostMem, slots)
|
m := amd64.memoryTopology(mem, hostMem, slots)
|
||||||
|
@ -175,20 +175,20 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type qemuArchBase struct {
|
type qemuArchBase struct {
|
||||||
qemuMachine govmmQemu.Machine
|
memoryOffset uint64
|
||||||
qemuExePath string
|
networkIndex int
|
||||||
memoryOffset uint32
|
|
||||||
nestedRun bool
|
nestedRun bool
|
||||||
vhost bool
|
vhost bool
|
||||||
disableNvdimm bool
|
disableNvdimm bool
|
||||||
dax bool
|
dax bool
|
||||||
networkIndex int
|
protection guestProtection
|
||||||
|
qemuMachine govmmQemu.Machine
|
||||||
|
qemuExePath string
|
||||||
|
PFlash []string
|
||||||
kernelParamsNonDebug []Param
|
kernelParamsNonDebug []Param
|
||||||
kernelParamsDebug []Param
|
kernelParamsDebug []Param
|
||||||
kernelParams []Param
|
kernelParams []Param
|
||||||
Bridges []types.Bridge
|
Bridges []types.Bridge
|
||||||
PFlash []string
|
|
||||||
protection guestProtection
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
Loading…
Reference in New Issue
Block a user