mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-04-29 12:14:48 +00:00
hypervisor: Add network bandwidth and operations rate limiters
In a similar way to what's already exposed as RxRateLimiterMaxRate and TxRateLimiterMaxRate, let's add four new fields to the Hypervisor's configuration. The values added are related to bandwidth and operations rate limiters, which have to be added so we can expose I/O throttling configurations to users using Cloud Hypervisor as their preferred VMM. The reason we cannot simply re-use {Rx,Tx}RateLimiterMaxRate is because Cloud Hypervisor exposes a single MaxRate to be used for both inbound and outbound queues. The newly added fields are: * NetRateLimiterBwMaxRate, defined in bits per second, which is used to control the network I/O bandwidth at the VM level. * NetRateLimiterBwOneTimeBurst, also defined in bits per second, which is used to define an *initial* max rate, which doesn't replenish. * NetRateLimiterOpsMaxRate, the operations per second equivalent of the NetRateLimiterBwMaxRate. * NetRateLimiterOpsOneTimeBurst, the operations per second equivalent of the NetRateLimiterBwOneTimeBurst. For now those extra fields have only been added to the hypervisor's configuration and they'll be used in the coming patches of this very same series. Signed-off-by: Fabiano Fidêncio <fabiano.fidencio@intel.com>
This commit is contained in:
parent
ab067cf074
commit
2d35e6066d
@ -74,70 +74,74 @@ type factory struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type hypervisor struct {
|
type hypervisor struct {
|
||||||
Path string `toml:"path"`
|
Path string `toml:"path"`
|
||||||
JailerPath string `toml:"jailer_path"`
|
JailerPath string `toml:"jailer_path"`
|
||||||
Kernel string `toml:"kernel"`
|
Kernel string `toml:"kernel"`
|
||||||
CtlPath string `toml:"ctlpath"`
|
CtlPath string `toml:"ctlpath"`
|
||||||
Initrd string `toml:"initrd"`
|
Initrd string `toml:"initrd"`
|
||||||
Image string `toml:"image"`
|
Image string `toml:"image"`
|
||||||
Firmware string `toml:"firmware"`
|
Firmware string `toml:"firmware"`
|
||||||
FirmwareVolume string `toml:"firmware_volume"`
|
FirmwareVolume string `toml:"firmware_volume"`
|
||||||
MachineAccelerators string `toml:"machine_accelerators"`
|
MachineAccelerators string `toml:"machine_accelerators"`
|
||||||
CPUFeatures string `toml:"cpu_features"`
|
CPUFeatures string `toml:"cpu_features"`
|
||||||
KernelParams string `toml:"kernel_params"`
|
KernelParams string `toml:"kernel_params"`
|
||||||
MachineType string `toml:"machine_type"`
|
MachineType string `toml:"machine_type"`
|
||||||
BlockDeviceDriver string `toml:"block_device_driver"`
|
BlockDeviceDriver string `toml:"block_device_driver"`
|
||||||
EntropySource string `toml:"entropy_source"`
|
EntropySource string `toml:"entropy_source"`
|
||||||
SharedFS string `toml:"shared_fs"`
|
SharedFS string `toml:"shared_fs"`
|
||||||
VirtioFSDaemon string `toml:"virtio_fs_daemon"`
|
VirtioFSDaemon string `toml:"virtio_fs_daemon"`
|
||||||
VirtioFSCache string `toml:"virtio_fs_cache"`
|
VirtioFSCache string `toml:"virtio_fs_cache"`
|
||||||
VhostUserStorePath string `toml:"vhost_user_store_path"`
|
VhostUserStorePath string `toml:"vhost_user_store_path"`
|
||||||
FileBackedMemRootDir string `toml:"file_mem_backend"`
|
FileBackedMemRootDir string `toml:"file_mem_backend"`
|
||||||
GuestHookPath string `toml:"guest_hook_path"`
|
GuestHookPath string `toml:"guest_hook_path"`
|
||||||
GuestMemoryDumpPath string `toml:"guest_memory_dump_path"`
|
GuestMemoryDumpPath string `toml:"guest_memory_dump_path"`
|
||||||
HypervisorPathList []string `toml:"valid_hypervisor_paths"`
|
HypervisorPathList []string `toml:"valid_hypervisor_paths"`
|
||||||
JailerPathList []string `toml:"valid_jailer_paths"`
|
JailerPathList []string `toml:"valid_jailer_paths"`
|
||||||
CtlPathList []string `toml:"valid_ctlpaths"`
|
CtlPathList []string `toml:"valid_ctlpaths"`
|
||||||
VirtioFSDaemonList []string `toml:"valid_virtio_fs_daemon_paths"`
|
VirtioFSDaemonList []string `toml:"valid_virtio_fs_daemon_paths"`
|
||||||
VirtioFSExtraArgs []string `toml:"virtio_fs_extra_args"`
|
VirtioFSExtraArgs []string `toml:"virtio_fs_extra_args"`
|
||||||
PFlashList []string `toml:"pflashes"`
|
PFlashList []string `toml:"pflashes"`
|
||||||
VhostUserStorePathList []string `toml:"valid_vhost_user_store_paths"`
|
VhostUserStorePathList []string `toml:"valid_vhost_user_store_paths"`
|
||||||
FileBackedMemRootList []string `toml:"valid_file_mem_backends"`
|
FileBackedMemRootList []string `toml:"valid_file_mem_backends"`
|
||||||
EntropySourceList []string `toml:"valid_entropy_sources"`
|
EntropySourceList []string `toml:"valid_entropy_sources"`
|
||||||
EnableAnnotations []string `toml:"enable_annotations"`
|
EnableAnnotations []string `toml:"enable_annotations"`
|
||||||
RxRateLimiterMaxRate uint64 `toml:"rx_rate_limiter_max_rate"`
|
RxRateLimiterMaxRate uint64 `toml:"rx_rate_limiter_max_rate"`
|
||||||
TxRateLimiterMaxRate uint64 `toml:"tx_rate_limiter_max_rate"`
|
TxRateLimiterMaxRate uint64 `toml:"tx_rate_limiter_max_rate"`
|
||||||
MemOffset uint64 `toml:"memory_offset"`
|
MemOffset uint64 `toml:"memory_offset"`
|
||||||
VirtioFSCacheSize uint32 `toml:"virtio_fs_cache_size"`
|
NetRateLimiterBwMaxRate int64 `toml:"net_rate_limiter_bw_max_rate"`
|
||||||
DefaultMaxVCPUs uint32 `toml:"default_maxvcpus"`
|
NetRateLimiterBwOneTimeBurst int64 `toml:"net_rate_limiter_bw_one_time_burst"`
|
||||||
MemorySize uint32 `toml:"default_memory"`
|
NetRateLimiterOpsMaxRate int64 `toml:"net_rate_limiter_ops_max_rate"`
|
||||||
MemSlots uint32 `toml:"memory_slots"`
|
NetRateLimiterOpsOneTimeBurst int64 `toml:"net_rate_limiter_ops_one_time_burst"`
|
||||||
DefaultBridges uint32 `toml:"default_bridges"`
|
VirtioFSCacheSize uint32 `toml:"virtio_fs_cache_size"`
|
||||||
Msize9p uint32 `toml:"msize_9p"`
|
DefaultMaxVCPUs uint32 `toml:"default_maxvcpus"`
|
||||||
PCIeRootPort uint32 `toml:"pcie_root_port"`
|
MemorySize uint32 `toml:"default_memory"`
|
||||||
NumVCPUs int32 `toml:"default_vcpus"`
|
MemSlots uint32 `toml:"memory_slots"`
|
||||||
BlockDeviceCacheSet bool `toml:"block_device_cache_set"`
|
DefaultBridges uint32 `toml:"default_bridges"`
|
||||||
BlockDeviceCacheDirect bool `toml:"block_device_cache_direct"`
|
Msize9p uint32 `toml:"msize_9p"`
|
||||||
BlockDeviceCacheNoflush bool `toml:"block_device_cache_noflush"`
|
PCIeRootPort uint32 `toml:"pcie_root_port"`
|
||||||
EnableVhostUserStore bool `toml:"enable_vhost_user_store"`
|
NumVCPUs int32 `toml:"default_vcpus"`
|
||||||
DisableBlockDeviceUse bool `toml:"disable_block_device_use"`
|
BlockDeviceCacheSet bool `toml:"block_device_cache_set"`
|
||||||
MemPrealloc bool `toml:"enable_mem_prealloc"`
|
BlockDeviceCacheDirect bool `toml:"block_device_cache_direct"`
|
||||||
HugePages bool `toml:"enable_hugepages"`
|
BlockDeviceCacheNoflush bool `toml:"block_device_cache_noflush"`
|
||||||
VirtioMem bool `toml:"enable_virtio_mem"`
|
EnableVhostUserStore bool `toml:"enable_vhost_user_store"`
|
||||||
IOMMU bool `toml:"enable_iommu"`
|
DisableBlockDeviceUse bool `toml:"disable_block_device_use"`
|
||||||
IOMMUPlatform bool `toml:"enable_iommu_platform"`
|
MemPrealloc bool `toml:"enable_mem_prealloc"`
|
||||||
Debug bool `toml:"enable_debug"`
|
HugePages bool `toml:"enable_hugepages"`
|
||||||
DisableNestingChecks bool `toml:"disable_nesting_checks"`
|
VirtioMem bool `toml:"enable_virtio_mem"`
|
||||||
EnableIOThreads bool `toml:"enable_iothreads"`
|
IOMMU bool `toml:"enable_iommu"`
|
||||||
DisableImageNvdimm bool `toml:"disable_image_nvdimm"`
|
IOMMUPlatform bool `toml:"enable_iommu_platform"`
|
||||||
HotplugVFIOOnRootBus bool `toml:"hotplug_vfio_on_root_bus"`
|
Debug bool `toml:"enable_debug"`
|
||||||
DisableVhostNet bool `toml:"disable_vhost_net"`
|
DisableNestingChecks bool `toml:"disable_nesting_checks"`
|
||||||
GuestMemoryDumpPaging bool `toml:"guest_memory_dump_paging"`
|
EnableIOThreads bool `toml:"enable_iothreads"`
|
||||||
ConfidentialGuest bool `toml:"confidential_guest"`
|
DisableImageNvdimm bool `toml:"disable_image_nvdimm"`
|
||||||
GuestSwap bool `toml:"enable_guest_swap"`
|
HotplugVFIOOnRootBus bool `toml:"hotplug_vfio_on_root_bus"`
|
||||||
Rootless bool `toml:"rootless"`
|
DisableVhostNet bool `toml:"disable_vhost_net"`
|
||||||
DisableSeccomp bool `toml:"disable_seccomp"`
|
GuestMemoryDumpPaging bool `toml:"guest_memory_dump_paging"`
|
||||||
DisableSeLinux bool `toml:"disable_selinux"`
|
ConfidentialGuest bool `toml:"confidential_guest"`
|
||||||
|
GuestSwap bool `toml:"enable_guest_swap"`
|
||||||
|
Rootless bool `toml:"rootless"`
|
||||||
|
DisableSeccomp bool `toml:"disable_seccomp"`
|
||||||
|
DisableSeLinux bool `toml:"disable_selinux"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type runtime struct {
|
type runtime struct {
|
||||||
@ -490,6 +494,34 @@ func (h hypervisor) getTxRateLimiterCfg() uint64 {
|
|||||||
return h.TxRateLimiterMaxRate
|
return h.TxRateLimiterMaxRate
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h hypervisor) getNetRateLimiterBwMaxRate() int64 {
|
||||||
|
return h.NetRateLimiterBwMaxRate
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h hypervisor) getNetRateLimiterBwOneTimeBurst() int64 {
|
||||||
|
if h.NetRateLimiterBwOneTimeBurst != 0 && h.getNetRateLimiterBwMaxRate() == 0 {
|
||||||
|
kataUtilsLogger.Warn("The NetRateLimiterBwOneTimeBurst is set but NetRateLimiterBwMaxRate is not set, this option will be ignored.")
|
||||||
|
|
||||||
|
h.NetRateLimiterBwOneTimeBurst = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
return h.NetRateLimiterBwOneTimeBurst
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h hypervisor) getNetRateLimiterOpsMaxRate() int64 {
|
||||||
|
return h.NetRateLimiterOpsMaxRate
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h hypervisor) getNetRateLimiterOpsOneTimeBurst() int64 {
|
||||||
|
if h.NetRateLimiterOpsOneTimeBurst != 0 && h.getNetRateLimiterOpsMaxRate() == 0 {
|
||||||
|
kataUtilsLogger.Warn("The NetRateLimiterOpsOneTimeBurst is set but NetRateLimiterOpsMaxRate is not set, this option will be ignored.")
|
||||||
|
|
||||||
|
h.NetRateLimiterOpsOneTimeBurst = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
return h.NetRateLimiterOpsOneTimeBurst
|
||||||
|
}
|
||||||
|
|
||||||
func (h hypervisor) getIOMMUPlatform() bool {
|
func (h hypervisor) getIOMMUPlatform() bool {
|
||||||
if h.IOMMUPlatform {
|
if h.IOMMUPlatform {
|
||||||
kataUtilsLogger.Info("IOMMUPlatform is enabled by default.")
|
kataUtilsLogger.Info("IOMMUPlatform is enabled by default.")
|
||||||
|
@ -386,6 +386,24 @@ type HypervisorConfig struct {
|
|||||||
// 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
|
||||||
|
|
||||||
|
// NetRateLimiterBwRate is used to control network I/O bandwidth on VM level.
|
||||||
|
// The same value, defined in bits per second, is used for inbound and outbound bandwidth.
|
||||||
|
NetRateLimiterBwMaxRate int64
|
||||||
|
|
||||||
|
// NetRateLimiterBwOneTimeBurst is used to control network I/O bandwidth on VM level.
|
||||||
|
// This increases the initial max rate and this initial extra credit does *NOT* replenish
|
||||||
|
// and can be used for an *initial* burst of data.
|
||||||
|
NetRateLimiterBwOneTimeBurst int64
|
||||||
|
|
||||||
|
// NetRateLimiterOpsRate is used to control network I/O operations on VM level.
|
||||||
|
// The same value, defined in operations per second, is used for inbound and outbound bandwidth.
|
||||||
|
NetRateLimiterOpsMaxRate int64
|
||||||
|
|
||||||
|
// NetRateLimiterOpsOneTimeBurst is used to control network I/O operations on VM level.
|
||||||
|
// This increases the initial max rate and this initial extra credit does *NOT* replenish
|
||||||
|
// and can be used for an *initial* burst of data.
|
||||||
|
NetRateLimiterOpsOneTimeBurst int64
|
||||||
|
|
||||||
// MemOffset specifies memory space for nvdimm device
|
// MemOffset specifies memory space for nvdimm device
|
||||||
MemOffset uint64
|
MemOffset uint64
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user