diff --git a/scripts/vagrant/Vagrantfile b/scripts/vagrant/Vagrantfile index 55e1fab7c..e450405bc 100644 --- a/scripts/vagrant/Vagrantfile +++ b/scripts/vagrant/Vagrantfile @@ -146,15 +146,37 @@ def setup_nvme_disk(libvirt, disk, index) nvme_pmrs=(ENV['NVME_PMR'] || "").split(',') nvme_zns=(ENV['NVME_ZNS'] || "").split(',') nvme_ms=(ENV['NVME_MS'] || "").split(',') - + nvme_fdp=(ENV['NVME_FDP'] || "").split(',') namespace_disks = [] pmr_cmdline = "" nvme_controller = "" + fdp_subsys = "" + fdp_subsys_id = "" # Define controller nvme_controller = "nvme,id=#{nvme_disk_id},serial=1234#{index}" + # For the FDP, we need to hook our nvme into a dedicated subsystem + if !nvme_fdp[index].nil? && nvme_fdp[index] != "" + fdp_subsys_id = "fdp-subsys#{index}" + fdp = nvme_fdp[index].split(':')[0..3] + fdp_ruhs = (nvme_fdp[index].split(':')[4..]) # fdp.ruhs per ns + + # Put some defaults in place if needed + fdp_enable = "#{fdp[0] != nil && fdp[0] != '' ? fdp[0] : 'off'}" + fdp_runs = "#{fdp[1] != nil && fdp[1] != '' ? fdp[1] : '96M'}" + fdp_nrg = "#{fdp[2] != nil && fdp[2] != '' ? fdp[2] : 2}" + fdp_nruh = "#{fdp[3] != nil && fdp[3] != '' ? fdp[3] : 8}" + + fdp_subsys = "nvme-subsys,id=#{fdp_subsys_id},fdp=#{fdp_enable}" + fdp_subsys << ",fdp.runs=#{fdp_runs},fdp.nrg=#{fdp_nrg},fdp.nruh=#{fdp_nruh}" + + nvme_controller << ",subsys=#{fdp_subsys_id}" + + libvirt.qemuargs :value => "-device" + libvirt.qemuargs :value => fdp_subsys + end # Gather all drives - each namespace requires separate drive if nvme_namespaces[index].nil? namespace_disks = namespace_disks + nvme_disk.split() @@ -195,10 +217,14 @@ def setup_nvme_disk(libvirt, disk, index) end zoned = nvme_zns[index].nil? ? "false" : "true" ms = nvme_ms[index].nil? ? "" : ",ms=64" + ns = "nvme-ns,drive=#{nvme_disk_id}-drive#{nsid},bus=#{nvme_disk_id},nsid=#{nsid + 1},zoned=#{zoned},logical_block_size=4096,physical_block_size=4096#{ms}" + if !fdp_ruhs.nil? && !fdp_ruhs[nsid].nil? && fdp_ruhs[nsid] != "" + ns << ",fdp.ruhs=#{fdp_ruhs[nsid]}" + end libvirt.qemuargs :value => "-drive" libvirt.qemuargs :value => "format=raw,file=#{disk},if=none,id=#{nvme_disk_id}-drive#{nsid}" libvirt.qemuargs :value => "-device" - libvirt.qemuargs :value => "nvme-ns,drive=#{nvme_disk_id}-drive#{nsid},bus=#{nvme_disk_id},nsid=#{nsid + 1},zoned=#{zoned},logical_block_size=4096,physical_block_size=4096#{ms}" + libvirt.qemuargs :value => ns } end diff --git a/scripts/vagrant/create_vbox.sh b/scripts/vagrant/create_vbox.sh index eebb53835..78440c6cf 100755 --- a/scripts/vagrant/create_vbox.sh +++ b/scripts/vagrant/create_vbox.sh @@ -34,13 +34,16 @@ display_help() { 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 " -b option can be used multiple times for attaching multiple files to the VM" - echo " Parameters for -b option: ,,,,,," + echo " Parameters for -b option: ,,,,,,," echo " Available types: nvme" echo " Default pmr size: 16M" echo " Default cmb: false" echo " Default zns: false" echo " Default ms: none" - echo " type, ns_path, cmb, pmr, zns and ms can be empty" + echo " Default fdp: 96M:2:8[:1;2;3:1...] (fdp.runs:fdp.nrg:fdp.nruh:fdp.ruhs)" + echo " type, ns_path, cmb, pmr, zns, ms and fdp can be empty" + echo " fdp.ruhs defines fdp.ruhs per ns, e.g.: 4;5;6:1 would set 4;5;6 for ns=1," + echo " and 1 for ns=2." echo " -c Create all above disk, default 0" 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." @@ -204,7 +207,7 @@ if [ -z "$NVME_FILE" ]; then else TMP="" for args in $NVME_FILE; do - while IFS=, read -r path type namespace cmb pmr zns ms; do + while IFS=, read -r path type namespace cmb pmr zns ms fdp; do TMP+="$path," if [ -z "$type" ]; then type="nvme" @@ -215,6 +218,7 @@ else NVME_DISKS_TYPE+="$type," NVME_DISKS_NAMESPACES+="$namespace," NVME_MS+="$ms," + NVME_FDP+="$fdp," if [ ${NVME_AUTO_CREATE} = 1 ]; then $SPDK_DIR/scripts/vagrant/create_nvme_img.sh -n $path fi @@ -238,6 +242,7 @@ if [ ${VERBOSE} = 1 ]; then echo NVME_PMR=$NVME_PMR echo NVME_ZNS=$NVME_ZNS echo NVME_MS=$NVME_MS + echo NVME_FDP=$NVME_FDP echo SPDK_VAGRANT_DISTRO=$SPDK_VAGRANT_DISTRO echo SPDK_VAGRANT_VMCPU=$SPDK_VAGRANT_VMCPU echo SPDK_VAGRANT_VMRAM=$SPDK_VAGRANT_VMRAM @@ -265,6 +270,7 @@ export NVME_CMB export NVME_PMR export NVME_ZNS export NVME_MS +export NVME_FDP export NVME_DISKS_TYPE export NVME_DISKS_NAMESPACES export NVME_FILE