xref: /cloud-hypervisor/scripts/run_integration_tests_vfio.sh (revision 5a9dd7489cdd27ad83b278ae94609214350b07b1)
1#!/bin/bash
2set -x
3
4source $HOME/.cargo/env
5source $(dirname "$0")/test-util.sh
6
7process_common_args "$@"
8
9WORKLOADS_DIR="$HOME/workloads"
10mkdir -p "$WORKLOADS_DIR"
11
12cp scripts/sha1sums-x86_64 $WORKLOADS_DIR
13
14FW_URL=$(curl --silent https://api.github.com/repos/cloud-hypervisor/rust-hypervisor-firmware/releases/latest | grep "browser_download_url" | grep -o 'https://.*[^ "]')
15FW="$WORKLOADS_DIR/hypervisor-fw"
16if [ ! -f "$FW" ]; then
17    pushd $WORKLOADS_DIR
18    time wget --quiet $FW_URL || exit 1
19    popd
20fi
21
22FOCAL_OS_IMAGE_NAME="focal-server-cloudimg-amd64-custom-20210609-0.qcow2"
23FOCAL_OS_IMAGE_URL="https://cloud-hypervisor.azureedge.net/$FOCAL_OS_IMAGE_NAME"
24FOCAL_OS_IMAGE="$WORKLOADS_DIR/$FOCAL_OS_IMAGE_NAME"
25if [ ! -f "$FOCAL_OS_IMAGE" ]; then
26    pushd $WORKLOADS_DIR
27    time wget --quiet $FOCAL_OS_IMAGE_URL || exit 1
28    popd
29fi
30
31FOCAL_OS_RAW_IMAGE_NAME="focal-server-cloudimg-amd64-custom-20210609-0.raw"
32FOCAL_OS_RAW_IMAGE="$WORKLOADS_DIR/$FOCAL_OS_RAW_IMAGE_NAME"
33if [ ! -f "$FOCAL_OS_RAW_IMAGE" ]; then
34    pushd $WORKLOADS_DIR
35    time qemu-img convert -p -f qcow2 -O raw $FOCAL_OS_IMAGE_NAME $FOCAL_OS_RAW_IMAGE_NAME || exit 1
36    popd
37fi
38
39pushd $WORKLOADS_DIR
40sha1sum sha1sums-x86_64 --check --ignore-missing
41if [ $? -ne 0 ]; then
42    echo "sha1sum validation of images failed, remove invalid images to fix the issue."
43    exit 1
44fi
45popd
46
47VMLINUX_IMAGE="$WORKLOADS_DIR/vmlinux"
48build_custom_linux
49
50BLK_IMAGE="$WORKLOADS_DIR/blk.img"
51MNT_DIR="mount_image"
52rm -rf $BLK_IMAGE
53pushd $WORKLOADS_DIR
54fallocate -l 16M $BLK_IMAGE
55mkfs.ext4 -j $BLK_IMAGE
56mkdir $MNT_DIR
57sudo mount -t ext4 $BLK_IMAGE $MNT_DIR
58sudo bash -c "echo bar > $MNT_DIR/foo" || exit 1
59sudo umount $BLK_IMAGE
60rm -r $MNT_DIR
61popd
62
63VFIO_DIR="$WORKLOADS_DIR/vfio"
64VFIO_DISK_IMAGE="$WORKLOADS_DIR/vfio.img"
65rm -rf $VFIO_DIR $VFIO_DISK_IMAGE
66mkdir -p $VFIO_DIR
67cp $FOCAL_OS_RAW_IMAGE $VFIO_DIR
68cp $FW $VFIO_DIR
69cp $VMLINUX_IMAGE $VFIO_DIR || exit 1
70
71BUILD_TARGET="$(uname -m)-unknown-linux-${CH_LIBC}"
72CFLAGS=""
73TARGET_CC=""
74if [[ "${BUILD_TARGET}" == "x86_64-unknown-linux-musl" ]]; then
75TARGET_CC="musl-gcc"
76CFLAGS="-I /usr/include/x86_64-linux-musl/ -idirafter /usr/include/"
77fi
78
79cargo build --no-default-features --features "kvm,mshv" --all --release --target $BUILD_TARGET
80
81# We always copy a fresh version of our binary for our L2 guest.
82cp target/$BUILD_TARGET/release/cloud-hypervisor $VFIO_DIR
83cp target/$BUILD_TARGET/release/ch-remote $VFIO_DIR
84
85# test_vfio rely on hugepages
86HUGEPAGESIZE=`grep Hugepagesize /proc/meminfo | awk '{print $2}'`
87PAGE_NUM=`echo $((12288 * 1024 / $HUGEPAGESIZE))`
88echo $PAGE_NUM | sudo tee /proc/sys/vm/nr_hugepages
89sudo chmod a+rwX /dev/hugepages
90
91export RUST_BACKTRACE=1
92time cargo test "vfio::test_nvidia" -- --test-threads=1 ${test_binary_args[*]}
93RES=$?
94
95exit $RES
96