From 4ef702ea76ff813c11e94fbd8309170ff3a9f09c Mon Sep 17 00:00:00 2001 From: Rob Bradford Date: Tue, 11 Aug 2020 16:52:56 +0100 Subject: [PATCH] tests: Use a disk image for test_vfio rather than virtio-fs This reduces the complexity of the test slightly. The PCI BDFs in the L1 needed changing as the block devices come before the network ones. Signed-off-by: Rob Bradford --- scripts/run_integration_tests_x86_64.sh | 3 +- test_data/cloud-init/ubuntu/user-data | 8 ++-- tests/integration.rs | 50 ++++++++++++++++--------- 3 files changed, 39 insertions(+), 22 deletions(-) diff --git a/scripts/run_integration_tests_x86_64.sh b/scripts/run_integration_tests_x86_64.sh index 2d3e294c4..5378c8c7b 100755 --- a/scripts/run_integration_tests_x86_64.sh +++ b/scripts/run_integration_tests_x86_64.sh @@ -160,7 +160,8 @@ if [ ! -d "$SHARED_DIR" ]; then fi VFIO_DIR="$WORKLOADS_DIR/vfio" -rm -rf $VFIO_DIR +VFIO_DISK_IMAGE="$WORKLOADS_DIR/vfio.img" +rm -rf $VFIO_DIR $VFIO_DISK_IMAGE mkdir -p $VFIO_DIR cp $FOCAL_OS_IMAGE $VFIO_DIR cp $FW $VFIO_DIR diff --git a/test_data/cloud-init/ubuntu/user-data b/test_data/cloud-init/ubuntu/user-data index 954bcc4d9..e9e65e639 100644 --- a/test_data/cloud-init/ubuntu/user-data +++ b/test_data/cloud-init/ubuntu/user-data @@ -30,12 +30,12 @@ write_files: content: | #!/bin/bash - mount -t virtiofs -o dax myfs /mnt - bash -c "echo 0000:00:05.0 > /sys/bus/pci/devices/0000\:00\:05.0/driver/unbind" - bash -c "echo 1af4 1041 > /sys/bus/pci/drivers/vfio-pci/new_id" + mount /dev/vdc /mnt bash -c "echo 0000:00:06.0 > /sys/bus/pci/devices/0000\:00\:06.0/driver/unbind" bash -c "echo 1af4 1041 > /sys/bus/pci/drivers/vfio-pci/new_id" + bash -c "echo 0000:00:07.0 > /sys/bus/pci/devices/0000\:00\:07.0/driver/unbind" + bash -c "echo 1af4 1041 > /sys/bus/pci/drivers/vfio-pci/new_id" # 1G ram requires 512 pages echo 512 | sudo tee /proc/sys/vm/nr_hugepages sudo chmod a+rwX /dev/hugepages - /mnt/cloud-hypervisor --kernel /mnt/vmlinux --cmdline "console=hvc0 reboot=k panic=1 nomodules i8042.noaux i8042.nomux i8042.nopnp i8042.dumbkbd root=/dev/vda1 VFIOTAG" --disk path=/mnt/focal-server-cloudimg-amd64-custom.qcow2 path=/mnt/cloudinit.img --cpus boot=1 --memory size=512M,hotplug_size=1G,file=/dev/hugepages --device path=/sys/bus/pci/devices/0000:00:05.0/ path=/sys/bus/pci/devices/0000:00:06.0/ --api-socket /tmp/ch_api.sock + /mnt/cloud-hypervisor --kernel /mnt/vmlinux --cmdline "console=hvc0 reboot=k panic=1 nomodules i8042.noaux i8042.nomux i8042.nopnp i8042.dumbkbd root=/dev/vda1 VFIOTAG" --disk path=/mnt/focal-server-cloudimg-amd64-custom.qcow2 path=/mnt/cloudinit.img --cpus boot=1 --memory size=512M,hotplug_size=1G,file=/dev/hugepages --device path=/sys/bus/pci/devices/0000:00:06.0/ path=/sys/bus/pci/devices/0000:00:07.0/ --api-socket /tmp/ch_api.sock diff --git a/tests/integration.rs b/tests/integration.rs index 0c60bccf6..51bdd31e2 100644 --- a/tests/integration.rs +++ b/tests/integration.rs @@ -3247,7 +3247,7 @@ mod tests { let mut kernel_path = workload_path.clone(); kernel_path.push("bzImage"); - let mut vfio_path = workload_path; + let mut vfio_path = workload_path.clone(); vfio_path.push("vfio"); let mut cloud_init_vfio_base_path = vfio_path.clone(); @@ -3261,19 +3261,45 @@ mod tests { ) .expect("copying of cloud-init disk failed"); + let mut vfio_disk_path = workload_path; + vfio_disk_path.push("vfio.img"); + + // Create the vfio disk image + let output = Command::new("mkfs.ext4") + .arg("-d") + .arg(vfio_path.to_str().unwrap()) + .arg(vfio_disk_path.to_str().unwrap()) + .arg("2g") + .output() + .unwrap(); + if !output.status.success() { + eprintln!("{}", String::from_utf8_lossy(&output.stderr)); + panic!("mkfs.ext4 command generated an error"); + } + let vfio_tap0 = "vfio-tap0"; let vfio_tap1 = "vfio-tap1"; let vfio_tap2 = "vfio-tap2"; let vfio_tap3 = "vfio-tap3"; - let (mut daemon_child, virtiofsd_socket_path) = - prepare_virtiofsd(&guest.tmp_dir, vfio_path.to_str().unwrap(), "none"); - let mut child = GuestCommand::new(&guest) .args(&["--cpus", "boot=4"]) .args(&["--memory", "size=2G,hugepages=on,shared=on"]) .args(&["--kernel", kernel_path.to_str().unwrap()]) - .default_disks() + .args(&[ + "--disk", + format!( + "path={}", + guest.disk_config.disk(DiskType::OperatingSystem).unwrap() + ) + .as_str(), + format!( + "path={}", + guest.disk_config.disk(DiskType::CloudInit).unwrap() + ) + .as_str(), + format!("path={}", vfio_disk_path.to_str().unwrap()).as_str(), + ]) .args(&[ "--cmdline", format!( @@ -3301,14 +3327,6 @@ mod tests { ) .as_str(), ]) - .args(&[ - "--fs", - format!( - "tag=myfs,socket={},num_queues=1,queue_size=1024,dax=on", - virtiofsd_socket_path, - ) - .as_str(), - ]) .spawn() .unwrap(); @@ -3360,7 +3378,7 @@ mod tests { // Hotplug an extra virtio-net device through L2 VM. guest.ssh_command_l1( - "echo 0000:00:07.0 | sudo tee /sys/bus/pci/devices/0000:00:07.0/driver/unbind", + "echo 0000:00:08.0 | sudo tee /sys/bus/pci/devices/0000:00:08.0/driver/unbind", )?; guest.ssh_command_l1( "echo 1af4 1041 | sudo tee /sys/bus/pci/drivers/vfio-pci/new_id", @@ -3368,7 +3386,7 @@ mod tests { let vfio_hotplug_output = guest.ssh_command_l1( "sudo /mnt/ch-remote \ --api-socket=/tmp/ch_api.sock \ - add-device path=/sys/bus/pci/devices/0000:00:07.0,id=vfio123", + add-device path=/sys/bus/pci/devices/0000:00:08.0,id=vfio123", )?; aver!( tb, @@ -3450,9 +3468,7 @@ mod tests { ); let _ = child.kill(); - let _ = daemon_child.kill(); let _ = child.wait(); - let _ = daemon_child.wait(); Ok(()) });