mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2026-08-05 02:19:16 +00:00
ci: Enable baremetal VFIO integration tests
Relying on a NVIDIA Tesla T4 card present in the SGX machine, this patch enables baremetal VFIO testing, validated by running several NVIDIA tools in the guest. The guest image has been prepared to include all the software needed to run these tests. Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
This commit is contained in:
committed by
Rob Bradford
parent
d0c0a98eda
commit
04dc496808
@@ -88,6 +88,8 @@ mod tests {
|
||||
const FOCAL_IMAGE_NAME: &str = "focal-server-cloudimg-amd64-custom-20210106-1.raw";
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
const FOCAL_SGX_IMAGE_NAME: &str = "focal-server-cloudimg-amd64-sgx.raw";
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
const FOCAL_NVIDIA_IMAGE_NAME: &str = "focal-server-cloudimg-amd64-nvidia.raw";
|
||||
#[cfg(target_arch = "aarch64")]
|
||||
const BIONIC_IMAGE_NAME: &str = "bionic-server-cloudimg-arm64.raw";
|
||||
#[cfg(target_arch = "aarch64")]
|
||||
@@ -6323,4 +6325,65 @@ mod tests {
|
||||
handle_child_output(r, &output);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
mod vfio {
|
||||
use crate::tests::*;
|
||||
|
||||
#[test]
|
||||
fn test_nvidia_card() {
|
||||
let mut focal = UbuntuDiskConfig::new(FOCAL_NVIDIA_IMAGE_NAME.to_string());
|
||||
let guest = Guest::new(&mut focal);
|
||||
|
||||
let mut child = GuestCommand::new(&guest)
|
||||
.args(&["--cpus", "boot=4"])
|
||||
.args(&["--memory", "size=4G"])
|
||||
.args(&["--kernel", guest.fw_path.as_str()])
|
||||
.args(&["--device", "path=/sys/bus/pci/devices/0000:31:00.0/"])
|
||||
.default_disks()
|
||||
.default_net()
|
||||
.capture_output()
|
||||
.spawn()
|
||||
.unwrap();
|
||||
|
||||
let r = std::panic::catch_unwind(|| {
|
||||
guest.wait_vm_boot(None).unwrap();
|
||||
|
||||
// Run CUDA sample to validate it can find the device
|
||||
let device_query_result = guest
|
||||
.ssh_command(
|
||||
"sudo /root/NVIDIA_CUDA-11.2_Samples/bin/x86_64/linux/release/deviceQuery",
|
||||
)
|
||||
.unwrap();
|
||||
assert!(device_query_result.contains("Detected 1 CUDA Capable device"));
|
||||
assert!(device_query_result.contains("Device 0: \"Tesla T4\""));
|
||||
assert!(device_query_result.contains("Result = PASS"));
|
||||
|
||||
// Run NVIDIA DCGM Diagnostics to validate the device is functional
|
||||
assert_eq!(
|
||||
guest
|
||||
.ssh_command("sudo nv-hostengine && echo ok")
|
||||
.unwrap()
|
||||
.trim(),
|
||||
"ok"
|
||||
);
|
||||
assert!(guest
|
||||
.ssh_command("sudo dcgmi discovery -l")
|
||||
.unwrap()
|
||||
.contains("Name: Tesla T4"));
|
||||
assert_eq!(
|
||||
guest
|
||||
.ssh_command("sudo dcgmi diag -r 'diagnostic' | grep Pass | wc -l")
|
||||
.unwrap()
|
||||
.trim(),
|
||||
"10"
|
||||
);
|
||||
});
|
||||
|
||||
let _ = child.kill();
|
||||
let output = child.wait_with_output().unwrap();
|
||||
|
||||
handle_child_output(r, &output);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user