Skip to content

Commit ed2e014

Browse files
author
Shachar Sharon
committed
testcases/containers: use 'fio' utility
Use a wrapper shell script over 'fio' + a container to perform a set of I/O testing. Execute both I/O throughput workload as well as random I/O with data verification. Signed-off-by: Shachar Sharon <[email protected]>
1 parent 4af2ed3 commit ed2e014

File tree

4 files changed

+137
-0
lines changed

4 files changed

+137
-0
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#Version: 0.0.1
2+
FROM quay.io/centos/centos:stream10
3+
ENV REFRESHED_AT 2025-09-03-01
4+
WORKDIR /
5+
RUN dnf install -y fio
6+
COPY run_fio.sh ./
7+
RUN install -m 00775 ./run_fio.sh /bin
8+
CMD ["/bin/run_fio.sh"]
9+
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
CONTAINER_CMD ?= podman
2+
IMG_PREFIX := quay.io/samba.org/sit-test-cases
3+
IMG_TAG := fio
4+
IMG := $(IMG_PREFIX):$(IMG_TAG)
5+
6+
7+
build:
8+
$(CONTAINER_CMD) build --file $(CURDIR)/Containerfile --tag $(IMG)
9+
10+
push:
11+
$(CONTAINER_CMD) push $(IMG)
12+
13+
clean:
14+
$(CONTAINER_CMD) rmi --force $(IMG)
15+
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
#!/usr/bin/env bash
2+
set -o nounset
3+
set -o pipefail
4+
export LC_ALL=C
5+
unset CDPATH
6+
7+
# Global parameters
8+
SELF=$(basename "${BASH_SOURCE[0]}")
9+
FIO_SIZE="${FIO_SIZE:-1G}"
10+
FIO_RUNTIME="${FIO_RUNTIME:-120}"
11+
FIO_TESTDIR="${1:-"/testdir"}"
12+
13+
# Helper functions
14+
_msg() {
15+
echo "${SELF}: $*" >&2
16+
}
17+
18+
_die() {
19+
_msg "$*"
20+
exit 1
21+
}
22+
23+
_run() {
24+
_msg "$*"
25+
( "$@" ) || _die "failed: $*"
26+
}
27+
28+
# Run fio with basic workloads
29+
_fio_simple() {
30+
local name="${FUNCNAME[1]}"
31+
32+
# Run fio with json output format
33+
_run fio \
34+
--name="${name}" \
35+
--size="${FIO_SIZE}" \
36+
--directory="${FIO_TESTDIR}" \
37+
--runtime="${FIO_RUNTIME}" \
38+
--ioengine=pvsync2 \
39+
--group_reporting \
40+
--time_based \
41+
--sync=1 \
42+
--direct=0 \
43+
--rw=readwrite \
44+
--output-format=json \
45+
"$@"
46+
47+
# Cleanup leftovers
48+
rm -f "${FIO_TESTDIR}/${name}*"
49+
}
50+
51+
fio_simple_64k() {
52+
_fio_simple --bs=64K --numjobs=1
53+
}
54+
55+
fio_simple_1m() {
56+
_fio_simple --bs=1M --numjobs=1
57+
}
58+
59+
fio_simple_nproc() {
60+
_fio_simple --bs=8K --numjobs="$(nproc)"
61+
}
62+
63+
# Run fio with verify workloads
64+
_fio_verify() {
65+
local name="${FUNCNAME[1]}"
66+
67+
# Run fio in verify mode
68+
_run fio \
69+
--name="${name}" \
70+
--size="${FIO_SIZE}" \
71+
--directory="${FIO_TESTDIR}" \
72+
--ioengine=pvsync2 \
73+
--group_reporting \
74+
--sync=1 \
75+
--direct=0 \
76+
--rw=randwrite \
77+
--do_verify=1 \
78+
--verify_state_save=0 \
79+
--verify=xxhash \
80+
--output-format=json \
81+
"$@"
82+
83+
# Cleanup leftovers
84+
rm -f "${FIO_TESTDIR}/${name}*"
85+
}
86+
87+
fio_verify_64k() {
88+
_fio_verify --bs=64K --numjobs=1
89+
}
90+
91+
fio_verify_1m() {
92+
_fio_verify --bs=1M --numjobs=1
93+
}
94+
95+
fio_verify_nproc() {
96+
_fio_verify --bs=64K --numjobs="$(nproc)"
97+
}
98+
99+
fio_version() {
100+
_run fio --version
101+
}
102+
103+
# Tests
104+
fio_version
105+
fio_simple_64k
106+
fio_simple_1m
107+
fio_simple_nproc
108+
fio_verify_64k
109+
fio_verify_1m
110+
fio_verify_nproc
111+

testcases/containers/test_containers.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,5 @@
33
url: "quay.io/samba.org/sit-test-cases:smallfiles"
44
- name: "ltp"
55
url: "quay.io/samba.org/sit-test-cases:ltp"
6+
- name: "fio"
7+
url: "quay.io/samba.org/sit-test-cases:fio"

0 commit comments

Comments
 (0)