xref: /spdk/test/compress/compress.sh (revision b30d57cdad6d2bc75cc1e4e2ebbcebcb0d98dcfa)
1#!/usr/bin/env bash
2
3set -e
4
5testdir=$(readlink -f $(dirname $0))
6rootdir=$(readlink -f $testdir/../..)
7plugindir=$rootdir/examples/bdev/fio_plugin
8rpc_py="$rootdir/scripts/rpc.py"
9source "$rootdir/scripts/common.sh"
10source "$rootdir/test/common/autotest_common.sh"
11source "$rootdir/test/nvmf/common.sh"
12
13function error_cleanup() {
14	# force delete pmem file and wipe on-disk metadata
15	rm -rf /tmp/pmem
16	$SPDK_EXAMPLE_DIR/perf -q 1 -o 131072 -w write -t 2
17}
18
19function destroy_vols() {
20	# Gracefully destroy the vols via bdev_compress_delete API.
21	# bdev_compress_delete will delete the on-disk metadata as well as
22	# the persistent memory file containing its metadata.
23	$rpc_py bdev_compress_delete COMP_lvs0/lv0
24	$rpc_py bdev_lvol_delete_lvstore -l lvs0
25}
26
27function create_vols() {
28	$rootdir/scripts/gen_nvme.sh | $rpc_py load_subsystem_config
29	waitforbdev Nvme0n1
30
31	$rpc_py bdev_lvol_create_lvstore Nvme0n1 lvs0
32	$rpc_py bdev_lvol_create -t -l lvs0 lv0 100
33	waitforbdev lvs0/lv0
34
35	$rpc_py compress_set_pmd -p "$pmd"
36	if [ -z "$1" ]; then
37		$rpc_py bdev_compress_create -b lvs0/lv0 -p /tmp/pmem
38	else
39		$rpc_py bdev_compress_create -b lvs0/lv0 -p /tmp/pmem -l $1
40	fi
41	waitforbdev COMP_lvs0/lv0
42}
43
44function run_bdevio() {
45	$rootdir/test/bdev/bdevio/bdevio -w &
46	bdevio_pid=$!
47	trap 'killprocess $bdevio_pid; error_cleanup; exit 1' SIGINT SIGTERM EXIT
48	waitforlisten $bdevio_pid
49	create_vols
50	$rootdir/test/bdev/bdevio/tests.py perform_tests
51	destroy_vols
52	trap - SIGINT SIGTERM EXIT
53	killprocess $bdevio_pid
54}
55
56function run_bdevperf() {
57	$rootdir/test/bdev/bdevperf/bdevperf -z -q $1 -o $2 -w verify -t $3 -C -m 0x6 &
58	bdevperf_pid=$!
59	trap 'killprocess $bdevperf_pid; error_cleanup; exit 1' SIGINT SIGTERM EXIT
60	waitforlisten $bdevperf_pid
61	create_vols $4
62	$rootdir/test/bdev/bdevperf/bdevperf.py perform_tests
63	destroy_vols
64	trap - SIGINT SIGTERM EXIT
65	killprocess $bdevperf_pid
66}
67
68test_type=$1
69case "$test_type" in
70	qat)
71		pmd=1
72		;;
73	isal)
74		pmd=2
75		;;
76	*)
77		echo "invalid pmd name"
78		exit 1
79		;;
80esac
81
82mkdir -p /tmp/pmem
83
84# per patch bdevperf uses slightly different params than nightly
85# logical block size same as underlying device, then 512 then 4096
86run_bdevperf 32 4096 3
87run_bdevperf 32 4096 3 512
88run_bdevperf 32 4096 3 4096
89
90if [ $RUN_NIGHTLY -eq 1 ]; then
91	run_bdevio
92	run_bdevperf 64 16384 30
93
94	# run perf on nvmf target w/compressed vols
95	export TEST_TRANSPORT=tcp && nvmftestinit
96	nvmfappstart -m 0x7
97	trap "nvmftestfini; error_cleanup; exit 1" SIGINT SIGTERM EXIT
98
99	# Create an NVMe-oF subsystem and add compress bdevs as namespaces
100	$rpc_py nvmf_create_transport -t $TEST_TRANSPORT -u 8192
101	create_vols
102	$rpc_py nvmf_subsystem_create nqn.2016-06.io.spdk:cnode0 -a -s SPDK0
103	$rpc_py nvmf_subsystem_add_ns nqn.2016-06.io.spdk:cnode0 COMP_lvs0/lv0
104	$rpc_py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode0 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT
105
106	# Start random read writes in the background
107	$SPDK_EXAMPLE_DIR/perf -r "trtype:$TEST_TRANSPORT adrfam:IPv4 traddr:$NVMF_FIRST_TARGET_IP trsvcid:$NVMF_PORT" -o 4096 -q 64 -s 512 -w randrw -t 30 -c 0x18 -M 50 &
108	perf_pid=$!
109
110	# Wait for I/O to complete
111	trap 'killprocess $perf_pid; compress_err_cleanup; exit 1' SIGINT SIGTERM EXIT
112	wait $perf_pid
113	destroy_vols
114
115	trap - SIGINT SIGTERM EXIT
116	nvmftestfini
117fi
118
119rm -rf /tmp/pmem
120