test/iscsi_tgt: Add iscsi performance test.
Change-Id: I6d236c91e9624f61b235c10f076ed43341a34d74 Signed-off-by: Pawel Niedzwiecki <pawelx.niedzwiecki@intel.com> Reviewed-on: https://review.gerrithub.io/404757 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: John Kariuki <John.K.Kariuki@intel.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@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
23a95386c8
commit
ebac2feba5
10
test/iscsi_tgt/perf/iscsi.conf
Normal file
10
test/iscsi_tgt/perf/iscsi.conf
Normal file
@ -0,0 +1,10 @@
|
||||
[Global]
|
||||
|
||||
[iSCSI]
|
||||
NodeBase "iqn.2016-06.io.spdk"
|
||||
AuthFile /usr/local/etc/spdk/auth.conf
|
||||
Timeout 30
|
||||
DiscoveryAuthMethod Auto
|
||||
MaxSessions 16
|
||||
ImmediateData Yes
|
||||
ErrorRecoveryLevel 0
|
37
test/iscsi_tgt/perf/iscsi_initiator.sh
Normal file
37
test/iscsi_tgt/perf/iscsi_initiator.sh
Normal file
@ -0,0 +1,37 @@
|
||||
#!/usr/bin/env bash
|
||||
testdir=$(readlink -f $(dirname $0))
|
||||
ISCSI_PORT=3260
|
||||
FIO_PATH=$1
|
||||
IP_T=$2
|
||||
|
||||
set -xe
|
||||
trap "exit 1" ERR SIGTERM SIGABRT
|
||||
|
||||
if [ ! -x $FIO_PATH/fio ]; then
|
||||
error "Invalid path of fio binary"
|
||||
fi
|
||||
|
||||
function run_spdk_iscsi_fio(){
|
||||
$FIO_PATH/fio $testdir/perf.job "$@" --output-format=json
|
||||
}
|
||||
|
||||
mkdir -p $testdir/perf_output
|
||||
iscsi_fio_results="$testdir/perf_output/iscsi_fio.json"
|
||||
trap "iscsiadm -m node --logout; iscsiadm -m node -o delete; exit 1" ERR SIGTERM SIGABRT
|
||||
iscsiadm -m discovery -t sendtargets -p $IP_T:$ISCSI_PORT
|
||||
iscsiadm -m node --login -p $IP_T:$ISCSI_PORT
|
||||
sleep 1
|
||||
|
||||
disks=($(iscsiadm -m session -P 3 | grep "Attached scsi disk" | awk '{print $4}'))
|
||||
for (( i=0; i < ${#disks[@]}; i++ ))
|
||||
do
|
||||
filename+=$(printf /dev/%s: "${disks[i]}")
|
||||
echo noop > /sys/block/${disks[i]}/queue/scheduler
|
||||
echo "2" > /sys/block/${disks[i]}/queue/nomerges
|
||||
echo "1024" > /sys/block/${disks[i]}/queue/nr_requests
|
||||
done
|
||||
|
||||
run_spdk_iscsi_fio --filename=$filename "--output=$iscsi_fio_results"
|
||||
|
||||
iscsiadm -m node --logout || true
|
||||
iscsiadm -m node -o delete || true
|
118
test/iscsi_tgt/perf/iscsi_target.sh
Executable file
118
test/iscsi_tgt/perf/iscsi_target.sh
Executable file
@ -0,0 +1,118 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
|
||||
BLK_SIZE=4096
|
||||
RW=randrw
|
||||
MIX=100
|
||||
IODEPTH=128
|
||||
RUNTIME=60
|
||||
RAMP_TIME=10
|
||||
FIO_PATH="/usr/src/fio"
|
||||
DISKNO="ALL"
|
||||
CPUMASK=0x02
|
||||
NUM_JOBS=1
|
||||
ISCSI_TGT_CM=0x02
|
||||
. $(readlink -e "$(dirname $0)/../common.sh")
|
||||
|
||||
# Performance test for iscsi_tgt, run on devices with proper hardware support (target and inititator)
|
||||
function usage()
|
||||
{
|
||||
[[ ! -z $2 ]] && ( echo "$2"; echo ""; )
|
||||
echo "Usage: $(basename $1) [options]"
|
||||
echo "-h, --help Print help and exit"
|
||||
echo " --fiopath=PATH Path to fio directory on initiator. [default=$FIO_PATH]"
|
||||
echo " --disk_no=INT,ALL Number of disks to test on, if =ALL then test on all found disks. [default=$DISKNO]"
|
||||
echo " --target_ip=IP The IP address of target used for test."
|
||||
echo " --initiator_ip=IP The IP address of initiator used for test."
|
||||
echo " --init_mgmnt_ip=IP The IP address of initiator used for communication."
|
||||
echo " --iscsi_tgt_mask=HEX iscsi_tgt core mask. [default=$ISCSI_TGT_CM]"
|
||||
}
|
||||
|
||||
while getopts 'h-:' optchar; do
|
||||
case "$optchar" in
|
||||
-)
|
||||
case "$OPTARG" in
|
||||
help) usage $0; exit 0 ;;
|
||||
fiopath=*) FIO_BIN="${OPTARG#*=}" ;;
|
||||
disk_no=*) DISKNO="${OPTARG#*=}" ;;
|
||||
target_ip=*) TARGET_IP="${OPTARG#*=}" ;;
|
||||
initiator_ip=*) INITIATOR_IP="${OPTARG#*=}" ;;
|
||||
init_mgmnt_ip=*) IP_I_SSH="${OPTARG#*=}" ;;
|
||||
iscsi_tgt_mask=*) ISCSI_TGT_CM="${OPTARG#*=}" ;;
|
||||
*) usage $0 echo "Invalid argument '$OPTARG'"; exit 1 ;;
|
||||
esac
|
||||
;;
|
||||
h) usage $0; exit 0 ;;
|
||||
*) usage $0 "Invalid argument '$optchar'"; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
. $(readlink -e "$(dirname $0)/../../common/autotest_common.sh") || exit 1
|
||||
testdir=$(readlink -f $(dirname $0))
|
||||
rootdir=$(readlink -f $testdir/../../..)
|
||||
|
||||
if [ -z "$TARGET_IP" ]; then
|
||||
error "No IP address of iscsi target is given"
|
||||
fi
|
||||
|
||||
if [ -z "$INITIATOR_IP" ]; then
|
||||
error "No IP address of iscsi initiator is given"
|
||||
fi
|
||||
|
||||
if [ -z "$IP_I_SSH" ]; then
|
||||
error "No IP address of initiator is given"
|
||||
fi
|
||||
|
||||
if [ $EUID -ne 0 ]; then
|
||||
error "INFO: This script must be run with root privileges"
|
||||
fi
|
||||
|
||||
function ssh_initiator(){
|
||||
ssh -i $HOME/.ssh/spdk_vhost_id_rsa root@$IP_I_SSH "$@"
|
||||
}
|
||||
|
||||
NETMASK=$INITIATOR_IP/32
|
||||
rpc_py="python $rootdir/scripts/rpc.py -s $testdir/rpc_iscsi.sock"
|
||||
iscsi_fio_results="$testdir/perf_output/iscsi_fio.json"
|
||||
rm -rf $iscsi_fio_results
|
||||
mkdir -p $testdir/perf_output
|
||||
touch $iscsi_fio_results
|
||||
|
||||
timing_enter run_iscsi_app
|
||||
$rootdir/app/iscsi_tgt/iscsi_tgt -m $ISCSI_TGT_CM -r $testdir/rpc_iscsi.sock -c $testdir/iscsi.conf &
|
||||
pid=$!
|
||||
trap "rm -f $testdir/perf.job; killprocess $pid; print_backtrace; exit 1" ERR SIGTERM SIGABRT
|
||||
waitforlisten "$pid" "$testdir/rpc_iscsi.sock"
|
||||
$rootdir/scripts/gen_nvme.sh --json | $rpc_py load_subsystem_config
|
||||
sleep 1
|
||||
timing_exit run_iscsi_app
|
||||
|
||||
timing_enter iscsi_config
|
||||
bdevs=($($rpc_py get_bdevs | jq -r '.[].name'))
|
||||
if [ $DISKNO == "ALL" ] || [ $DISKNO == "all" ]; then
|
||||
DISKNO=${#bdevs[@]}
|
||||
elif [ $DISKNO -gt ${#bdevs[@]} ] || [ ! $DISKNO =~ ^[0-9]+$ ]; then
|
||||
error "Required device number ($DISKNO) is not a valid number or it's larger than the number of devices found (${#bdevs[@]})"
|
||||
fi
|
||||
|
||||
$rpc_py add_portal_group $PORTAL_TAG $TARGET_IP:$ISCSI_PORT
|
||||
$rpc_py add_initiator_group $INITIATOR_TAG $INITIATOR_NAME $NETMASK
|
||||
|
||||
for (( i=0; i < $DISKNO; i++ ))
|
||||
do
|
||||
$rpc_py construct_target_node Target${i} Target${i}_alias "${bdevs[i]}:0" "$PORTAL_TAG:$INITIATOR_TAG" 64 -d
|
||||
done
|
||||
|
||||
cat $testdir/perf.job | ssh_initiator "cat > perf.job"
|
||||
rm -f $testdir/perf.job
|
||||
timing_exit iscsi_config
|
||||
|
||||
timing_enter iscsi_initiator
|
||||
ssh_initiator bash -s - < $testdir/iscsi_initiator.sh $FIO_PATH $TARGET_IP
|
||||
timing_exit iscsi_initiator
|
||||
|
||||
ssh_initiator "cat perf_output/iscsi_fio.json" > $iscsi_fio_results
|
||||
ssh_initiator "rm -rf perf_output perf.job"
|
||||
|
||||
killprocess $pid
|
19
test/iscsi_tgt/perf/perf.job
Normal file
19
test/iscsi_tgt/perf/perf.job
Normal file
@ -0,0 +1,19 @@
|
||||
[global]
|
||||
thread=1
|
||||
group_reporting=1
|
||||
direct=1
|
||||
norandommap=1
|
||||
ioengine=libaio
|
||||
percentile_list=50:90:99:99.5:99.9:99.99:99.999
|
||||
|
||||
[4k_rand_read_qd_128]
|
||||
stonewall
|
||||
time_based=1
|
||||
runtime=60
|
||||
ramp_time=10
|
||||
bs=4096
|
||||
rw=randrw
|
||||
rwmixread=100
|
||||
iodepth=128
|
||||
cpumask=0x02
|
||||
numjobs=1
|
Loading…
Reference in New Issue
Block a user