vhost_test: update vhost ext4test for spdk vhost
- Renamed to integrity filesystem test - Add detecting if qemu is installed - Default vhost.conf using NVMe; ramdisk may be too small for copying & building both dpdk and spdk - Use kernel source (present on VM) for running test compilation - rename to integrity test Change-Id: Id369a5aac3008700cffbc51a5197b72f10645a1b Signed-off-by: Karol Latecki <karolx.latecki@intel.com>
This commit is contained in:
parent
1edd9bf3e4
commit
0488fd84b8
@ -1,101 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
testdir=$(readlink -f $(dirname $0))
|
||||
rootdir=$testdir/../../..
|
||||
source $rootdir/scripts/autotest_common.sh
|
||||
|
||||
if [ -z "$VM_IMG" ]; then
|
||||
echo "VM_IMG: path to qcow2 image not provided - not running"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$VM_QEMU" ]; then
|
||||
echo "VM_QEMU: path to qemu binary not provided - not running"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
HOST_IP=192.168.122.1
|
||||
VM_IP=192.168.122.254
|
||||
VM_UNAME="root"
|
||||
VM_PASS="root"
|
||||
VM_NAME="ext4test_vm"
|
||||
VM_NET_NAME="test_net"
|
||||
VM_MAC="02:de:ad:de:ad:01"
|
||||
VM_BAK_IMG="/tmp/ext4test_backing.img"
|
||||
TIMEO=60
|
||||
SSHCMD="sshpass -p $VM_PASS ssh"
|
||||
SCPCMD="sshpass -p $VM_PASS scp"
|
||||
|
||||
function cleanup_virsh() {
|
||||
virsh destroy $VM_NAME
|
||||
virsh net-destroy $VM_NET_NAME
|
||||
rm $VM_BAK_IMG
|
||||
}
|
||||
|
||||
timing_enter ext4test
|
||||
|
||||
qemu-img create -f qcow2 -o backing_file=$VM_IMG $VM_BAK_IMG
|
||||
|
||||
cp $testdir/spdk_vm_base.xml $testdir/spdk_vm.xml
|
||||
cp $testdir/spdk_vnet_base.xml $testdir/spdk_vnet.xml
|
||||
|
||||
cp $testdir/vhost.conf.in $testdir/vhost.conf
|
||||
$rootdir/scripts/gen_nvme.sh >> $testdir/vhost.conf
|
||||
|
||||
sed -i "s@<name></name>@<name>$VM_NAME</name>@g" $testdir/spdk_vm.xml
|
||||
sed -i "s@source file=''@source file='$VM_BAK_IMG'@g" $testdir/spdk_vm.xml
|
||||
sed -i "s@<emulator></emulator>@<emulator>$VM_QEMU</emulator>@g" $testdir/spdk_vm.xml
|
||||
sed -i "s@<name></name>@<name>$VM_NET_NAME</name>@g" $testdir/spdk_vnet.xml
|
||||
|
||||
trap "cleanup_virsh; killprocess $pid; exit 1" SIGINT SIGTERM EXIT
|
||||
|
||||
virsh net-create $testdir/spdk_vnet.xml
|
||||
|
||||
# Change directory and ownership because virsh has issues with
|
||||
# paths that are in /root tree
|
||||
cd /tmp
|
||||
$rootdir/app/vhost/vhost -c $testdir/vhost.conf &
|
||||
pid=$!
|
||||
echo "Process pid: $pid"
|
||||
sleep 10
|
||||
chmod 777 /tmp/naa.123
|
||||
|
||||
tar --exclude '.git' --exclude 'spdk.tgz' --exclude '*.d' --exclude '*.o' -zcf /tmp/spdk_host.tgz $rootdir
|
||||
|
||||
virsh create $testdir/spdk_vm.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
|
||||
echo "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
|
||||
echo "VM did not boot properly, exiting"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
$SSHCMD root@$VM_IP 'mkdir -p /tmp/spdk'
|
||||
$SCPCMD -r /tmp/spdk_host.tgz root@$VM_IP:/tmp/spdk
|
||||
$SSHCMD root@$VM_IP 'cd /tmp/spdk; tar xf spdk_host.tgz'
|
||||
$SSHCMD root@$VM_IP '/tmp/spdk/test/vhost/ext4test/ext4connect.sh'
|
||||
|
||||
#read -p "Hit enter to exit..."
|
||||
|
||||
trap - SIGINT SIGTERM EXIT
|
||||
|
||||
cleanup_virsh
|
||||
rm $testdir/spdk_vm.xml
|
||||
rm $testdir/spdk_vnet.xml
|
||||
rm $testdir/vhost.conf
|
||||
killprocess $pid
|
||||
timing_exit ext4test
|
@ -1,11 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<network>
|
||||
<name/>
|
||||
<bridge name="virbr123"/>
|
||||
<forward/>
|
||||
<ip address="192.168.122.1" netmask="255.255.255.0">
|
||||
<dhcp>
|
||||
<range end="192.168.122.254" start="192.168.122.2"/>
|
||||
</dhcp>
|
||||
</ip>
|
||||
</network>
|
68
test/vhost/integrity/base_vm.xml
Normal file
68
test/vhost/integrity/base_vm.xml
Normal file
@ -0,0 +1,68 @@
|
||||
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
|
||||
<name></name>
|
||||
<memory unit='GiB'>4</memory>
|
||||
<currentMemory unit='GiB'>4</currentMemory>
|
||||
<vcpu placement='static'>8</vcpu>
|
||||
<os>
|
||||
<type arch='x86_64' machine='pc-i440fx-1.6'>hvm</type>
|
||||
<boot dev='hd'/>
|
||||
</os>
|
||||
<features>
|
||||
<acpi/>
|
||||
<apic/>
|
||||
<pae/>
|
||||
</features>
|
||||
<cpu mode='host-model'>
|
||||
<model fallback='allow'/>
|
||||
</cpu>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
<on_reboot>restart</on_reboot>
|
||||
<on_crash>destroy</on_crash>
|
||||
<devices>
|
||||
<emulator></emulator>
|
||||
<disk type='file' device='disk'>
|
||||
<driver name='qemu' type='qcow2'/>
|
||||
<source file=''/>
|
||||
<backingStore/>
|
||||
<target dev='hda' bus='ide'/>
|
||||
<address type='drive' domain='0' bus='0' slot='0' function='0'/>
|
||||
</disk>
|
||||
<controller type='usb' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
|
||||
</controller>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<interface type='network'>
|
||||
<mac address=''/>
|
||||
<source network=''/>
|
||||
<model type='virtio'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
|
||||
</interface>
|
||||
<serial type='pty'>
|
||||
<target port='0'/>
|
||||
</serial>
|
||||
<console type='pty'>
|
||||
<target type='serial' port='0'/>
|
||||
</console>
|
||||
<input type='mouse' bus='ps2'/>
|
||||
<input type='keyboard' bus='ps2'/>
|
||||
<graphics type='vnc' port='-1' autoport='yes'/>
|
||||
<video>
|
||||
<model type='cirrus' vram='16384' heads='1'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
</video>
|
||||
<memballoon model='virtio'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
|
||||
</memballoon>
|
||||
</devices>
|
||||
<qemu:commandline>
|
||||
<qemu:arg value='-object'/>
|
||||
<qemu:arg value='memory-backend-file,id=mem,size=4096M,mem-path=/dev/hugepages,share=on'/>
|
||||
<qemu:arg value='-numa'/>
|
||||
<qemu:arg value='node,memdev=mem'/>
|
||||
<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:commandline>
|
||||
</domain>
|
8
test/vhost/integrity/base_vnet.xml
Normal file
8
test/vhost/integrity/base_vnet.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<network>
|
||||
<name></name>
|
||||
<bridge name="int_test_br" />
|
||||
<forward />
|
||||
<ip address="192.200.200.1" netmask="255.255.255.0">
|
||||
<dhcp><range end="192.200.200.254" start="192.200.200.2" /></dhcp>
|
||||
</ip>
|
||||
</network>
|
158
test/vhost/integrity/integrity_start.sh
Executable file
158
test/vhost/integrity/integrity_start.sh
Executable file
@ -0,0 +1,158 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
basedir=$(readlink -f $(dirname $0))
|
||||
rootdir=$basedir/../../..
|
||||
testdir=$rootdir/..
|
||||
qemu_src_dir="$testdir/qemu"
|
||||
qemu_build_dir="$testdir/qemu/build"
|
||||
qemu_install_dir="$testdir/root"
|
||||
MAKE="make -j$(( $(nproc) * 2 ))"
|
||||
|
||||
source $rootdir/scripts/autotest_common.sh
|
||||
|
||||
if [ -z "$VM_IMG" ]; then
|
||||
echo "ERROR: VM_IMG: path to qcow2 image not provided - not running"
|
||||
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"
|
||||
fi
|
||||
|
||||
if [ -z "$VM_FS" ]; then
|
||||
VM_FS="ext4"
|
||||
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"
|
||||
|
||||
echo "FS: $VM_FS"
|
||||
|
||||
function cleanup_virsh() {
|
||||
virsh shutdown $VM_NAME || true
|
||||
sleep 5
|
||||
virsh net-destroy $VM_NET_NAME || true
|
||||
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
|
||||
|
||||
# Prepare vhost config
|
||||
cp $basedir/vhost.conf.in $basedir/vhost.conf
|
||||
$rootdir/scripts/gen_nvme.sh >> $basedir/vhost.conf
|
||||
|
||||
# Prepare .xml files for Virsh
|
||||
cp $basedir/base_vm.xml $basedir/vm_conf.xml
|
||||
cp $basedir/base_vnet.xml $basedir/vnet_conf.xml
|
||||
sed -i "s@<name></name>@<name>$VM_NAME</name>@g" $basedir/vm_conf.xml
|
||||
sed -i "s@source file=''@source file='$VM_BAK_IMG'@g" $basedir/vm_conf.xml
|
||||
sed -i "s@<emulator></emulator>@<emulator>$VM_QEMU</emulator>@g" $basedir/vm_conf.xml
|
||||
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
|
||||
|
||||
trap "cleanup_virsh; killprocess $pid; exit 1" SIGINT SIGTERM EXIT
|
||||
|
||||
virsh net-create $basedir/vnet_conf.xml
|
||||
|
||||
# Change directory and ownership because virsh has issues with
|
||||
# paths that are in /root tree
|
||||
cd /tmp
|
||||
$rootdir/app/vhost/vhost -c $basedir/vhost.conf &
|
||||
pid=$!
|
||||
echo "Process pid: $pid"
|
||||
sleep 10
|
||||
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
|
||||
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
|
||||
echo "ERROR: VM did not boot properly, exiting"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Run test on Virtual Machine
|
||||
$SCPCMD -r $basedir/integrity_vm.sh root@$VM_IP:~
|
||||
$SSHCMD root@$VM_IP "fs=$VM_FS ~/integrity_vm.sh"
|
||||
|
||||
# Kill VM, cleanup config files
|
||||
cleanup_virsh
|
||||
rm $basedir/vm_conf.xml || true
|
||||
rm $basedir/vnet_conf.xml || true
|
||||
rm $basedir/vhost.conf || true
|
||||
|
||||
# Try to gracefully stop spdk vhost
|
||||
if /bin/kill -INT $pid; then
|
||||
while /bin/kill -0 $pid; do
|
||||
sleep 1
|
||||
done
|
||||
elif /bin/kill -0 $pid; then
|
||||
killprocess $pid
|
||||
echo "ERROR: Vhost was not closed gracefully..."
|
||||
exit 1
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
trap - SIGINT SIGTERM EXIT
|
||||
timing_exit integrity_test
|
@ -1,13 +1,13 @@
|
||||
#!/usr/bin/env bash
|
||||
set -xe
|
||||
|
||||
testdir=$(readlink -f $(dirname $0))
|
||||
rootdir=$testdir/../../..
|
||||
source $rootdir/scripts/autotest_common.sh
|
||||
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 \
|
||||
if [[ $disk_type == INTEL* ]] || [[ $disk_type == RAWSCSI* ]] || [[ $disk_type == LIO-ORG* ]]; then \
|
||||
fname=$(basename $entry); \
|
||||
echo -n "$fname "; \
|
||||
fi; \
|
||||
@ -15,23 +15,42 @@ script='shopt -s nullglob; \
|
||||
|
||||
devs="$(echo "$script" | bash -s)"
|
||||
|
||||
timing_enter ext4test
|
||||
|
||||
trap "exit 1" SIGINT SIGTERM EXIT
|
||||
|
||||
for dev in $devs; do
|
||||
mkfs.ext4 -F /dev/$dev
|
||||
mkdir -p /mnt/${dev}dir
|
||||
mount -o sync /dev/$dev /mnt/${dev}dir
|
||||
rsync -qav --exclude=".git" $rootdir/ /mnt/${dev}dir/spdk
|
||||
sleep 2
|
||||
make -C /mnt/${dev}dir/spdk -j8 clean
|
||||
make -C /mnt/${dev}dir/spdk -j8
|
||||
mkfs_cmd="mkfs.$fs"
|
||||
parted_cmd="parted -s /dev/${dev}"
|
||||
if [ "ntfs" == $fs ]; then
|
||||
mkfs_cmd+=" -f -F"
|
||||
elif [ "btrfs" == $fs ]; then
|
||||
mkfs_cmd+=" -f"
|
||||
elif [ "fat" == $fs ]; then
|
||||
mkfs_cmd+=" -I"
|
||||
else
|
||||
mkfs_cmd+=" -F"
|
||||
fi
|
||||
|
||||
echo "INFO: Creating partition table on disk using: $parted_cmd mklabel gpt"
|
||||
$parted_cmd mklabel gpt
|
||||
$parted_cmd mkpart primary $fs 0% 100%
|
||||
sleep 2
|
||||
|
||||
mkfs_cmd+=" /dev/${dev}1"
|
||||
echo "INFO: Creating filesystem using: $mkfs_cmd"
|
||||
$mkfscmd
|
||||
|
||||
mkdir -p /mnt/${dev}dir
|
||||
mount -o sync /dev/${dev}1 /mnt/${dev}dir
|
||||
mkdir -p /mnt/${dev}dir/linux-src
|
||||
tar xf $basedir/linux-src.tar.gz -C /mnt/${dev}dir/linux-src --strip-components=1
|
||||
sleep 2
|
||||
|
||||
# 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
|
||||
df -h /dev/$dev
|
||||
rm -rf /mnt/${dev}dir/spdk
|
||||
rm -rf /mnt/${dev}dir/linux-src
|
||||
done
|
||||
|
||||
for dev in $devs; do
|
||||
@ -51,5 +70,3 @@ for dev in $devs; do
|
||||
done
|
||||
|
||||
trap - SIGINT SIGTERM EXIT
|
||||
|
||||
timing_exit ext4test
|
@ -34,11 +34,6 @@
|
||||
[Ioat]
|
||||
Disable Yes
|
||||
|
||||
[Malloc]
|
||||
NumberOfLuns 1
|
||||
LunSizeInMb 512
|
||||
|
||||
[VhostScsi0]
|
||||
Name naa.123
|
||||
Dev 0 Nvme0n1
|
||||
Dev 1 Malloc0
|
||||
[VhostScsi0]
|
||||
Name naa.0
|
||||
Dev 1 Nvme0n1
|
@ -34,8 +34,13 @@ case $param in
|
||||
--fio-jobs=$WORKDIR/fiotest/fio_jobs/default_integrity.job \
|
||||
--qemu-src=/home/sys_sgsw/vhost/qemu
|
||||
;;
|
||||
-f|--fs-integrity)
|
||||
echo Running filesystem integrity suite...
|
||||
VM_IMG=/home/sys_sgsw/vhost_scsi_vm_image.qcow2 ./integrity/integrity_start.sh
|
||||
;;
|
||||
-h|--help)
|
||||
echo "-i|--integrity for running an integrity test"
|
||||
echo "-f|--fs-integrity for running an integrity test with filesystem"
|
||||
echo "-p|--performance for running a performance test"
|
||||
echo "-h|--help prints this message"
|
||||
;;
|
||||
|
Loading…
x
Reference in New Issue
Block a user