Skip to content

Commit 43e7e51

Browse files
author
Rafal Stefanowski
committed
Add integrity tests
Change-Id: Ie01d40cebf469df6d84f5689b2767f6aa7f3721c Signed-off-by: Rafal Stefanowski <[email protected]>
1 parent 966b940 commit 43e7e51

File tree

7 files changed

+335
-73
lines changed

7 files changed

+335
-73
lines changed

test/ocf/common.sh

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
source "$rootdir/test/common/autotest_common.sh"
88

99
rpc_py="$rootdir/scripts/rpc.py"
10+
bdevperf_py="$rootdir/examples/bdev/bdevperf/bdevperf.py"
1011

1112
# Change those depending on physical persistent storage availability:
1213
persistent_cache_addr=(05:00.0 06:00.0 08:00.0)
@@ -71,6 +72,18 @@ stop_spdk() {
7172
killprocess $spdk_pid
7273
}
7374

75+
start_bdevperf() {
76+
"$SPDK_EXAMPLE_DIR/bdevperf" -z "$@" &
77+
bdevperf_pid=$!
78+
trap 'killprocess $bdevperf_pid; exit 1' SIGINT SIGTERM EXIT
79+
waitforlisten $bdevperf_pid
80+
}
81+
82+
stop_bdevperf() {
83+
trap - SIGINT SIGTERM EXIT
84+
killprocess $bdevperf_pid
85+
}
86+
7487
create_caches() {
7588
for i in {1..3}; do
7689
$rpc_py bdev_malloc_create -b Cache_dev$i 100 512
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
{
2+
"subsystems": [
3+
{
4+
"subsystem": "bdev",
5+
"config": [
6+
{
7+
"method": "bdev_malloc_create",
8+
"params": {
9+
"name": "Mal_cache",
10+
"num_blocks": 409600,
11+
"block_size": 512
12+
}
13+
},
14+
{
15+
"method": "bdev_malloc_create",
16+
"params": {
17+
"name": "Mal_core1",
18+
"num_blocks": 819200,
19+
"block_size": 512
20+
}
21+
},
22+
{
23+
"method": "bdev_malloc_create",
24+
"params": {
25+
"name": "Mal_core2",
26+
"num_blocks": 819200,
27+
"block_size": 512
28+
}
29+
},
30+
{
31+
"method": "bdev_ocf_start_cache",
32+
"params": {
33+
"cache_name": "Ocf_cache",
34+
"base_name": "Mal_cache",
35+
"cache_mode": "wt",
36+
"cache_line_size": 4096,
37+
"no_load": true
38+
}
39+
},
40+
{
41+
"method": "bdev_ocf_add_core",
42+
"params": {
43+
"core_name": "Ocf_core1",
44+
"base_name": "Mal_core1",
45+
"cache_name": "Ocf_cache"
46+
}
47+
},
48+
{
49+
"method": "bdev_ocf_add_core",
50+
"params": {
51+
"core_name": "Ocf_core2",
52+
"base_name": "Mal_core2",
53+
"cache_name": "Ocf_cache"
54+
}
55+
},
56+
{
57+
"method": "bdev_wait_for_examine"
58+
}
59+
]
60+
}
61+
]
62+
}

test/ocf/integrity/flush.sh

Lines changed: 39 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,84 +1,50 @@
11
#!/usr/bin/env bash
2+
3+
#
24
# SPDX-License-Identifier: BSD-3-Clause
3-
# Copyright (C) 2021 Intel Corporation.
5+
# Copyright (C) 2025 Huawei Technologies
46
# All rights reserved.
7+
#
58

69
curdir=$(dirname $(readlink -f "${BASH_SOURCE[0]}"))
7-
rootdir=$(readlink -f $curdir/../../..)
8-
source $rootdir/test/common/autotest_common.sh
10+
rootdir=$(readlink -f "$curdir/../../..")
11+
source "$rootdir/test/ocf/common.sh"
912

10-
bdevperf=$rootdir/build/examples/bdevperf
11-
rpc_py="$rootdir/scripts/rpc.py -s /var/tmp/spdk.sock"
13+
devices=("Ocf_cache" "Ocf_core1" "Ocf_core2")
14+
cache_modes=("wb" "wo")
15+
io_patterns=("write" "rw" "randwrite" "randrw")
16+
io_depth=128
17+
io_size=4096
18+
rw_mix=50
19+
runtime=10
1220

1321
check_flush_in_progress() {
14-
$rpc_py bdev_ocf_flush_status MalCache0 \
15-
| jq -e '.in_progress' > /dev/null
22+
$rpc_py bdev_ocf_get_bdevs $1 | jq -e '.flush.in_progress' > /dev/null
1623
}
1724

18-
bdevperf_config() {
19-
local config
20-
21-
config="$(
22-
cat <<- JSON
23-
{
24-
"method": "bdev_malloc_create",
25-
"params": {
26-
"name": "Malloc0",
27-
"num_blocks": 102400,
28-
"block_size": 512
29-
}
30-
},
31-
{
32-
"method": "bdev_malloc_create",
33-
"params": {
34-
"name": "Malloc1",
35-
"num_blocks": 1024000,
36-
"block_size": 512
37-
}
38-
},
39-
{
40-
"method": "bdev_ocf_create",
41-
"params": {
42-
"name": "MalCache0",
43-
"mode": "wb",
44-
"cache_line_size": 4,
45-
"cache_bdev_name": "Malloc0",
46-
"core_bdev_name": "Malloc1"
47-
}
48-
}
49-
JSON
50-
)"
51-
52-
jq . <<- JSON
53-
{
54-
"subsystems": [
55-
{
56-
"subsystem": "bdev",
57-
"config": [
58-
$(
59-
IFS=","
60-
printf '%s\n' "$config"
61-
),
62-
{
63-
"method": "bdev_wait_for_examine"
64-
}
65-
]
66-
}
67-
]
68-
}
69-
JSON
70-
}
71-
72-
$bdevperf --json <(bdevperf_config) -q 128 -o 4096 -w write -t 120 -r /var/tmp/spdk.sock &
73-
bdevperf_pid=$!
74-
trap 'killprocess $bdevperf_pid' SIGINT SIGTERM EXIT
75-
waitforlisten $bdevperf_pid
76-
sleep 5
77-
78-
$rpc_py bdev_ocf_flush_start MalCache0
79-
sleep 1
80-
81-
while check_flush_in_progress; do
82-
sleep 1
25+
start_bdevperf -c "$curdir/bdev_config.json"
26+
$rpc_py bdev_ocf_set_seqcutoff Ocf_cache --policy never
27+
$rpc_py bdev_ocf_set_promotion Ocf_cache --policy always
28+
$rpc_py bdev_ocf_set_cleaning Ocf_cache --policy nop
29+
30+
for cache_mode in "${cache_modes[@]}"; do
31+
$rpc_py bdev_ocf_set_cachemode Ocf_cache $cache_mode
32+
for ip in "${io_patterns[@]}"; do
33+
for dev in "${devices[@]}"; do
34+
$bdevperf_py perform_tests -t $runtime -q $io_depth -o $io_size \
35+
-w $ip $([[ $ip =~ rw$ ]] && echo "-M $rw_mix")
36+
for dv in "${devices[@]}"; do
37+
$rpc_py bdev_ocf_get_stats $dv | jq -e '.usage | .dirty.count > .clean.count'
38+
done
39+
40+
$rpc_py bdev_ocf_flush_start $dev
41+
while check_flush_in_progress $dev; do
42+
sleep 1
43+
done
44+
45+
$rpc_py bdev_ocf_get_bdevs $dev | jq -e '.flush.error == 0'
46+
$rpc_py bdev_ocf_get_stats $dev | jq -e '.usage | .dirty.count == 0'
47+
done
48+
done
8349
done
84-
$rpc_py bdev_ocf_flush_status MalCache0 | jq -e '.status == 0'
50+
stop_bdevperf

test/ocf/integrity/io_stats.sh

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
#!/usr/bin/env bash
2+
3+
#
4+
# SPDX-License-Identifier: BSD-3-Clause
5+
# Copyright (C) 2025 Huawei Technologies
6+
# All rights reserved.
7+
#
8+
9+
curdir=$(dirname $(readlink -f "${BASH_SOURCE[0]}"))
10+
rootdir=$(readlink -f "$curdir/../../..")
11+
source "$rootdir/test/ocf/common.sh"
12+
13+
io_patterns=("read" "write" "rw" "randread" "randwrite" "randrw" "unmap" "flush")
14+
io_depth=(1 16 128)
15+
io_size=(512 4096)
16+
rw_mix=50
17+
runtime=10
18+
cpu_mask=0xF
19+
20+
start_bdevperf -c "$curdir/bdev_config.json" -m $cpu_mask -C
21+
for cache_mode in "${cache_modes[@]}"; do
22+
$rpc_py bdev_ocf_set_cachemode Ocf_cache $cache_mode
23+
for id in "${io_depth[@]}"; do
24+
for is in "${io_size[@]}"; do
25+
for ip in "${io_patterns[@]}"; do
26+
$rpc_py bdev_ocf_reset_stats Ocf_cache
27+
test_results=$($bdevperf_py perform_tests -t $runtime -q $id \
28+
-o $is -w $ip $([[ $ip =~ rw$ ]] && echo "-M $rw_mix"))
29+
stats_core1=$($rpc_py bdev_ocf_get_stats Ocf_core1)
30+
stats_core2=$($rpc_py bdev_ocf_get_stats Ocf_core2)
31+
32+
xtrace_disable
33+
reqs_sent_core1=$(echo $test_results | jq -e \
34+
'[.results[] | select(.job == "Ocf_core1") |
35+
.runtime * .iops] | add | round')
36+
reqs_sent_core2=$(echo $test_results | jq -e \
37+
'[.results[] | select(.job == "Ocf_core2") |
38+
.runtime * .iops] | add | round')
39+
reqs_recv_rd_core1=$(echo $stats_core1 | jq -e \
40+
'.requests | .rd_total.count + .rd_pt.count')
41+
reqs_recv_rd_core2=$(echo $stats_core2 | jq -e \
42+
'.requests | .rd_total.count + .rd_pt.count')
43+
reqs_recv_wr_core1=$(echo $stats_core1 | jq -e \
44+
'.requests | .wr_total.count + .wr_pt.count')
45+
reqs_recv_wr_core2=$(echo $stats_core2 | jq -e \
46+
'.requests | .wr_total.count + .wr_pt.count')
47+
reqs_recv_total_core1=$(echo $stats_core1 | jq -e '.requests.total.count')
48+
reqs_recv_total_core2=$(echo $stats_core2 | jq -e '.requests.total.count')
49+
xtrace_restore
50+
51+
if [[ $ip == "unmap" || $ip == "flush" ]]; then
52+
continue;
53+
elif [[ $ip =~ read$ ]]; then
54+
[ $reqs_recv_rd_core1 -eq $reqs_sent_core1 ]
55+
[ $reqs_recv_rd_core2 -eq $reqs_sent_core2 ]
56+
[ $reqs_recv_wr_core1 -eq 0 ]
57+
[ $reqs_recv_wr_core2 -eq 0 ]
58+
elif [[ $ip =~ write$ ]]; then
59+
[ $reqs_recv_rd_core1 -eq 0 ]
60+
[ $reqs_recv_rd_core2 -eq 0 ]
61+
[ $reqs_recv_wr_core1 -eq $reqs_sent_core1 ]
62+
[ $reqs_recv_wr_core2 -eq $reqs_sent_core2 ]
63+
elif [[ $ip =~ rw$ ]]; then
64+
[ $reqs_recv_rd_core1 -gt 0 ]
65+
[ $reqs_recv_rd_core2 -gt 0 ]
66+
[ $reqs_recv_wr_core1 -gt 0 ]
67+
[ $reqs_recv_wr_core2 -gt 0 ]
68+
reqs_rw_recv_core1=$((reqs_recv_rd_core1 + reqs_recv_wr_core1))
69+
reqs_rw_recv_core2=$((reqs_recv_rd_core2 + reqs_recv_wr_core2))
70+
[ $reqs_rw_recv_core1 -eq $reqs_sent_core1 ]
71+
[ $reqs_rw_recv_core2 -eq $reqs_sent_core2 ]
72+
fi
73+
74+
[ $reqs_recv_total_core1 -eq $reqs_sent_core1 ]
75+
[ $reqs_recv_total_core2 -eq $reqs_sent_core2 ]
76+
done
77+
done
78+
done
79+
done
80+
stop_bdevperf

0 commit comments

Comments
 (0)