From 3562037277f6f51c7b9ec551d2cf7ca3e13df013 Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Sat, 23 Jan 2021 16:59:56 +0000 Subject: [PATCH 1/2] nightly build: Update kernel versions git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@9337 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- nightly/conf/nightly.conf | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/nightly/conf/nightly.conf b/nightly/conf/nightly.conf index afba9f092..e3b5b3856 100644 --- a/nightly/conf/nightly.conf +++ b/nightly/conf/nightly.conf @@ -3,34 +3,34 @@ ABT_DETAILS="x86_64" ABT_JOBS=5 ABT_KERNELS=" \ -5.10.8 \ +5.10.10 \ 5.9.16-nc \ 5.8.18-nc \ 5.7.19-nc \ 5.6.19-nc \ 5.5.19-nc \ -5.4.90-nc \ +5.4.92-nc \ 5.3.18-nc \ 5.2.21-nc \ 5.1.21-nc \ 5.0.21-nc \ 4.20.17-nc \ -4.19.168-nc \ +4.19.170-nc \ 4.18.20-nc \ 4.17.19-nc \ 4.16.18-nc \ 4.15.18-nc \ -4.14.216-nc \ +4.14.217-nc \ 4.13.16-nc \ 4.12.14-nc \ 4.11.12-nc \ 4.10.17-nc \ -4.9.252-nc \ +4.9.253-nc \ 4.8.17-nc \ 4.7.10-nc \ 4.6.7-nc \ 4.5.7-nc \ -4.4.252-nc \ +4.4.253-nc \ 4.3.6-nc \ 4.2.8-nc \ 4.1.52-nc \ From 5a8db0e00f1f4cad42a3423330c2f2aab5b0fa21 Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Sun, 24 Jan 2021 03:59:03 +0000 Subject: [PATCH 2/2] README.performance: Add to repository git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@9338 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- README.performance | 67 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 README.performance diff --git a/README.performance b/README.performance new file mode 100644 index 000000000..7a41d64dc --- /dev/null +++ b/README.performance @@ -0,0 +1,67 @@ +SCST Performance +================ + +A question that is asked often is how to tune performance. This means how to +improve the IOPS and/or bandwidth measured at the initiator side. In this +README it is explained how to optimize storage performance. + +Local storage +------------- +Start with measuring the performance of the local block device(s). IOPS can be +measured e.g. as follows: + + fio --ioengine=libaio --rw=randread --ioscheduler=none --numjobs=$(nproc) \ + --runtime=60 --group_reporting=1 --gtod_reduce=1 --norandommap \ + --thread --buffered=0 --iodepth=256 --iodepth_batch=128 --bs=4k \ + --name=bdev --filename=/dev/... + +The bandwidth supported by a block device can be measured by increasing the +block size to a larger value in the above command, e.g. --bs=1M. + +Storage network +--------------- +Start with measuring the network bandwidth using your favorite tool, e.g. +netperf for non-RDMA networks or ib_write_bw for RDMA networks. + +Next, add a nullio LUN to SCST, e.g. by adding the following in /etc/scst.conf: + + HANDLER vdisk_nullio { + DEVICE disk09 { + blocksize 4096 + size_mb 256 + } + } + + TARGET_DRIVER ... { + TARGET ... { + LUN ... disk09 + } + } + +After a nullio LUN has been added, verify that this LUN is visible at the +initiator side. If it is not visible at the initiator side, consider +rescanning LUNs or disconnecting and reconnecting the initiator system to the +SCST server. + +Once the nullio LUN is visible at the initiator side, measure IOPS and +bandwidth. The bandwidth should be close to the network bandwidth. When using +the Linux iSCSI initiator this may require configuring multiple iSCSI sessions +and activating multipathd on top of the multiple iSCSI sessions. The sequence +for logging in with iSCSI and activating multiple iSCSI sessions is as follows: + + iscsiadm -m iface -I iface2 -o new + iscsiadm -m iface -I iface2 -o update -n iface.initiatorname -v ${iqn2} + iscsiadm -m discovery -t st -p ${scst_ip_address} + iscsiadm -m discovery -t st -p ${scst_ip_address} -I iface2 + iscsiadm -m node -p ${scst_ip_address} -l + iscsiadm -m node -p ${scst_ip_address} -I iface2 -l + +SCST Configuration +------------------ +If the number of IOPS measured at the initiator side is significantly lower +than the minimum of the IOPS supported by the local storage and the storage +network, further tuning is required. Look up in /proc/interrupts which CPU +cores process the most network and storage interrupts and configure the SCST +kernel threads such that these run on other CPU cores than those that process +the most interrupts by configuring the cpu_mask attribute. More information +about the SCST cpu_mask sysfs attribute is available in the SCST README.