scripts/vagrant: Add more NVMe emulation options
Current scripts/vagrant allow us to create only a single file for emulating NVMe with single namespace. This patch allow to create multiple emulated drives with multiple namespaces. This patch also allows to emulate OCSSD disks which are used in OCF tests. Change-Id: Ia7a4667bd405ba18235e72bcdf608270002b5242 Signed-off-by: Maciej Wawryk <maciejx.wawryk@intel.com> Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/466555 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Broadcom SPDK FC-NVMe CI <spdk-ci.pdl@broadcom.com> Reviewed-by: Seth Howell <seth.howell@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
parent
8cad9cc10a
commit
ff231506d3
49
scripts/vagrant/Vagrantfile
vendored
49
scripts/vagrant/Vagrantfile
vendored
@ -98,6 +98,9 @@ Vagrant.configure(2) do |config|
|
|||||||
vhost_host_dir=(ENV['VHOST_HOST_DIR'] || "none")
|
vhost_host_dir=(ENV['VHOST_HOST_DIR'] || "none")
|
||||||
vhost_vm_dir=(ENV['VHOST_VM_DIR'] || "none")
|
vhost_vm_dir=(ENV['VHOST_VM_DIR'] || "none")
|
||||||
vmemulator=(ENV['SPDK_QEMU_EMULATOR'] || "")
|
vmemulator=(ENV['SPDK_QEMU_EMULATOR'] || "")
|
||||||
|
emulated_nvme_types=(ENV['NVME_DISKS_TYPE'] || "nvme").split(',')
|
||||||
|
nvme_namespaces=(ENV['NVME_DISKS_NAMESPACES'] || "").split(',')
|
||||||
|
nvme_file=(ENV['NVME_FILE'] || "").split(',')
|
||||||
|
|
||||||
config.ssh.forward_agent = true
|
config.ssh.forward_agent = true
|
||||||
config.ssh.forward_x11 = true
|
config.ssh.forward_x11 = true
|
||||||
@ -131,20 +134,42 @@ Vagrant.configure(2) do |config|
|
|||||||
|
|
||||||
# we put nvme_disk inside default pool to eliminate libvirt/SELinux Permissions Problems
|
# we put nvme_disk inside default pool to eliminate libvirt/SELinux Permissions Problems
|
||||||
# and to be able to run vagrant from user $HOME directory
|
# and to be able to run vagrant from user $HOME directory
|
||||||
if ENV['NVME_FILE']
|
|
||||||
nvme_disk="/var/lib/libvirt/images/" + ENV['NVME_FILE']
|
|
||||||
else
|
|
||||||
nvme_disk="/var/lib/libvirt/images/nvme_disk.img"
|
|
||||||
end
|
|
||||||
|
|
||||||
unless File.exist? (nvme_disk)
|
# Loop to create all emulated disks set
|
||||||
puts "If run with libvirt provider please execute create_nvme_img.sh"
|
emulated_nvme_types.each_with_index { |disk, index|
|
||||||
end
|
if ENV['NVME_FILE']
|
||||||
|
nvme_disk_id="#{disk}" + "-#{index}"
|
||||||
|
nvme_disk="#{nvme_file["#{index}".to_i]}"
|
||||||
|
else
|
||||||
|
nvme_disk="/var/lib/libvirt/images/nvme_disk.img"
|
||||||
|
end
|
||||||
|
|
||||||
|
unless File.exist? (nvme_disk)
|
||||||
|
puts "If run with libvirt provider please execute create_nvme_img.sh"
|
||||||
|
end
|
||||||
|
|
||||||
|
if disk == "nvme"
|
||||||
|
libvirt.qemuargs :value => "-drive"
|
||||||
|
libvirt.qemuargs :value => "format=raw,file=#{nvme_disk},if=none,id=#{nvme_disk_id}"
|
||||||
|
libvirt.qemuargs :value => "-device"
|
||||||
|
if nvme_namespaces["#{index}".to_i].nil?
|
||||||
|
libvirt.qemuargs :value => "nvme,drive=#{nvme_disk_id},serial=1234#{index}"
|
||||||
|
else
|
||||||
|
libvirt.qemuargs :value => "nvme,drive=#{nvme_disk_id},serial=1234#{index},namespaces=#{nvme_namespaces["#{index}".to_i]}"
|
||||||
|
end
|
||||||
|
elsif disk == "ocssd"
|
||||||
|
libvirt.qemuargs :value => "-drive"
|
||||||
|
libvirt.qemuargs :value => "format=raw,file=#{nvme_disk},if=none,id=#{nvme_disk_id}"
|
||||||
|
libvirt.qemuargs :value => "-device"
|
||||||
|
# create ocssd drive with special parameters
|
||||||
|
# lba_index=4 it is LBA namespace format, 4 means that block size is 4K and have 64B metadata
|
||||||
|
# lnum_lun, lnum_pln, lpgs_per_blk, lsecs_per_pg, lblks_per_pln this are parameters describing the device geometry
|
||||||
|
# we need to multiply these parameters by ourselves to have backend file minimal size:
|
||||||
|
# in our case: 4K * 8 * 2 * 1536 * 2 * 45 = 8640 MB
|
||||||
|
libvirt.qemuargs :value => "nvme,drive=#{nvme_disk_id},serial=deadbeef,oacs=0,namespaces=1,lver=2,lba_index=4,mdts=10,lnum_lun=8,lnum_pln=2,lpgs_per_blk=1536,lsecs_per_pg=2,lblks_per_pln=45,metadata=/var/lib/libvirt/images/ocssd_md,nsdatafile=/var/lib/libvirt/images/ocssd_blknvme.ns,laer_thread_sleep=3000,stride=4"
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
libvirt.qemuargs :value => "-drive"
|
|
||||||
libvirt.qemuargs :value => "file=#{nvme_disk},if=none,id=D22"
|
|
||||||
libvirt.qemuargs :value => "-device"
|
|
||||||
libvirt.qemuargs :value => "nvme,drive=D22,serial=1234"
|
|
||||||
libvirt.driver = "kvm"
|
libvirt.driver = "kvm"
|
||||||
libvirt.graphics_type = "vnc"
|
libvirt.graphics_type = "vnc"
|
||||||
libvirt.memory = "#{vmram}"
|
libvirt.memory = "#{vmram}"
|
||||||
|
@ -2,14 +2,16 @@
|
|||||||
SYSTEM=$(uname -s)
|
SYSTEM=$(uname -s)
|
||||||
size="1024M"
|
size="1024M"
|
||||||
name="nvme_disk.img"
|
name="nvme_disk.img"
|
||||||
|
type="nvme"
|
||||||
|
|
||||||
function usage() {
|
function usage() {
|
||||||
echo "Usage: ${0##*/} [-s <disk_size>] [-n <backing file name>]"
|
echo "Usage: ${0##*/} [-s <disk_size>] [-n <backing file name>]"
|
||||||
echo "-s <disk_size> with postfix e.g. 2G default: 1024M"
|
echo "-s <disk_size> with postfix e.g. 2G default: 1024M"
|
||||||
echo "-n <backing file name> default: nvme_disk.img"
|
echo "-n <backing file name> default: nvme_disk.img"
|
||||||
|
echo "-t <type> default: nvme available: ocssd"
|
||||||
}
|
}
|
||||||
|
|
||||||
while getopts "s:n:h-:" opt; do
|
while getopts "s:n:t:h-:" opt; do
|
||||||
case "${opt}" in
|
case "${opt}" in
|
||||||
-)
|
-)
|
||||||
echo " Invalid argument: $OPTARG"
|
echo " Invalid argument: $OPTARG"
|
||||||
@ -22,6 +24,9 @@ while getopts "s:n:h-:" opt; do
|
|||||||
n)
|
n)
|
||||||
name=$OPTARG
|
name=$OPTARG
|
||||||
;;
|
;;
|
||||||
|
t)
|
||||||
|
type=$OPTARG
|
||||||
|
;;
|
||||||
h)
|
h)
|
||||||
usage
|
usage
|
||||||
exit 0
|
exit 0
|
||||||
@ -37,8 +42,19 @@ done
|
|||||||
if [ ! "${SYSTEM}" = "FreeBSD" ]; then
|
if [ ! "${SYSTEM}" = "FreeBSD" ]; then
|
||||||
WHICH_OS=$(lsb_release -i | awk '{print $3}')
|
WHICH_OS=$(lsb_release -i | awk '{print $3}')
|
||||||
nvme_disk="/var/lib/libvirt/images/$name"
|
nvme_disk="/var/lib/libvirt/images/$name"
|
||||||
|
case $type in
|
||||||
qemu-img create -f raw $nvme_disk ${size}
|
"nvme")
|
||||||
|
qemu-img create -f raw $nvme_disk ${size}
|
||||||
|
;;
|
||||||
|
"ocssd")
|
||||||
|
fallocate -l ${size} $nvme_disk
|
||||||
|
touch /var/lib/libvirt/images/ocssd_md
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "We support only nvme and ocssd disks types"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
#Change SE Policy on Fedora
|
#Change SE Policy on Fedora
|
||||||
if [ $WHICH_OS == "Fedora" ]; then
|
if [ $WHICH_OS == "Fedora" ]; then
|
||||||
sudo chcon -t svirt_image_t $nvme_disk
|
sudo chcon -t svirt_image_t $nvme_disk
|
||||||
|
@ -19,7 +19,11 @@ display_help() {
|
|||||||
echo
|
echo
|
||||||
echo " distro = <centos7 | ubuntu16 | ubuntu18 | fedora28 | fedora29 | fedora 30 | freebsd11> "
|
echo " distro = <centos7 | ubuntu16 | ubuntu18 | fedora28 | fedora29 | fedora 30 | freebsd11> "
|
||||||
echo
|
echo
|
||||||
echo " -b <nvme-backing-file> default: ${NVME_FILE}"
|
echo " -b <nvme-backing-file> nvme file path with name"
|
||||||
|
echo " type of emulated nvme disk"
|
||||||
|
echo " usage: type <number_of_namespaces> types available: ocssd, nvme"
|
||||||
|
echo " If no -b option is specified then this option defaults to emulating single"
|
||||||
|
echo " NVMe with 1 namespace and assumes path: /var/lib/libvirt/images/nvme_disk.img"
|
||||||
echo " -s <ram-size> in kb default: ${SPDK_VAGRANT_VMRAM}"
|
echo " -s <ram-size> in kb default: ${SPDK_VAGRANT_VMRAM}"
|
||||||
echo " -n <num-cpus> 1 to 4 default: ${SPDK_VAGRANT_VMCPU}"
|
echo " -n <num-cpus> 1 to 4 default: ${SPDK_VAGRANT_VMCPU}"
|
||||||
echo " -x <http-proxy> default: \"${SPDK_VAGRANT_HTTP_PROXY}\""
|
echo " -x <http-proxy> default: \"${SPDK_VAGRANT_HTTP_PROXY}\""
|
||||||
@ -39,7 +43,10 @@ display_help() {
|
|||||||
echo " $0 -x http://user:password@host:port fedora28"
|
echo " $0 -x http://user:password@host:port fedora28"
|
||||||
echo " $0 -s 2048 -n 2 ubuntu16"
|
echo " $0 -s 2048 -n 2 ubuntu16"
|
||||||
echo " $0 -rv freebsd"
|
echo " $0 -rv freebsd"
|
||||||
echo " $0 fedora28 "
|
echo " $0 fedora28"
|
||||||
|
echo " $0 -b /var/lib/libvirt/images/nvme1.img,nvme,1 fedora30"
|
||||||
|
echo " $0 -b /var/lib/libvirt/images/ocssd.img,ocssd fedora30"
|
||||||
|
echo " $0 -b /var/lib/libvirt/images/nvme5.img,nvme,5 -b /var/lib/libvirt/images/ocssd.img,ocssd fedora30"
|
||||||
echo
|
echo
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,7 +65,9 @@ SPDK_VAGRANT_VMRAM=4096
|
|||||||
SPDK_VAGRANT_PROVIDER="virtualbox"
|
SPDK_VAGRANT_PROVIDER="virtualbox"
|
||||||
SPDK_QEMU_EMULATOR=""
|
SPDK_QEMU_EMULATOR=""
|
||||||
OPTIND=1
|
OPTIND=1
|
||||||
NVME_FILE="nvme_disk.img"
|
NVME_DISKS_TYPE=""
|
||||||
|
NVME_DISKS_NAMESPACES=""
|
||||||
|
NVME_FILE=""
|
||||||
|
|
||||||
while getopts ":b:n:s:x:p:vrldh-:" opt; do
|
while getopts ":b:n:s:x:p:vrldh-:" opt; do
|
||||||
case "${opt}" in
|
case "${opt}" in
|
||||||
@ -101,7 +110,7 @@ while getopts ":b:n:s:x:p:vrldh-:" opt; do
|
|||||||
DEPLOY_TEST_VM=1
|
DEPLOY_TEST_VM=1
|
||||||
;;
|
;;
|
||||||
b)
|
b)
|
||||||
NVME_FILE=$OPTARG
|
NVME_FILE+="${OPTARG#*=} "
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo " Invalid argument: -$OPTARG" >&2
|
echo " Invalid argument: -$OPTARG" >&2
|
||||||
@ -151,6 +160,27 @@ if ! echo "$SPDK_VAGRANT_DISTRO" | grep -q fedora && [ $DEPLOY_TEST_VM -eq 1 ];
|
|||||||
echo "Warning: Test machine deployment is only available on fedora distros. Disabling it for this build"
|
echo "Warning: Test machine deployment is only available on fedora distros. Disabling it for this build"
|
||||||
DEPLOY_TEST_VM=0
|
DEPLOY_TEST_VM=0
|
||||||
fi
|
fi
|
||||||
|
if [ -z "$NVME_FILE" ]; then
|
||||||
|
TMP="/var/lib/libvirt/images/nvme_disk.img"
|
||||||
|
NVME_DISKS_TYPE="nvme"
|
||||||
|
NVME_DISKS_NAMESPACES="1"
|
||||||
|
else
|
||||||
|
TMP=""
|
||||||
|
for args in $NVME_FILE; do
|
||||||
|
while IFS=, read -r path type namespace; do
|
||||||
|
TMP+="$path,";
|
||||||
|
if [ -z "$type" ]; then
|
||||||
|
type="nvme"
|
||||||
|
fi
|
||||||
|
NVME_DISKS_TYPE+="$type,";
|
||||||
|
if [ -z "$namespace" ]; then
|
||||||
|
namespace="1"
|
||||||
|
fi
|
||||||
|
NVME_DISKS_NAMESPACES+="$namespace,";
|
||||||
|
done <<< $args
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
NVME_FILE=$TMP
|
||||||
|
|
||||||
if [ ${VERBOSE} = 1 ]; then
|
if [ ${VERBOSE} = 1 ]; then
|
||||||
echo
|
echo
|
||||||
@ -160,6 +190,8 @@ if [ ${VERBOSE} = 1 ]; then
|
|||||||
echo HELP=$HELP
|
echo HELP=$HELP
|
||||||
echo DRY_RUN=$DRY_RUN
|
echo DRY_RUN=$DRY_RUN
|
||||||
echo NVME_FILE=$NVME_FILE
|
echo NVME_FILE=$NVME_FILE
|
||||||
|
echo NVME_DISKS_TYPE=$NVME_DISKS_TYPE
|
||||||
|
echo NVME_DISKS_NAMESPACES=$NVME_DISKS_NAMESPACES
|
||||||
echo SPDK_VAGRANT_DISTRO=$SPDK_VAGRANT_DISTRO
|
echo SPDK_VAGRANT_DISTRO=$SPDK_VAGRANT_DISTRO
|
||||||
echo SPDK_VAGRANT_VMCPU=$SPDK_VAGRANT_VMCPU
|
echo SPDK_VAGRANT_VMCPU=$SPDK_VAGRANT_VMCPU
|
||||||
echo SPDK_VAGRANT_VMRAM=$SPDK_VAGRANT_VMRAM
|
echo SPDK_VAGRANT_VMRAM=$SPDK_VAGRANT_VMRAM
|
||||||
@ -177,6 +209,8 @@ export SPDK_VAGRANT_VMRAM
|
|||||||
export SPDK_DIR
|
export SPDK_DIR
|
||||||
export COPY_SPDK_DIR
|
export COPY_SPDK_DIR
|
||||||
export DEPLOY_TEST_VM
|
export DEPLOY_TEST_VM
|
||||||
|
export NVME_DISKS_TYPE
|
||||||
|
export NVME_DISKS_NAMESPACES
|
||||||
export NVME_FILE
|
export NVME_FILE
|
||||||
|
|
||||||
if [ -n "$SPDK_VAGRANT_PROVIDER" ]; then
|
if [ -n "$SPDK_VAGRANT_PROVIDER" ]; then
|
||||||
@ -207,6 +241,9 @@ if [ ${DRY_RUN} = 1 ]; then
|
|||||||
printenv SPDK_VAGRANT_PROVIDER
|
printenv SPDK_VAGRANT_PROVIDER
|
||||||
printenv SPDK_VAGRANT_HTTP_PROXY
|
printenv SPDK_VAGRANT_HTTP_PROXY
|
||||||
printenv SPDK_QEMU_EMULATOR
|
printenv SPDK_QEMU_EMULATOR
|
||||||
|
printenv NVME_DISKS_TYPE
|
||||||
|
printenv NVME_DISKS_NAMESPACES
|
||||||
|
printenv NVME_FILE
|
||||||
printenv SPDK_DIR
|
printenv SPDK_DIR
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user