From bd0ee6236a5c8a8af4a19e39206211772d19942e Mon Sep 17 00:00:00 2001 From: Bo Chen Date: Tue, 31 Oct 2023 11:56:05 -0700 Subject: [PATCH] scripts: Simplify the script for running bare-metal VFIO tests The script "run_integration_tests_vfio.sh" requires to be ran on a specific machine with specific hardware (e.g. the "vfio" bera-metal worker equipped with a Nvidia Tesla T4 card). So the provisioning of the running machine is out of the scope of this script, including the custom guest image with Nvidia drivers installed, and properly configured Nvidia Tesla T4 card. See: #4405, #5509 Signed-off-by: Bo Chen --- scripts/run_integration_tests_vfio.sh | 81 +++------------------------ 1 file changed, 9 insertions(+), 72 deletions(-) diff --git a/scripts/run_integration_tests_vfio.sh b/scripts/run_integration_tests_vfio.sh index 0ded6a6df..dc6dcfa85 100755 --- a/scripts/run_integration_tests_vfio.sh +++ b/scripts/run_integration_tests_vfio.sh @@ -1,73 +1,25 @@ #!/bin/bash set -x +# This set of vfio tests require to be ran on a specific machine with +# specific hardware (e.g. the "vfio" bera-metal worker equipped with a +# Nvidia Tesla T4 card). So the provisioning of the running machine is +# out of the scope of this script, including the custom guest image with +# Nvidia drivers installed, and properly configured Nvidia Tesla T4 card. + source $HOME/.cargo/env source $(dirname "$0")/test-util.sh process_common_args "$@" WORKLOADS_DIR="$HOME/workloads" -mkdir -p "$WORKLOADS_DIR" - -cp scripts/sha1sums-x86_64 $WORKLOADS_DIR +# Always download the latest "hypervisor-fw" FW_URL=$(curl --silent https://api.github.com/repos/cloud-hypervisor/rust-hypervisor-firmware/releases/latest | grep "browser_download_url" | grep -o 'https://.*[^ "]') -FW="$WORKLOADS_DIR/hypervisor-fw" -if [ ! -f "$FW" ]; then - pushd $WORKLOADS_DIR - time wget --quiet $FW_URL || exit 1 - popd -fi - -FOCAL_OS_IMAGE_NAME="focal-server-cloudimg-amd64-custom-20210609-0.qcow2" -FOCAL_OS_IMAGE_URL="https://cloud-hypervisor.azureedge.net/$FOCAL_OS_IMAGE_NAME" -FOCAL_OS_IMAGE="$WORKLOADS_DIR/$FOCAL_OS_IMAGE_NAME" -if [ ! -f "$FOCAL_OS_IMAGE" ]; then - pushd $WORKLOADS_DIR - time wget --quiet $FOCAL_OS_IMAGE_URL || exit 1 - popd -fi - -FOCAL_OS_RAW_IMAGE_NAME="focal-server-cloudimg-amd64-custom-20210609-0.raw" -FOCAL_OS_RAW_IMAGE="$WORKLOADS_DIR/$FOCAL_OS_RAW_IMAGE_NAME" -if [ ! -f "$FOCAL_OS_RAW_IMAGE" ]; then - pushd $WORKLOADS_DIR - time qemu-img convert -p -f qcow2 -O raw $FOCAL_OS_IMAGE_NAME $FOCAL_OS_RAW_IMAGE_NAME || exit 1 - popd -fi - pushd $WORKLOADS_DIR -sha1sum sha1sums-x86_64 --check --ignore-missing -if [ $? -ne 0 ]; then - echo "sha1sum validation of images failed, remove invalid images to fix the issue." - exit 1 -fi +time wget --quiet $FW_URL -O hypervisor-fw || exit 1 popd -VMLINUX_IMAGE="$WORKLOADS_DIR/vmlinux" -build_custom_linux - -BLK_IMAGE="$WORKLOADS_DIR/blk.img" -MNT_DIR="mount_image" -rm -rf $BLK_IMAGE -pushd $WORKLOADS_DIR -fallocate -l 16M $BLK_IMAGE -mkfs.ext4 -j $BLK_IMAGE -mkdir $MNT_DIR -sudo mount -t ext4 $BLK_IMAGE $MNT_DIR -sudo bash -c "echo bar > $MNT_DIR/foo" || exit 1 -sudo umount $BLK_IMAGE -rm -r $MNT_DIR -popd - -VFIO_DIR="$WORKLOADS_DIR/vfio" -VFIO_DISK_IMAGE="$WORKLOADS_DIR/vfio.img" -rm -rf $VFIO_DIR $VFIO_DISK_IMAGE -mkdir -p $VFIO_DIR -cp $FOCAL_OS_RAW_IMAGE $VFIO_DIR -cp $FW $VFIO_DIR -cp $VMLINUX_IMAGE $VFIO_DIR || exit 1 - CFLAGS="" if [[ "${BUILD_TARGET}" == "x86_64-unknown-linux-musl" ]]; then CFLAGS="-I /usr/include/x86_64-linux-musl/ -idirafter /usr/include/" @@ -75,23 +27,8 @@ fi cargo build --features mshv --all --release --target $BUILD_TARGET -# We always copy a fresh version of our binary for our L2 guest. -cp target/$BUILD_TARGET/release/cloud-hypervisor $VFIO_DIR -cp target/$BUILD_TARGET/release/ch-remote $VFIO_DIR - -# test_vfio rely on hugepages -HUGEPAGESIZE=`grep Hugepagesize /proc/meminfo | awk '{print $2}'` -PAGE_NUM=`echo $((12288 * 1024 / $HUGEPAGESIZE))` -echo $PAGE_NUM | sudo tee /proc/sys/vm/nr_hugepages -sudo chmod a+rwX /dev/hugepages - export RUST_BACKTRACE=1 -time cargo test "vfio::test_vfio" -- ${test_binary_args[*]} +time cargo test "vfio::test_nvidia" -- --test-threads=1 ${test_binary_args[*]} RES=$? -if [ $RES -eq 0 ]; then - time cargo test "vfio::test_nvidia" -- --test-threads=1 ${test_binary_args[*]} - RES=$? -fi - exit $RES