mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-08-16 23:17:42 +00:00
runtime-rs: change representation of default_vcpus from i32 to f32
This commit focuses purely on the formal change of type. If any subsequent changes in semantics are needed they are purposely avoided here so that the commit can be reviewed as a 100% formal and 0% semantic change. Signed-off-by: Pavel Mores <pmores@redhat.com>
This commit is contained in:
parent
cdc0eab8e4
commit
1f95d9401b
@ -635,13 +635,13 @@ impl Annotation {
|
|||||||
KATA_ANNO_CFG_HYPERVISOR_CPU_FEATURES => {
|
KATA_ANNO_CFG_HYPERVISOR_CPU_FEATURES => {
|
||||||
hv.cpu_info.cpu_features = value.to_string();
|
hv.cpu_info.cpu_features = value.to_string();
|
||||||
}
|
}
|
||||||
KATA_ANNO_CFG_HYPERVISOR_DEFAULT_VCPUS => match self.get_value::<i32>(key) {
|
KATA_ANNO_CFG_HYPERVISOR_DEFAULT_VCPUS => match self.get_value::<f32>(key) {
|
||||||
Ok(num_cpus) => {
|
Ok(num_cpus) => {
|
||||||
let num_cpus = num_cpus.unwrap_or_default();
|
let num_cpus = num_cpus.unwrap_or_default();
|
||||||
if num_cpus
|
if num_cpus
|
||||||
> get_hypervisor_plugin(hypervisor_name)
|
> get_hypervisor_plugin(hypervisor_name)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.get_max_cpus() as i32
|
.get_max_cpus() as f32
|
||||||
{
|
{
|
||||||
return Err(io::Error::new(
|
return Err(io::Error::new(
|
||||||
io::ErrorKind::InvalidData,
|
io::ErrorKind::InvalidData,
|
||||||
|
@ -369,7 +369,7 @@ mod drop_in_directory_handling {
|
|||||||
config.hypervisor["qemu"].path,
|
config.hypervisor["qemu"].path,
|
||||||
"/usr/bin/qemu-kvm".to_string()
|
"/usr/bin/qemu-kvm".to_string()
|
||||||
);
|
);
|
||||||
assert_eq!(config.hypervisor["qemu"].cpu_info.default_vcpus, 2);
|
assert_eq!(config.hypervisor["qemu"].cpu_info.default_vcpus, 2.0);
|
||||||
assert_eq!(config.hypervisor["qemu"].device_info.default_bridges, 4);
|
assert_eq!(config.hypervisor["qemu"].device_info.default_bridges, 4);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
config.hypervisor["qemu"].shared_fs.shared_fs.as_deref(),
|
config.hypervisor["qemu"].shared_fs.shared_fs.as_deref(),
|
||||||
|
@ -109,7 +109,7 @@ impl ConfigPlugin for CloudHypervisorConfig {
|
|||||||
return Err(eother!("Both guest boot image and initrd for CH are empty"));
|
return Err(eother!("Both guest boot image and initrd for CH are empty"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ch.cpu_info.default_vcpus > 0
|
if (ch.cpu_info.default_vcpus > 0.0
|
||||||
&& ch.cpu_info.default_vcpus as u32 > default::MAX_CH_VCPUS)
|
&& ch.cpu_info.default_vcpus as u32 > default::MAX_CH_VCPUS)
|
||||||
|| ch.cpu_info.default_maxvcpus > default::MAX_CH_VCPUS
|
|| ch.cpu_info.default_maxvcpus > default::MAX_CH_VCPUS
|
||||||
{
|
{
|
||||||
|
@ -66,7 +66,7 @@ impl ConfigPlugin for DragonballConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if db.cpu_info.default_vcpus as u32 > db.cpu_info.default_maxvcpus {
|
if db.cpu_info.default_vcpus as u32 > db.cpu_info.default_maxvcpus {
|
||||||
db.cpu_info.default_vcpus = db.cpu_info.default_maxvcpus as i32;
|
db.cpu_info.default_vcpus = db.cpu_info.default_maxvcpus as f32;
|
||||||
}
|
}
|
||||||
|
|
||||||
if db.machine_info.entropy_source.is_empty() {
|
if db.machine_info.entropy_source.is_empty() {
|
||||||
@ -135,7 +135,7 @@ impl ConfigPlugin for DragonballConfig {
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (db.cpu_info.default_vcpus > 0
|
if (db.cpu_info.default_vcpus > 0.0
|
||||||
&& db.cpu_info.default_vcpus as u32 > default::MAX_DRAGONBALL_VCPUS)
|
&& db.cpu_info.default_vcpus as u32 > default::MAX_DRAGONBALL_VCPUS)
|
||||||
|| db.cpu_info.default_maxvcpus > default::MAX_DRAGONBALL_VCPUS
|
|| db.cpu_info.default_maxvcpus > default::MAX_DRAGONBALL_VCPUS
|
||||||
{
|
{
|
||||||
|
@ -93,7 +93,7 @@ impl ConfigPlugin for FirecrackerConfig {
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (firecracker.cpu_info.default_vcpus > 0
|
if (firecracker.cpu_info.default_vcpus > 0.0
|
||||||
&& firecracker.cpu_info.default_vcpus as u32 > default::MAX_FIRECRACKER_VCPUS)
|
&& firecracker.cpu_info.default_vcpus as u32 > default::MAX_FIRECRACKER_VCPUS)
|
||||||
|| firecracker.cpu_info.default_maxvcpus > default::MAX_FIRECRACKER_VCPUS
|
|| firecracker.cpu_info.default_maxvcpus > default::MAX_FIRECRACKER_VCPUS
|
||||||
{
|
{
|
||||||
|
@ -348,7 +348,7 @@ pub struct CpuInfo {
|
|||||||
/// > 0 <= number of physical cores --> will be set to the specified number
|
/// > 0 <= number of physical cores --> will be set to the specified number
|
||||||
/// > number of physical cores --> will be set to the actual number of physical cores
|
/// > number of physical cores --> will be set to the actual number of physical cores
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub default_vcpus: i32,
|
pub default_vcpus: f32,
|
||||||
|
|
||||||
/// Default maximum number of vCPUs per SB/VM:
|
/// Default maximum number of vCPUs per SB/VM:
|
||||||
/// - unspecified or == 0 --> will be set to the actual number of physical cores or
|
/// - unspecified or == 0 --> will be set to the actual number of physical cores or
|
||||||
@ -380,22 +380,22 @@ impl CpuInfo {
|
|||||||
let features: Vec<&str> = self.cpu_features.split(',').map(|v| v.trim()).collect();
|
let features: Vec<&str> = self.cpu_features.split(',').map(|v| v.trim()).collect();
|
||||||
self.cpu_features = features.join(",");
|
self.cpu_features = features.join(",");
|
||||||
|
|
||||||
let cpus = num_cpus::get() as u32;
|
let cpus = num_cpus::get() as f32;
|
||||||
|
|
||||||
// adjust default_maxvcpus
|
// adjust default_maxvcpus
|
||||||
if self.default_maxvcpus == 0 || self.default_maxvcpus > cpus {
|
if self.default_maxvcpus == 0 || self.default_maxvcpus as f32 > cpus {
|
||||||
self.default_maxvcpus = cpus;
|
self.default_maxvcpus = cpus as u32;
|
||||||
}
|
}
|
||||||
|
|
||||||
// adjust default_vcpus
|
// adjust default_vcpus
|
||||||
if self.default_vcpus < 0 || self.default_vcpus as u32 > cpus {
|
if self.default_vcpus < 0.0 || self.default_vcpus > cpus {
|
||||||
self.default_vcpus = cpus as i32;
|
self.default_vcpus = cpus;
|
||||||
} else if self.default_vcpus == 0 {
|
} else if self.default_vcpus == 0.0 {
|
||||||
self.default_vcpus = default::DEFAULT_GUEST_VCPUS as i32;
|
self.default_vcpus = default::DEFAULT_GUEST_VCPUS as f32;
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.default_vcpus > self.default_maxvcpus as i32 {
|
if self.default_vcpus > self.default_maxvcpus as f32 {
|
||||||
self.default_vcpus = self.default_maxvcpus as i32;
|
self.default_vcpus = self.default_maxvcpus as f32;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
@ -403,7 +403,7 @@ impl CpuInfo {
|
|||||||
|
|
||||||
/// Validate the configuration information.
|
/// Validate the configuration information.
|
||||||
pub fn validate(&self) -> Result<()> {
|
pub fn validate(&self) -> Result<()> {
|
||||||
if self.default_vcpus > self.default_maxvcpus as i32 {
|
if self.default_vcpus > self.default_maxvcpus as f32 {
|
||||||
return Err(eother!(
|
return Err(eother!(
|
||||||
"The default_vcpus({}) is greater than default_maxvcpus({})",
|
"The default_vcpus({}) is greater than default_maxvcpus({})",
|
||||||
self.default_vcpus,
|
self.default_vcpus,
|
||||||
@ -1413,8 +1413,8 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_cpu_info_adjust_config() {
|
fn test_cpu_info_adjust_config() {
|
||||||
// get CPU cores of the test node
|
// get CPU cores of the test node
|
||||||
let node_cpus = num_cpus::get() as u32;
|
let node_cpus = num_cpus::get() as f32;
|
||||||
let default_vcpus = default::DEFAULT_GUEST_VCPUS as i32;
|
let default_vcpus = default::DEFAULT_GUEST_VCPUS as f32;
|
||||||
|
|
||||||
struct TestData<'a> {
|
struct TestData<'a> {
|
||||||
desc: &'a str,
|
desc: &'a str,
|
||||||
@ -1427,38 +1427,38 @@ mod tests {
|
|||||||
desc: "all with default values",
|
desc: "all with default values",
|
||||||
input: &mut CpuInfo {
|
input: &mut CpuInfo {
|
||||||
cpu_features: "".to_string(),
|
cpu_features: "".to_string(),
|
||||||
default_vcpus: 0,
|
default_vcpus: 0.0,
|
||||||
default_maxvcpus: 0,
|
default_maxvcpus: 0,
|
||||||
},
|
},
|
||||||
output: CpuInfo {
|
output: CpuInfo {
|
||||||
cpu_features: "".to_string(),
|
cpu_features: "".to_string(),
|
||||||
default_vcpus,
|
default_vcpus,
|
||||||
default_maxvcpus: node_cpus,
|
default_maxvcpus: node_cpus as u32,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
TestData {
|
TestData {
|
||||||
desc: "all with big values",
|
desc: "all with big values",
|
||||||
input: &mut CpuInfo {
|
input: &mut CpuInfo {
|
||||||
cpu_features: "a,b,c".to_string(),
|
cpu_features: "a,b,c".to_string(),
|
||||||
default_vcpus: 9999999,
|
default_vcpus: 9999999.0,
|
||||||
default_maxvcpus: 9999999,
|
default_maxvcpus: 9999999,
|
||||||
},
|
},
|
||||||
output: CpuInfo {
|
output: CpuInfo {
|
||||||
cpu_features: "a,b,c".to_string(),
|
cpu_features: "a,b,c".to_string(),
|
||||||
default_vcpus: node_cpus as i32,
|
default_vcpus: node_cpus,
|
||||||
default_maxvcpus: node_cpus,
|
default_maxvcpus: node_cpus as u32,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
TestData {
|
TestData {
|
||||||
desc: "default_vcpus lager than default_maxvcpus",
|
desc: "default_vcpus lager than default_maxvcpus",
|
||||||
input: &mut CpuInfo {
|
input: &mut CpuInfo {
|
||||||
cpu_features: "a, b ,c".to_string(),
|
cpu_features: "a, b ,c".to_string(),
|
||||||
default_vcpus: -1,
|
default_vcpus: -1.0,
|
||||||
default_maxvcpus: 1,
|
default_maxvcpus: 1,
|
||||||
},
|
},
|
||||||
output: CpuInfo {
|
output: CpuInfo {
|
||||||
cpu_features: "a,b,c".to_string(),
|
cpu_features: "a,b,c".to_string(),
|
||||||
default_vcpus: 1,
|
default_vcpus: 1.0,
|
||||||
default_maxvcpus: 1,
|
default_maxvcpus: 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -128,7 +128,7 @@ impl ConfigPlugin for QemuConfig {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qemu.cpu_info.default_vcpus > 0
|
if (qemu.cpu_info.default_vcpus > 0.0
|
||||||
&& qemu.cpu_info.default_vcpus as u32 > default::MAX_QEMU_VCPUS)
|
&& qemu.cpu_info.default_vcpus as u32 > default::MAX_QEMU_VCPUS)
|
||||||
|| qemu.cpu_info.default_maxvcpus > default::MAX_QEMU_VCPUS
|
|| qemu.cpu_info.default_maxvcpus > default::MAX_QEMU_VCPUS
|
||||||
{
|
{
|
||||||
|
@ -186,7 +186,7 @@ mod tests {
|
|||||||
"./test_hypervisor_hook_path"
|
"./test_hypervisor_hook_path"
|
||||||
);
|
);
|
||||||
assert!(!hv.memory_info.enable_mem_prealloc);
|
assert!(!hv.memory_info.enable_mem_prealloc);
|
||||||
assert_eq!(hv.cpu_info.default_vcpus, 12);
|
assert_eq!(hv.cpu_info.default_vcpus, 12.0);
|
||||||
assert!(!hv.memory_info.enable_guest_swap);
|
assert!(!hv.memory_info.enable_guest_swap);
|
||||||
assert_eq!(hv.memory_info.default_memory, 100);
|
assert_eq!(hv.memory_info.default_memory, 100);
|
||||||
assert!(!hv.enable_iothreads);
|
assert!(!hv.enable_iothreads);
|
||||||
|
@ -319,12 +319,12 @@ impl TryFrom<(CpuInfo, GuestProtection)> for CpusConfig {
|
|||||||
let guest_protection_to_use = args.1;
|
let guest_protection_to_use = args.1;
|
||||||
|
|
||||||
// This can only happen if runtime-rs fails to set default values.
|
// This can only happen if runtime-rs fails to set default values.
|
||||||
if cpu.default_vcpus <= 0 {
|
if cpu.default_vcpus <= 0.0 {
|
||||||
return Err(CpusConfigError::BootVCPUsTooSmall);
|
return Err(CpusConfigError::BootVCPUsTooSmall);
|
||||||
}
|
}
|
||||||
|
|
||||||
let default_vcpus =
|
let default_vcpus = u8::try_from(cpu.default_vcpus.ceil() as u32)
|
||||||
u8::try_from(cpu.default_vcpus).map_err(CpusConfigError::BootVCPUsTooBig)?;
|
.map_err(CpusConfigError::BootVCPUsTooBig)?;
|
||||||
|
|
||||||
// This can only happen if runtime-rs fails to set default values.
|
// This can only happen if runtime-rs fails to set default values.
|
||||||
if cpu.default_maxvcpus == 0 {
|
if cpu.default_maxvcpus == 0 {
|
||||||
@ -611,7 +611,7 @@ mod tests {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let cpu_info = CpuInfo {
|
let cpu_info = CpuInfo {
|
||||||
default_vcpus: cpu_default as i32,
|
default_vcpus: cpu_default as f32,
|
||||||
default_maxvcpus,
|
default_maxvcpus,
|
||||||
|
|
||||||
..Default::default()
|
..Default::default()
|
||||||
@ -1159,7 +1159,7 @@ mod tests {
|
|||||||
},
|
},
|
||||||
TestData {
|
TestData {
|
||||||
cpu_info: CpuInfo {
|
cpu_info: CpuInfo {
|
||||||
default_vcpus: -1,
|
default_vcpus: -1.0,
|
||||||
|
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
@ -1168,7 +1168,7 @@ mod tests {
|
|||||||
},
|
},
|
||||||
TestData {
|
TestData {
|
||||||
cpu_info: CpuInfo {
|
cpu_info: CpuInfo {
|
||||||
default_vcpus: 1,
|
default_vcpus: 1.0,
|
||||||
default_maxvcpus: 0,
|
default_maxvcpus: 0,
|
||||||
|
|
||||||
..Default::default()
|
..Default::default()
|
||||||
@ -1178,7 +1178,7 @@ mod tests {
|
|||||||
},
|
},
|
||||||
TestData {
|
TestData {
|
||||||
cpu_info: CpuInfo {
|
cpu_info: CpuInfo {
|
||||||
default_vcpus: 9,
|
default_vcpus: 9.0,
|
||||||
default_maxvcpus: 7,
|
default_maxvcpus: 7,
|
||||||
|
|
||||||
..Default::default()
|
..Default::default()
|
||||||
@ -1188,7 +1188,7 @@ mod tests {
|
|||||||
},
|
},
|
||||||
TestData {
|
TestData {
|
||||||
cpu_info: CpuInfo {
|
cpu_info: CpuInfo {
|
||||||
default_vcpus: 1,
|
default_vcpus: 1.0,
|
||||||
default_maxvcpus: 1,
|
default_maxvcpus: 1,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
@ -1208,7 +1208,7 @@ mod tests {
|
|||||||
},
|
},
|
||||||
TestData {
|
TestData {
|
||||||
cpu_info: CpuInfo {
|
cpu_info: CpuInfo {
|
||||||
default_vcpus: 1,
|
default_vcpus: 1.0,
|
||||||
default_maxvcpus: 3,
|
default_maxvcpus: 3,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
@ -1228,7 +1228,7 @@ mod tests {
|
|||||||
},
|
},
|
||||||
TestData {
|
TestData {
|
||||||
cpu_info: CpuInfo {
|
cpu_info: CpuInfo {
|
||||||
default_vcpus: 1,
|
default_vcpus: 1.0,
|
||||||
default_maxvcpus: 13,
|
default_maxvcpus: 13,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
@ -1823,7 +1823,7 @@ mod tests {
|
|||||||
|
|
||||||
cfg: HypervisorConfig {
|
cfg: HypervisorConfig {
|
||||||
cpu_info: CpuInfo {
|
cpu_info: CpuInfo {
|
||||||
default_vcpus: 0,
|
default_vcpus: 0.0,
|
||||||
|
|
||||||
..cpu_info.clone()
|
..cpu_info.clone()
|
||||||
},
|
},
|
||||||
@ -1939,7 +1939,7 @@ mod tests {
|
|||||||
vsock_socket_path: "vsock_socket_path".into(),
|
vsock_socket_path: "vsock_socket_path".into(),
|
||||||
cfg: HypervisorConfig {
|
cfg: HypervisorConfig {
|
||||||
cpu_info: CpuInfo {
|
cpu_info: CpuInfo {
|
||||||
default_vcpus: 1,
|
default_vcpus: 1.0,
|
||||||
default_maxvcpus: 1,
|
default_maxvcpus: 1,
|
||||||
|
|
||||||
..Default::default()
|
..Default::default()
|
||||||
@ -1963,7 +1963,7 @@ mod tests {
|
|||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
cpu_info: CpuInfo {
|
cpu_info: CpuInfo {
|
||||||
default_vcpus: 1,
|
default_vcpus: 1.0,
|
||||||
default_maxvcpus: 1,
|
default_maxvcpus: 1,
|
||||||
|
|
||||||
..Default::default()
|
..Default::default()
|
||||||
|
@ -25,7 +25,7 @@ pub struct CpuResource {
|
|||||||
pub(crate) current_vcpu: Arc<RwLock<u32>>,
|
pub(crate) current_vcpu: Arc<RwLock<u32>>,
|
||||||
|
|
||||||
/// Default number of vCPUs
|
/// Default number of vCPUs
|
||||||
pub(crate) default_vcpu: u32,
|
pub(crate) default_vcpu: f32,
|
||||||
|
|
||||||
/// CpuResource of each container
|
/// CpuResource of each container
|
||||||
pub(crate) container_cpu_resources: Arc<RwLock<HashMap<String, LinuxContainerCpuResources>>>,
|
pub(crate) container_cpu_resources: Arc<RwLock<HashMap<String, LinuxContainerCpuResources>>>,
|
||||||
@ -40,7 +40,7 @@ impl CpuResource {
|
|||||||
.context(format!("failed to get hypervisor {}", hypervisor_name))?;
|
.context(format!("failed to get hypervisor {}", hypervisor_name))?;
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
current_vcpu: Arc::new(RwLock::new(hypervisor_config.cpu_info.default_vcpus as u32)),
|
current_vcpu: Arc::new(RwLock::new(hypervisor_config.cpu_info.default_vcpus as u32)),
|
||||||
default_vcpu: hypervisor_config.cpu_info.default_vcpus as u32,
|
default_vcpu: hypervisor_config.cpu_info.default_vcpus,
|
||||||
container_cpu_resources: Arc::new(RwLock::new(HashMap::new())),
|
container_cpu_resources: Arc::new(RwLock::new(HashMap::new())),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -119,7 +119,7 @@ impl CpuResource {
|
|||||||
async fn calc_cpu_resources(&self) -> Result<u32> {
|
async fn calc_cpu_resources(&self) -> Result<u32> {
|
||||||
let resources = self.container_cpu_resources.read().await;
|
let resources = self.container_cpu_resources.read().await;
|
||||||
if resources.is_empty() {
|
if resources.is_empty() {
|
||||||
return Ok(self.default_vcpu);
|
return Ok(self.default_vcpu.ceil() as u32);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If requests of individual containers are expresses with different
|
// If requests of individual containers are expresses with different
|
||||||
@ -156,7 +156,6 @@ impl CpuResource {
|
|||||||
let quota = cpu_resource.quota() as f64;
|
let quota = cpu_resource.quota() as f64;
|
||||||
let period = cpu_resource.period() as f64;
|
let period = cpu_resource.period() as f64;
|
||||||
if quota >= 0.0 && period != 0.0 {
|
if quota >= 0.0 && period != 0.0 {
|
||||||
info!(sl!(), "total_quota={}, adding {}/{} == {}", total_quota, quota, period, quota * (max_period / period));
|
|
||||||
total_quota += quota * (max_period / period);
|
total_quota += quota * (max_period / period);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -199,7 +198,7 @@ impl CpuResource {
|
|||||||
|
|
||||||
// do not reduce computing power
|
// do not reduce computing power
|
||||||
// the number of vcpus would not be lower than the default size
|
// the number of vcpus would not be lower than the default size
|
||||||
let new_vcpus = cmp::max(new_vcpus, self.default_vcpu);
|
let new_vcpus = cmp::max(new_vcpus, self.default_vcpu.ceil() as u32);
|
||||||
|
|
||||||
let (_, new) = hypervisor
|
let (_, new) = hypervisor
|
||||||
.resize_vcpu(old_vcpus, new_vcpus)
|
.resize_vcpu(old_vcpus, new_vcpus)
|
||||||
@ -216,7 +215,7 @@ mod tests {
|
|||||||
use kata_types::config::{Hypervisor, TomlConfig};
|
use kata_types::config::{Hypervisor, TomlConfig};
|
||||||
use oci::LinuxCpu;
|
use oci::LinuxCpu;
|
||||||
|
|
||||||
fn get_cpu_resource_with_default_vcpus(default_vcpus: i32) -> CpuResource {
|
fn get_cpu_resource_with_default_vcpus(default_vcpus: f32) -> CpuResource {
|
||||||
let mut config = TomlConfig::default();
|
let mut config = TomlConfig::default();
|
||||||
config
|
config
|
||||||
.hypervisor
|
.hypervisor
|
||||||
@ -244,7 +243,7 @@ mod tests {
|
|||||||
// calc_cpu_resources() implementation is better than a f32-based one.
|
// calc_cpu_resources() implementation is better than a f32-based one.
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_rounding() {
|
async fn test_rounding() {
|
||||||
let mut cpu_resource = get_cpu_resource_with_default_vcpus(0);
|
let mut cpu_resource = get_cpu_resource_with_default_vcpus(0.0);
|
||||||
|
|
||||||
// A f32-based calc_cpu_resources() implementation would fail this
|
// A f32-based calc_cpu_resources() implementation would fail this
|
||||||
// test (adding 0.1 ten times gives roughly 1.0000001).
|
// test (adding 0.1 ten times gives roughly 1.0000001).
|
||||||
@ -274,9 +273,9 @@ mod tests {
|
|||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_big_allocation_1() {
|
async fn test_big_allocation_1() {
|
||||||
let default_vcpus = 10;
|
let default_vcpus = 10.0;
|
||||||
|
|
||||||
let mut cpu_resource = get_cpu_resource_with_default_vcpus(default_vcpus as i32);
|
let mut cpu_resource = get_cpu_resource_with_default_vcpus(default_vcpus);
|
||||||
add_linux_container_cpu_resources(
|
add_linux_container_cpu_resources(
|
||||||
&mut cpu_resource,
|
&mut cpu_resource,
|
||||||
vec![
|
vec![
|
||||||
@ -289,14 +288,14 @@ mod tests {
|
|||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
cpu_resource.calc_cpu_resources().await.unwrap(),
|
cpu_resource.calc_cpu_resources().await.unwrap(),
|
||||||
128 + default_vcpus
|
128 + default_vcpus as u32
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_big_allocation_2() {
|
async fn test_big_allocation_2() {
|
||||||
let default_vcpus = 10;
|
let default_vcpus = 10.0;
|
||||||
let mut cpu_resource = get_cpu_resource_with_default_vcpus(default_vcpus as i32);
|
let mut cpu_resource = get_cpu_resource_with_default_vcpus(default_vcpus);
|
||||||
add_linux_container_cpu_resources(
|
add_linux_container_cpu_resources(
|
||||||
&mut cpu_resource,
|
&mut cpu_resource,
|
||||||
vec![
|
vec![
|
||||||
@ -309,26 +308,26 @@ mod tests {
|
|||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
cpu_resource.calc_cpu_resources().await.unwrap(),
|
cpu_resource.calc_cpu_resources().await.unwrap(),
|
||||||
(33 + 31 + 77 + 1) + default_vcpus
|
(33 + 31 + 77 + 1) + default_vcpus as u32
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_big_allocation_3() {
|
async fn test_big_allocation_3() {
|
||||||
let default_vcpus = 10;
|
let default_vcpus = 10.0;
|
||||||
let mut cpu_resource = get_cpu_resource_with_default_vcpus(default_vcpus as i32);
|
let mut cpu_resource = get_cpu_resource_with_default_vcpus(default_vcpus);
|
||||||
add_linux_container_cpu_resources(&mut cpu_resource, vec![(141_000_008, 1_000_000)]).await;
|
add_linux_container_cpu_resources(&mut cpu_resource, vec![(141_000_008, 1_000_000)]).await;
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
cpu_resource.calc_cpu_resources().await.unwrap(),
|
cpu_resource.calc_cpu_resources().await.unwrap(),
|
||||||
142 + default_vcpus
|
142 + default_vcpus as u32
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_big_allocation_4() {
|
async fn test_big_allocation_4() {
|
||||||
let default_vcpus = 10;
|
let default_vcpus = 10.0;
|
||||||
let mut cpu_resource = get_cpu_resource_with_default_vcpus(default_vcpus as i32);
|
let mut cpu_resource = get_cpu_resource_with_default_vcpus(default_vcpus);
|
||||||
add_linux_container_cpu_resources(
|
add_linux_container_cpu_resources(
|
||||||
&mut cpu_resource,
|
&mut cpu_resource,
|
||||||
vec![
|
vec![
|
||||||
@ -342,14 +341,14 @@ mod tests {
|
|||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
cpu_resource.calc_cpu_resources().await.unwrap(),
|
cpu_resource.calc_cpu_resources().await.unwrap(),
|
||||||
(4 * 17 + 1) + default_vcpus
|
(4 * 17 + 1) + default_vcpus as u32
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_divisible_periods() {
|
async fn test_divisible_periods() {
|
||||||
let default_vcpus = 3;
|
let default_vcpus = 3.0;
|
||||||
let mut cpu_resource = get_cpu_resource_with_default_vcpus(default_vcpus as i32);
|
let mut cpu_resource = get_cpu_resource_with_default_vcpus(default_vcpus);
|
||||||
add_linux_container_cpu_resources(
|
add_linux_container_cpu_resources(
|
||||||
&mut cpu_resource,
|
&mut cpu_resource,
|
||||||
vec![(1_000_000, 1_000_000), (1_000_000, 500_000)],
|
vec![(1_000_000, 1_000_000), (1_000_000, 500_000)],
|
||||||
@ -358,10 +357,10 @@ mod tests {
|
|||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
cpu_resource.calc_cpu_resources().await.unwrap(),
|
cpu_resource.calc_cpu_resources().await.unwrap(),
|
||||||
3 + default_vcpus
|
3 + default_vcpus as u32
|
||||||
);
|
);
|
||||||
|
|
||||||
let mut cpu_resource = get_cpu_resource_with_default_vcpus(default_vcpus as i32);
|
let mut cpu_resource = get_cpu_resource_with_default_vcpus(default_vcpus);
|
||||||
add_linux_container_cpu_resources(
|
add_linux_container_cpu_resources(
|
||||||
&mut cpu_resource,
|
&mut cpu_resource,
|
||||||
vec![(3_000_000, 1_500_000), (1_000_000, 500_000)],
|
vec![(3_000_000, 1_500_000), (1_000_000, 500_000)],
|
||||||
@ -370,14 +369,14 @@ mod tests {
|
|||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
cpu_resource.calc_cpu_resources().await.unwrap(),
|
cpu_resource.calc_cpu_resources().await.unwrap(),
|
||||||
4 + default_vcpus
|
4 + default_vcpus as u32
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_indivisible_periods() {
|
async fn test_indivisible_periods() {
|
||||||
let default_vcpus = 1;
|
let default_vcpus = 1.0;
|
||||||
let mut cpu_resource = get_cpu_resource_with_default_vcpus(default_vcpus as i32);
|
let mut cpu_resource = get_cpu_resource_with_default_vcpus(default_vcpus);
|
||||||
add_linux_container_cpu_resources(
|
add_linux_container_cpu_resources(
|
||||||
&mut cpu_resource,
|
&mut cpu_resource,
|
||||||
vec![(1_000_000, 1_000_000), (900_000, 300_000)],
|
vec![(1_000_000, 1_000_000), (900_000, 300_000)],
|
||||||
@ -386,10 +385,10 @@ mod tests {
|
|||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
cpu_resource.calc_cpu_resources().await.unwrap(),
|
cpu_resource.calc_cpu_resources().await.unwrap(),
|
||||||
4 + default_vcpus
|
4 + default_vcpus as u32
|
||||||
);
|
);
|
||||||
|
|
||||||
let mut cpu_resource = get_cpu_resource_with_default_vcpus(default_vcpus as i32);
|
let mut cpu_resource = get_cpu_resource_with_default_vcpus(default_vcpus);
|
||||||
add_linux_container_cpu_resources(
|
add_linux_container_cpu_resources(
|
||||||
&mut cpu_resource,
|
&mut cpu_resource,
|
||||||
vec![(1_000_000, 1_000_000), (900_000, 299_999)],
|
vec![(1_000_000, 1_000_000), (900_000, 299_999)],
|
||||||
@ -398,7 +397,7 @@ mod tests {
|
|||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
cpu_resource.calc_cpu_resources().await.unwrap(),
|
cpu_resource.calc_cpu_resources().await.unwrap(),
|
||||||
5 + default_vcpus
|
5 + default_vcpus as u32
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -141,7 +141,7 @@ impl InitialSizeManager {
|
|||||||
.context("failed to get hypervisor config")?;
|
.context("failed to get hypervisor config")?;
|
||||||
|
|
||||||
if self.resource.vcpu > 0 {
|
if self.resource.vcpu > 0 {
|
||||||
hv.cpu_info.default_vcpus = self.resource.vcpu as i32
|
hv.cpu_info.default_vcpus = self.resource.vcpu as f32
|
||||||
}
|
}
|
||||||
self.resource.orig_toml_default_mem = hv.memory_info.default_memory;
|
self.resource.orig_toml_default_mem = hv.memory_info.default_memory;
|
||||||
if self.resource.mem_mb > 0 {
|
if self.resource.mem_mb > 0 {
|
||||||
|
@ -198,7 +198,7 @@ pub struct HypervisorInfo {
|
|||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
enable_iommu_platform: bool,
|
enable_iommu_platform: bool,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
default_vcpus: i32,
|
default_vcpus: f32,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
cpu_features: String,
|
cpu_features: String,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
|
Loading…
Reference in New Issue
Block a user