MCPcopy Create free account
hub / github.com/cloud-hypervisor/cloud-hypervisor / test_cpu_hotplug

Function test_cpu_hotplug

cloud-hypervisor/tests/integration.rs:2687–2767  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

2685 #[cfg(not(feature = "mshv"))] // See issue #7435
2686 #[cfg(target_arch = "x86_64")]
2687 fn test_cpu_hotplug() {
2688 let disk_config = UbuntuDiskConfig::new(JAMMY_IMAGE_NAME.to_string());
2689 let guest = Guest::new(Box::new(disk_config));
2690 let api_socket = temp_api_path(&guest.tmp_dir);
2691 let console_str = "console=ttyS0";
2692
2693 let kernel_path = direct_kernel_boot_path();
2694
2695 let mut child = GuestCommand::new(&guest)
2696 .args(["--cpus", "boot=2,max=4"])
2697 .default_memory()
2698 .args(["--kernel", kernel_path.to_str().unwrap()])
2699 .args([
2700 "--cmdline",
2701 DIRECT_KERNEL_BOOT_CMDLINE
2702 .replace("console=hvc0", console_str)
2703 .as_str(),
2704 ])
2705 .args(["--serial", "tty"])
2706 .args(["--console", "off"])
2707 .default_disks()
2708 .default_net()
2709 .args(["--api-socket", &api_socket])
2710 .capture_output()
2711 .spawn()
2712 .unwrap();
2713
2714 let r = std::panic::catch_unwind(|| {
2715 guest.wait_vm_boot().unwrap();
2716
2717 assert_eq!(guest.get_cpu_count().unwrap_or_default(), 2);
2718
2719 // Resize the VM
2720 let desired_vcpus = 4;
2721 resize_command(&api_socket, Some(desired_vcpus), None, None, None);
2722
2723 guest
2724 .ssh_command("echo 1 | sudo tee /sys/bus/cpu/devices/cpu2/online")
2725 .unwrap();
2726 guest
2727 .ssh_command("echo 1 | sudo tee /sys/bus/cpu/devices/cpu3/online")
2728 .unwrap();
2729 assert!(wait_until(Duration::from_secs(10), || {
2730 guest.get_cpu_count().unwrap_or_default() == u32::from(desired_vcpus)
2731 }));
2732
2733 guest.reboot_linux(0);
2734
2735 assert_eq!(
2736 guest.get_cpu_count().unwrap_or_default(),
2737 u32::from(desired_vcpus)
2738 );
2739
2740 // Resize the VM
2741 let desired_vcpus = 2;
2742 resize_command(&api_socket, Some(desired_vcpus), None, None, None);
2743
2744 assert!(wait_until(Duration::from_secs(10), || {

Callers

nothing calls this directly

Calls 15

newFunction · 0.85
temp_api_pathFunction · 0.85
direct_kernel_boot_pathFunction · 0.85
resize_commandFunction · 0.85
kill_childFunction · 0.85
handle_child_outputFunction · 0.85
spawnMethod · 0.80
capture_outputMethod · 0.80
argsMethod · 0.80
default_netMethod · 0.80
default_disksMethod · 0.80
default_memoryMethod · 0.80

Tested by

no test coverage detected