Skip to content

Commit 7616b48

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 c79de0d commit 7616b48

File tree

4 files changed

+138
-0
lines changed

4 files changed

+138
-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: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
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_VERIFY_SIZE="${FIO_VERIFY_SIZE:-256M}"
11+
FIO_RUNTIME="${FIO_RUNTIME:-120}"
12+
FIO_TESTDIR="${1:-"/testdir"}"
13+
14+
# Helper functions
15+
_msg() {
16+
echo "${SELF}: $*" >&2
17+
}
18+
19+
_die() {
20+
_msg "$*"
21+
exit 1
22+
}
23+
24+
_run() {
25+
_msg "$*"
26+
( "$@" ) || _die "failed: $*"
27+
}
28+
29+
# Run fio with basic workloads
30+
_fio_simple() {
31+
local name="${FUNCNAME[1]}"
32+
33+
# Run fio with json output format
34+
_run fio \
35+
--name="${name}" \
36+
--size="${FIO_SIZE}" \
37+
--directory="${FIO_TESTDIR}" \
38+
--runtime="${FIO_RUNTIME}" \
39+
--ioengine=pvsync2 \
40+
--group_reporting \
41+
--time_based \
42+
--sync=1 \
43+
--direct=0 \
44+
--rw=readwrite \
45+
--output-format=json \
46+
"$@"
47+
48+
# Cleanup leftovers
49+
rm -f "${FIO_TESTDIR}/${name}*"
50+
}
51+
52+
fio_simple_64k() {
53+
_fio_simple --bs=64K --numjobs=1
54+
}
55+
56+
fio_simple_1m() {
57+
_fio_simple --bs=1M --numjobs=1
58+
}
59+
60+
fio_simple_4jobs() {
61+
_fio_simple --bs=8K --numjobs=4
62+
}
63+
64+
# Run fio with verify workloads
65+
_fio_verify() {
66+
local name="${FUNCNAME[1]}"
67+
68+
# Run fio in verify mode
69+
_run fio \
70+
--name="${name}" \
71+
--size="${FIO_VERIFY_SIZE}" \
72+
--directory="${FIO_TESTDIR}" \
73+
--ioengine=pvsync2 \
74+
--group_reporting \
75+
--sync=1 \
76+
--direct=0 \
77+
--rw=randwrite \
78+
--do_verify=1 \
79+
--verify_state_save=0 \
80+
--verify=xxhash \
81+
--output-format=json \
82+
"$@"
83+
84+
# Cleanup leftovers
85+
rm -f "${FIO_TESTDIR}/${name}*"
86+
}
87+
88+
fio_verify_64k() {
89+
_fio_verify --bs=64K --numjobs=1
90+
}
91+
92+
fio_verify_1m() {
93+
_fio_verify --bs=1M --numjobs=1
94+
}
95+
96+
fio_verify_4jobs() {
97+
_fio_verify --bs=64K --numjobs=4
98+
}
99+
100+
fio_version() {
101+
_run fio --version
102+
}
103+
104+
# Tests
105+
fio_version
106+
fio_simple_64k
107+
fio_simple_1m
108+
fio_simple_4jobs
109+
fio_verify_64k
110+
fio_verify_1m
111+
fio_verify_4jobs
112+

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)