Commit bab64051 authored by Karol Latecki's avatar Karol Latecki Committed by Jim Harris
Browse files

test/vhost: update filesystem integrity test



Updates for running with vhost-blk.
Removed checking & cloning Qemu sources - should be
already installed in working directory.
Some other minor fixes for typos.

Change-Id: Ifd790a301c8ca1e19434f03ba32f5eb916dbe0a6
Signed-off-by: default avatarKarol Latecki <karol.latecki@intel.com>
Reviewed-on: https://review.gerrithub.io/373897


Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarPawel Wodkowski <pawelx.wodkowski@intel.com>
Reviewed-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent de191b8f
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -63,6 +63,6 @@
    <qemu:arg value='-chardev'/>
    <qemu:arg value='socket,id=char0,path=/tmp/naa.0'/>
        <qemu:arg value='-device'/>
    <qemu:arg value='vhost-user-scsi-pci,id=scsi0,chardev=char0'/>
    <qemu:arg value='vhost_dev_args,chardev=char0'/>
    </qemu:commandline>
</domain>
+73 −69
Original line number Diff line number Diff line
#!/usr/bin/env bash

set -xe

basedir=$(readlink -f $(dirname $0))
rootdir=$(readlink -f $basedir/../../..)
testdir=$(readlink -f $rootdir/..)
qemu_src_dir="$testdir/qemu"
qemu_build_dir="$testdir/qemu/build"
qemu_install_dir="$testdir/root"
MAKE="make -j$(( $(nproc)  * 2 ))"

rpc_py="python $rootdir/scripts/rpc.py "
rpc_py+="-s 127.0.0.1 "
RPC_PORT=5260
HOST_IP=192.200.200.1
VM_IP=192.200.200.254
VM_UNAME="root"
VM_PASS="root"
VM_NAME="int_test_vm"
VM_NET_NAME="int_test_net"
VM_MAC="02:de:ad:de:ad:01"
VM_BAK_IMG="/tmp/int_test_backing.img"
TIMEO=60
SSHCMD="sshpass -p $VM_PASS ssh"
SCPCMD="sshpass -p $VM_PASS scp"

while getopts 'i:m:f:' optchar; do
    case $optchar in
        i) VM_IMG="${OPTARG#*=}" ;;
        m) VHOST_MODE="${OPTARG#*=}" ;;
        f) VM_FS="${OPTARG#*=}" ;;
    esac
done

source $rootdir/scripts/autotest_common.sh

if [ -z "$VM_IMG" ]; then
@@ -15,9 +38,8 @@ if [ -z "$VM_IMG" ]; then
    exit 1
fi

if [ -z "$VM_QEMU" ]; then
    echo "INFO: VM_QEMU: path to qemu binary not provided"
    echo "INFO: Will use qemu from repository"
if [ -z "$VHOST_MODE" ]; then
    echo "ERROR: VHOST_MODE: please specify Vhost mode - scsi or blk"
fi

if [ -z "$VM_FS" ]; then
@@ -25,60 +47,40 @@ if [ -z "$VM_FS" ]; then
    echo "INFO: Using default value for filesystem: $VM_FS"
fi

HOST_IP=192.200.200.1
VM_IP=192.200.200.254
VM_UNAME="root"
VM_PASS="root"
VM_NAME="int_test_vm"
VM_NET_NAME="int_test_net"
VM_MAC="02:de:ad:de:ad:01"
VM_BAK_IMG="/tmp/int_test_backing.img"
TIMEO=60
SSHCMD="sshpass -p $VM_PASS ssh"
SCPCMD="sshpass -p $VM_PASS scp"
# Check if Qemu binary is present
if [[ -z $VM_QEMU ]]; then
    VM_QEMU="$qemu_install_dir/bin/qemu-system-x86_64"
fi

echo "FS: $VM_FS"
if [[ ! -x $VM_QEMU ]]; then
    echo "ERROR: QEMU binary not present in $VM_QEMU"
fi

echo "Running test with filesystem: $VM_FS"

function cleanup_virsh() {
    virsh shutdown $VM_NAME || true
    sleep 5
    virsh net-destroy $VM_NET_NAME || true
    if virsh domstate $VM_NAME; then
        virsh shutdown $VM_NAME
        for timeo in `seq 0 10`; do
            if ! virsh domstate $VM_NAME; then
                break
            fi
            if [[ $timeo -eq 10 ]]; then
                echo "ERROR: VM did not shutdown, killing!"
                virsh destroy $VM_NAME
            fi
            sleep 1
        done
    fi

    if virsh net-info $VM_NET_NAME; then
        virsh net-destroy $VM_NET_NAME
    fi
    rm $VM_BAK_IMG || true
}

timing_enter integrity_test

# If no VM_QEMU argument is given - check if needed qemu is installed
echo "INFO: Checking qemu..."
if [[ ! -d $qemu_src_dir && -z "$VM_QEMU" ]]; then
    echo "INFO: Cloning $qemu_src_dir"
    rm -rf $qemu_src_dir
    mkdir -p $qemu_src_dir
    cd $(dirname $qemu_src_dir)
    git clone -b dev/vhost_scsi ssh://az-sg-sw01.ch.intel.com:29418/qemu
    echo "INFO: Cloning Qemu Done"
else
    echo "INFO: Qemu source exist $qemu_src_dir - not cloning"
fi

# Check if Qemu binary is present; build it if not
if [[ ! -x $qemu_install_dir/bin/qemu-system-x86_64 && -z "$VM_QEMU" ]]; then
    echo "INFO: Can't find $qemu_install_dir/bin/qemu-system-x86_64 - building and installing"
    mkdir -p $qemu_build_dir
    cd $qemu_build_dir

    $qemu_src_dir/configure --prefix=$qemu_install_dir \
    --target-list="x86_64-softmmu" \
    --enable-kvm --enable-linux-aio --enable-numa

    echo "INFO: Compiling and installing QEMU in $qemu_install_dir"
    $MAKE install
    VM_QEMU="$qemu_install_dir/bin/qemu-system-x86_64"
    echo "INFO: DONE"
elif [[ -z "$VM_QEMU" ]]; then
    VM_QEMU="$qemu_install_dir/bin/qemu-system-x86_64"
fi

# Backing image for VM
qemu-img create -f qcow2 -o backing_file=$VM_IMG $VM_BAK_IMG

@@ -95,6 +97,11 @@ sed -i "s@<emulator></emulator>@<emulator>$VM_QEMU</emulator>@g" $basedir/vm_con
sed -i "s@mac address=''@mac address='$VM_MAC'@g" $basedir/vm_conf.xml
sed -i "s@source network=''@source network='$VM_NET_NAME'@g" $basedir/vm_conf.xml
sed -i "s@<name></name>@<name>$VM_NET_NAME</name>@g" $basedir/vnet_conf.xml
if [[ "$VHOST_MODE" == "scsi" ]]; then
    sed -i "s@vhost_dev_args@vhost-user-scsi-pci,id=scsi0@g" $basedir/vm_conf.xml
else
    sed -i "s@vhost_dev_args@vhost-user-blk-pci,size=30G,logical_block_size=4096@g" $basedir/vm_conf.xml
fi

trap "cleanup_virsh; killprocess $pid; exit 1" SIGINT SIGTERM EXIT

@@ -106,34 +113,31 @@ cd /tmp
$rootdir/app/vhost/vhost -c $basedir/vhost.conf &
pid=$!
echo "Process pid: $pid"
sleep 10
waitforlisten "$pid" "$RPC_PORT"
if [[ "$VHOST_MODE" == "scsi" ]]; then
    $rpc_py construct_vhost_scsi_controller naa.0
    $rpc_py add_vhost_scsi_lun naa.0 0 Nvme0n1
else
    $rpc_py construct_vhost_blk_controller naa.0 Nvme0n1
fi
chmod 777 /tmp/naa.0

virsh create $basedir/vm_conf.xml
virsh net-update $VM_NET_NAME add ip-dhcp-host "<host mac='$VM_MAC' name='$VM_NAME' ip='$VM_IP'/>"

# Wait for VM to boot, disable trap temporarily
# so that we don't exit on first fail
# Wait for VM to boot
echo "INFO: Trying to connect to virtual machine..."
trap - SIGINT SIGTERM EXIT
set +xe
rc=-1
while [[ $TIMEO -gt 0 && rc -ne 0 ]]; do
    $SSHCMD root@$VM_IP -q -oStrictHostKeyChecking=no 'echo Hello'
    rc=$?
    ((TIMEO-=1))
done
set -xe
trap "cleanup_virsh; killprocess $pid; exit 1" SIGINT SIGTERM EXIT

if [[ $TIMEO -eq 0  ||  rc -ne 0 ]]; then
while ! $SSHCMD root@$VM_IP -q -oStrictHostKeyChecking=no 'echo Hello'; do
    sleep 1
    if ! (( TIMEO-=1 ));then
        echo "ERROR: VM did not boot properly, exiting"
        exit 1
    fi
done

# Run test on Virtual Machine
$SCPCMD -r $basedir/integrity_vm.sh root@$VM_IP:~
$SSHCMD root@$VM_IP "fs=$VM_FS ~/integrity_vm.sh"
$SSHCMD root@$VM_IP "fs=$VM_FS ~/integrity_vm.sh $VHOST_MODE"

# Kill VM, cleanup config files
cleanup_virsh
+14 −15
Original line number Diff line number Diff line
@@ -4,16 +4,16 @@ set -xe
basedir=$(readlink -f $(dirname $0))
MAKE="make -j$(( $(nproc)  * 2 ))"

script='shopt -s nullglob; \
    for entry in /sys/block/sd*; do \
        disk_type="$(cat $entry/device/vendor)"; \
           if [[ $disk_type == INTEL* ]] || [[ $disk_type == RAWSCSI* ]] || [[ $disk_type == LIO-ORG* ]]; then \
                fname=$(basename $entry); \
                echo -n "$fname "; \
           fi; \
    done'

devs="$(echo "$script" | bash -s)"
if [[ $1 == "scsi" ]]; then
    devs=""
    for entry in /sys/block/sd*; do
        if grep -Eq '(INTEL|RAWSCSI|LIO-ORG)' $entry/device/vendor; then
            devs+="$(basename $entry)"
        fi
    done
else script=$blk_script;
    devs=$(cd /sys/block; echo vd*)
fi

trap "exit 1" SIGINT SIGTERM EXIT
for dev in $devs; do
@@ -31,12 +31,12 @@ for dev in $devs; do

        echo "INFO: Creating partition table on disk using: $parted_cmd mklabel gpt"
        $parted_cmd mklabel gpt
        $parted_cmd mkpart primary $fs 0% 100%
        $parted_cmd mkpart primary 2048s 100%
        sleep 2

        mkfs_cmd+=" /dev/${dev}1"
        echo "INFO: Creating filesystem using: $mkfs_cmd"
        $mkfscmd
        $mkfs_cmd

        mkdir -p /mnt/${dev}dir
        mount -o sync /dev/${dev}1 /mnt/${dev}dir
@@ -47,8 +47,7 @@ for dev in $devs; do
        # Now build SPDK
        $MAKE -C /mnt/${dev}dir/linux-src defconfig
        $MAKE -C /mnt/${dev}dir/linux-src
        # Print out space consumed on target device to help decide
        #  if/when we need to increase the size of the malloc LUN
        # Print out space consumed on target device
        df -h /dev/$dev
        rm -rf /mnt/${dev}dir/linux-src
done
+0 −4
Original line number Diff line number Diff line
@@ -5,7 +5,3 @@

[Ioat]
  Disable Yes

[VhostScsi0]
  Name naa.0
  Dev 1 Nvme0n1
+13 −8
Original line number Diff line number Diff line
@@ -49,13 +49,18 @@ case $param in
	--fio-jobs=$WORKDIR/fiotest/fio_jobs/default_integrity.job \
	--qemu-src=/home/sys_sgsw/vhost/qemu -x
    ;;
	-f|--fs-integrity)
	-fs|--fs-integrity-scsi)
	echo Running filesystem integrity suite...
	VM_IMG=/home/sys_sgsw/vhost_scsi_vm_image.qcow2 ./integrity/integrity_start.sh
	./integrity/integrity_start.sh -i /home/sys_sgsw/vhost_vm_image.qcow2 -m scsi -f ntfs
	;;
	-fb|--fs-integrity-blk)
	echo Running filesystem integrity suite...
	./integrity/integrity_start.sh -i /home/sys_sgsw/vhost_vm_image.qcow2 -m blk -f ntfs
	;;
    -h|--help)
	echo "-i |--integrity          for running an integrity test with vhost scsi"
	echo "-f|--fs-integrity 	for running an integrity test with filesystem"
	echo "-fs|--fs-integrity-scsi  for running an integrity test with filesystem"
	echo "-fb|--fs-integrity-blk   for running an integrity test with filesystem"
	echo "-p |--performance        for running a performance test with vhost scsi"
	echo "-ib|--integrity-blk      for running an integrity test with vhost blk"
	echo "-pb|--performance-blk    for running a performance test with vhost blk"