scripts/vagrant: Add support for setting a PMR device
Available in qemu >= 5.1.0. Note that since CMB and PMR share the same BAR they cannot be used together. If both are specified, PMR setup is skipped. Signed-off-by: Michal Berger <michalx.berger@intel.com> Change-Id: Ia0c6681b5ac7563efc6c32d2fff1808814196676 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/7018 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
505b507234
commit
45fc211e5f
23
scripts/vagrant/Vagrantfile
vendored
23
scripts/vagrant/Vagrantfile
vendored
@ -130,6 +130,7 @@ def setup_nvme_disk(libvirt, disk, index)
|
|||||||
|
|
||||||
nvme_namespaces=(ENV['NVME_DISKS_NAMESPACES'] || "").split(',')
|
nvme_namespaces=(ENV['NVME_DISKS_NAMESPACES'] || "").split(',')
|
||||||
nvme_cmbs=(ENV['NVME_CMB'] || "").split(',')
|
nvme_cmbs=(ENV['NVME_CMB'] || "").split(',')
|
||||||
|
nvme_pmrs=(ENV['NVME_PMR'] || "").split(',')
|
||||||
|
|
||||||
libvirt.qemuargs :value => "-drive"
|
libvirt.qemuargs :value => "-drive"
|
||||||
libvirt.qemuargs :value => "format=raw,file=#{nvme_disk},if=none,id=#{nvme_disk_id}"
|
libvirt.qemuargs :value => "format=raw,file=#{nvme_disk},if=none,id=#{nvme_disk_id}"
|
||||||
@ -139,11 +140,33 @@ def setup_nvme_disk(libvirt, disk, index)
|
|||||||
nvme_drive << ",namespaces=#{nvme_namespaces[index]}"
|
nvme_drive << ",namespaces=#{nvme_namespaces[index]}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
cmb_set = "false"
|
||||||
|
pmr_cmdline =
|
||||||
|
|
||||||
if !nvme_cmbs[index].nil? && nvme_cmbs[index] == "true"
|
if !nvme_cmbs[index].nil? && nvme_cmbs[index] == "true"
|
||||||
# Fix the size of the buffer to 128M
|
# Fix the size of the buffer to 128M
|
||||||
nvme_drive << ",cmb_size_mb=128"
|
nvme_drive << ",cmb_size_mb=128"
|
||||||
|
cmb_set = "true"
|
||||||
|
end
|
||||||
|
if !nvme_pmrs[index].nil?
|
||||||
|
if cmb_set == "true"
|
||||||
|
abort("CMB and PMR are mutually exclusive, aborting (#{nvme_disk})")
|
||||||
|
end
|
||||||
|
pmr_path, pmr_size = nvme_pmrs[index].split(':')
|
||||||
|
if !File.exist?(pmr_path)
|
||||||
|
abort("#{pmr_path} does not exist, aborting")
|
||||||
|
end
|
||||||
|
if pmr_size.nil?
|
||||||
|
pmr_size = "16M"
|
||||||
|
end
|
||||||
|
nvme_drive << ",pmrdev=pmr#{index}"
|
||||||
|
pmr_cmdline = "memory-backend-file,id=pmr#{index},share=on,mem-path=#{pmr_path},size=#{pmr_size}"
|
||||||
end
|
end
|
||||||
libvirt.qemuargs :value => nvme_drive
|
libvirt.qemuargs :value => nvme_drive
|
||||||
|
if !pmr_cmdline.nil?
|
||||||
|
libvirt.qemuargs :value => "-object"
|
||||||
|
libvirt.qemuargs :value => pmr_cmdline
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def setup_ocssd_disk(libvirt, disk, index)
|
def setup_ocssd_disk(libvirt, disk, index)
|
||||||
|
@ -30,8 +30,10 @@ display_help() {
|
|||||||
echo " If no -b option is specified then this option defaults to emulating single"
|
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 " NVMe with 1 namespace and assumes path: /var/lib/libvirt/images/nvme_disk.img"
|
||||||
echo " -b option can be used multiple times for attaching multiple files to the VM"
|
echo " -b option can be used multiple times for attaching multiple files to the VM"
|
||||||
echo " Parameters for -b option: <path>,<type>,<namespaces>,<cmb>"
|
echo " Parameters for -b option: <path>,<type>,<namespaces>,<cmb>,<pmr_file[:pmr_size]>"
|
||||||
echo " Available types: nvme, ocssd."
|
echo " Available types: nvme, ocssd."
|
||||||
|
echo " Default pmr size: 16M"
|
||||||
|
echo " Default cmb: false"
|
||||||
echo " -c Create all above disk, default 0"
|
echo " -c Create all above disk, default 0"
|
||||||
echo " -H Use hugepages for allocating VM memory. Only for libvirt provider. Default: false."
|
echo " -H Use hugepages for allocating VM memory. Only for libvirt provider. Default: false."
|
||||||
echo " -u Use password authentication to the VM instead of SSH keys."
|
echo " -u Use password authentication to the VM instead of SSH keys."
|
||||||
@ -178,13 +180,16 @@ if [ -z "$NVME_FILE" ]; then
|
|||||||
else
|
else
|
||||||
TMP=""
|
TMP=""
|
||||||
for args in $NVME_FILE; do
|
for args in $NVME_FILE; do
|
||||||
while IFS=, read -r path type namespace cmb; do
|
while IFS=, read -r path type namespace cmb pmr; do
|
||||||
TMP+="$path,"
|
TMP+="$path,"
|
||||||
if [ -z "$type" ]; then
|
if [ -z "$type" ]; then
|
||||||
type="nvme"
|
type="nvme"
|
||||||
fi
|
fi
|
||||||
if [[ -n $cmb ]]; then
|
if [[ -n $cmb ]]; then
|
||||||
NVME_CMB=${NVME_CMB:+$NVME_CMB,}true
|
NVME_CMB=${NVME_CMB:+$NVME_CMB,}$cmb
|
||||||
|
fi
|
||||||
|
if [[ -n $pmr ]]; then
|
||||||
|
NVME_PMR=${NVME_PMR:+$NVME_PMR,}$pmr
|
||||||
fi
|
fi
|
||||||
NVME_DISKS_TYPE+="$type,"
|
NVME_DISKS_TYPE+="$type,"
|
||||||
if [ -z "$namespace" ] && [ -n "$SPDK_QEMU_EMULATOR" ]; then
|
if [ -z "$namespace" ] && [ -n "$SPDK_QEMU_EMULATOR" ]; then
|
||||||
@ -211,6 +216,7 @@ if [ ${VERBOSE} = 1 ]; then
|
|||||||
echo NVME_AUTO_CREATE=$NVME_AUTO_CREATE
|
echo NVME_AUTO_CREATE=$NVME_AUTO_CREATE
|
||||||
echo NVME_DISKS_NAMESPACES=$NVME_DISKS_NAMESPACES
|
echo NVME_DISKS_NAMESPACES=$NVME_DISKS_NAMESPACES
|
||||||
echo NVME_CMB=$NVME_CMB
|
echo NVME_CMB=$NVME_CMB
|
||||||
|
echo NVME_PMR=$NVME_PMR
|
||||||
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
|
||||||
@ -232,6 +238,7 @@ export COPY_SPDK_DIR
|
|||||||
export COPY_SPDK_ARTIFACTS
|
export COPY_SPDK_ARTIFACTS
|
||||||
export DEPLOY_TEST_VM
|
export DEPLOY_TEST_VM
|
||||||
export NVME_CMB
|
export NVME_CMB
|
||||||
|
export NVME_PMR
|
||||||
export NVME_DISKS_TYPE
|
export NVME_DISKS_TYPE
|
||||||
export NVME_DISKS_NAMESPACES
|
export NVME_DISKS_NAMESPACES
|
||||||
export NVME_FILE
|
export NVME_FILE
|
||||||
|
Loading…
x
Reference in New Issue
Block a user