scripts/vagrant: Add support for configuring FDP per nvme

Change-Id: Id647a02b82f7ede25496bbbbc420ef7d13d8f9af
Signed-off-by: Michal Berger <michal.berger@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/17771
Reviewed-by: Shuhei Matsumoto <smatsumoto@nvidia.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
Michal Berger 2023-04-25 15:11:56 +02:00 committed by David Ko
parent 3023e70585
commit 10c815f76c
2 changed files with 37 additions and 5 deletions

View File

@ -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

View File

@ -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: <path>,<type>,<ns_path1[:ns_path1:...]>,<cmb>,<pmr_file[:pmr_size]>,<zns>,<ms>"
echo " Parameters for -b option: <path>,<type>,<ns_path1[:ns_path1:...]>,<cmb>,<pmr_file[:pmr_size]>,<zns>,<ms>,<fdp>"
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