191fe48d5SPhilipp Schuster#!/usr/bin/env bash 21cf73c83SBo Chenset -x 31cf73c83SBo Chen 42b2d0065SRuslan Mstoi# shellcheck source=/dev/null 52b2d0065SRuslan Mstoisource "$HOME"/.cargo/env 62b2d0065SRuslan Mstoisource "$(dirname "$0")"/test-util.sh 71cf73c83SBo Chen 82b2d0065SRuslan MstoiTEST_ARCH=$(uname -m) 92b2d0065SRuslan Mstoiexport TEST_ARCH 101cf73c83SBo Chen 111cf73c83SBo ChenWORKLOADS_DIR="$HOME/workloads" 121cf73c83SBo Chenmkdir -p "$WORKLOADS_DIR" 131cf73c83SBo Chen 144335e5f8SHenry Wangbuild_fio() { 154335e5f8SHenry Wang FIO_DIR="$WORKLOADS_DIR/fio_build" 164335e5f8SHenry Wang FIO_REPO="https://github.com/axboe/fio.git" 174335e5f8SHenry Wang 184335e5f8SHenry Wang checkout_repo "$FIO_DIR" "$FIO_REPO" master "1953e1adb5a28ed21370e85991d7f5c3cdc699f3" 194335e5f8SHenry Wang if [ ! -f "$FIO_DIR/.built" ]; then 202b2d0065SRuslan Mstoi pushd "$FIO_DIR" || exit 214335e5f8SHenry Wang ./configure 222b2d0065SRuslan Mstoi make -j "$(nproc)" 234335e5f8SHenry Wang cp fio "$WORKLOADS_DIR/fio" 244335e5f8SHenry Wang touch .built 252b2d0065SRuslan Mstoi popd || exit 264335e5f8SHenry Wang fi 274335e5f8SHenry Wang} 284335e5f8SHenry Wang 291cf73c83SBo Chenprocess_common_args "$@" 301cf73c83SBo Chen 312b2d0065SRuslan Mstoicp scripts/sha1sums-"${TEST_ARCH}" "$WORKLOADS_DIR" 321cf73c83SBo Chen 332b2d0065SRuslan Mstoiif [ "${TEST_ARCH}" == "aarch64" ]; then 3430025d76SJianyong Wu FOCAL_OS_IMAGE_NAME="focal-server-cloudimg-arm64-custom-20210929-0.qcow2" 3530025d76SJianyong Wuelse 361cf73c83SBo Chen FOCAL_OS_IMAGE_NAME="focal-server-cloudimg-amd64-custom-20210609-0.qcow2" 3730025d76SJianyong Wufi 3830025d76SJianyong Wu 3905ec6190SRavi kumar VeeramallyFOCAL_OS_IMAGE_URL="https://ch-images.azureedge.net/$FOCAL_OS_IMAGE_NAME" 401cf73c83SBo ChenFOCAL_OS_IMAGE="$WORKLOADS_DIR/$FOCAL_OS_IMAGE_NAME" 411cf73c83SBo Chenif [ ! -f "$FOCAL_OS_IMAGE" ]; then 422b2d0065SRuslan Mstoi pushd "$WORKLOADS_DIR" || exit 431cf73c83SBo Chen time wget --quiet $FOCAL_OS_IMAGE_URL || exit 1 442b2d0065SRuslan Mstoi popd || exit 451cf73c83SBo Chenfi 461cf73c83SBo Chen 472b2d0065SRuslan Mstoiif [ "${TEST_ARCH}" == "aarch64" ]; then 4830025d76SJianyong Wu FOCAL_OS_RAW_IMAGE_NAME="focal-server-cloudimg-arm64-custom-20210929-0.raw" 4930025d76SJianyong Wuelse 501cf73c83SBo Chen FOCAL_OS_RAW_IMAGE_NAME="focal-server-cloudimg-amd64-custom-20210609-0.raw" 5130025d76SJianyong Wufi 5230025d76SJianyong Wu 531cf73c83SBo ChenFOCAL_OS_RAW_IMAGE="$WORKLOADS_DIR/$FOCAL_OS_RAW_IMAGE_NAME" 541cf73c83SBo Chenif [ ! -f "$FOCAL_OS_RAW_IMAGE" ]; then 552b2d0065SRuslan Mstoi pushd "$WORKLOADS_DIR" || exit 561cf73c83SBo Chen time qemu-img convert -p -f qcow2 -O raw $FOCAL_OS_IMAGE_NAME $FOCAL_OS_RAW_IMAGE_NAME || exit 1 572b2d0065SRuslan Mstoi popd || exit 581cf73c83SBo Chenfi 591cf73c83SBo Chen 602b2d0065SRuslan Mstoipushd "$WORKLOADS_DIR" || exit 612b2d0065SRuslan Mstoiif ! grep focal sha1sums-"${TEST_ARCH}" | sha1sum --check; then 621cf73c83SBo Chen echo "sha1sum validation of images failed, remove invalid images to fix the issue." 631cf73c83SBo Chen exit 1 641cf73c83SBo Chenfi 652b2d0065SRuslan Mstoipopd || exit 661cf73c83SBo Chen 672b2d0065SRuslan Mstoiif [ "${TEST_ARCH}" == "aarch64" ]; then 684335e5f8SHenry Wang build_fio 694335e5f8SHenry Wang 704335e5f8SHenry Wang # Update the fio in the cloud image to use io_uring on AArch64 714335e5f8SHenry Wang FOCAL_OS_RAW_IMAGE_UPDATE_TOOL_NAME="focal-server-cloudimg-arm64-custom-20210929-0-update-tool.raw" 724335e5f8SHenry Wang cp "$FOCAL_OS_RAW_IMAGE" "$WORKLOADS_DIR/$FOCAL_OS_RAW_IMAGE_UPDATE_TOOL_NAME" 734335e5f8SHenry Wang FOCAL_OS_RAW_IMAGE_UPDATE_TOOL_ROOT_DIR="$WORKLOADS_DIR/focal-server-cloudimg-root" 744335e5f8SHenry Wang if [ ! -d "$FOCAL_OS_RAW_IMAGE_UPDATE_TOOL_ROOT_DIR" ]; then 754335e5f8SHenry Wang mkdir -p "$FOCAL_OS_RAW_IMAGE_UPDATE_TOOL_ROOT_DIR" 764335e5f8SHenry Wang fi 774335e5f8SHenry Wang # Mount the 'raw' image, replace the fio and umount the working folder 784335e5f8SHenry Wang guestmount -a "$WORKLOADS_DIR/$FOCAL_OS_RAW_IMAGE_UPDATE_TOOL_NAME" -m /dev/sda1 "$FOCAL_OS_RAW_IMAGE_UPDATE_TOOL_ROOT_DIR" || exit 1 794335e5f8SHenry Wang cp "$WORKLOADS_DIR"/fio "$FOCAL_OS_RAW_IMAGE_UPDATE_TOOL_ROOT_DIR"/usr/bin/fio 804335e5f8SHenry Wang guestunmount "$FOCAL_OS_RAW_IMAGE_UPDATE_TOOL_ROOT_DIR" 814335e5f8SHenry Wangfi 824335e5f8SHenry Wang 83*3c05626aSRuoqing He# Prepare linux image (build from source or download pre-built) 84*3c05626aSRuoqing Heprepare_linux 851cf73c83SBo Chen 861cf73c83SBo ChenCFLAGS="" 8730025d76SJianyong Wuif [[ "${BUILD_TARGET}" == "${TEST_ARCH}-unknown-linux-musl" ]]; then 882b2d0065SRuslan Mstoi # shellcheck disable=SC2034 8930025d76SJianyong Wu CFLAGS="-I /usr/include/${TEST_ARCH}-linux-musl/ -idirafter /usr/include/" 901cf73c83SBo Chenfi 911cf73c83SBo Chen 922b2d0065SRuslan Mstoicargo build --features mshv --all --release --target "$BUILD_TARGET" 931cf73c83SBo Chen 941cf73c83SBo Chen# setup hugepages 95318caeb9SRuslan MstoiHUGEPAGESIZE=$(grep Hugepagesize /proc/meminfo | awk '{print $2}') 962b2d0065SRuslan MstoiPAGE_NUM=$((12288 * 1024 / HUGEPAGESIZE)) 972b2d0065SRuslan Mstoiecho "$PAGE_NUM" | sudo tee /proc/sys/vm/nr_hugepages 981cf73c83SBo Chensudo chmod a+rwX /dev/hugepages 991cf73c83SBo Chen 1001f077e78SRob Bradfordif [ -n "$test_filter" ]; then 1011f077e78SRob Bradford test_binary_args+=("--test-filter $test_filter") 1021f077e78SRob Bradfordfi 1031f077e78SRob Bradford 104f1ea6947SRob Bradford# Ensure that git commands can be run in this directory (for metrics report) 1052b2d0065SRuslan Mstoigit config --global --add safe.directory "$PWD" 106f1ea6947SRob Bradford 1072b2d0065SRuslan MstoiRUST_BACKTRACE_VALUE=$RUST_BACKTRACE 1082b2d0065SRuslan Mstoiif [ -z "$RUST_BACKTRACE_VALUE" ]; then 1091cf73c83SBo Chen export RUST_BACKTRACE=1 110b56da6eeSsmit-gardhariyaelse 111b56da6eeSsmit-gardhariya echo "RUST_BACKTRACE is set to: $RUST_BACKTRACE_VALUE" 112b56da6eeSsmit-gardhariyafi 1132b2d0065SRuslan Mstoi# shellcheck disable=SC2048,SC2086 1142b2d0065SRuslan Mstoitime target/"$BUILD_TARGET"/release/performance-metrics ${test_binary_args[*]} 1151cf73c83SBo ChenRES=$? 1161cf73c83SBo Chen 1171cf73c83SBo Chenexit $RES 118