Files
honghua e2e680831c fix: add executable permission bit for all 3963 .sh test scripts
All .sh files under tests/ lacked the Git executable permission bit
(100644 instead of 100755), causing tmt run to fail with 'permission
denied' errors on Linux servers.

Fixes: woqidaideshi/openruyi-autotest#80
2026-07-06 14:36:45 +08:00

95 lines
3.4 KiB
Bash
Executable File

# library-prefix = perf_iozone
#
# IOzone filesystem benchmark suite-level shared library
# Installs iozone, provides result parsing helpers.
#
# IOzone measures filesystem I/O performance with various
# access patterns: sequential/random read/write, etc.
#
# Key parameters:
# -a Auto mode (tests record sizes 4k-16M, files 64k-512M)
# -c Include close() in timing
# -I Direct I/O (bypass page cache)
# -s SIZE File size (e.g., 128m, 1g)
# -r SIZE Record size (e.g., 4k, 16m)
# -f FILE Test file path
#
# Result: throughput in kBytes/sec for each operation type
#
# Usage: . "$(dirname "$0")/../lib.sh"
IOZONE_FLAG="/tmp/.beakerlib_iozone_suite"
iozoneSetup() {
if [ ! -f "$IOZONE_FLAG" ]; then
if ! rpm -q iozone 2>/dev/null; then
echo openruyi | sudo -S dnf install -y iozone 2>/dev/null
if ! rpm -q iozone 2>/dev/null; then
rlLogWarning "iozone 安装失败"
echo "installed=0" > "$IOZONE_FLAG"
else
echo "installed=1" > "$IOZONE_FLAG"
rlLogInfo "已安装 iozone"
fi
else
echo "installed=0" > "$IOZONE_FLAG"
rlLogInfo "iozone 已存在"
fi
echo "ref=1" >> "$IOZONE_FLAG"
else
local ref
ref=$(grep "^ref=" "$IOZONE_FLAG" | cut -d= -f2)
ref=$((ref + 1))
sed -i "s/^ref=.*/ref=$ref/" "$IOZONE_FLAG"
rlLogInfo "iozone 引用计数: $ref"
fi
rlCleanupAppend "iozoneCleanup"
}
iozoneCleanup() {
if [ ! -f "$IOZONE_FLAG" ]; then return 0; fi
local ref
ref=$(grep "^ref=" "$IOZONE_FLAG" | cut -d= -f2)
ref=$((ref - 1))
if [ "$ref" -le 0 ]; then
if grep -q "^installed=1" "$IOZONE_FLAG"; then
echo openruyi | sudo -S dnf remove -y iozone 2>/dev/null || true
fi
rm -f "$IOZONE_FLAG"
else
sed -i "s/^ref=.*/ref=$ref/" "$IOZONE_FLAG"
fi
}
# Parse iozone output and extract key metrics
# Usage: _iozoneParseOutput <logfile>
_iozoneParseOutput() {
local log="$1"
if [ ! -f "$log" ]; then return 1; fi
echo "=== IOzone 结果解析 ==="
# Extract the data line (contains throughput values)
grep -E '^\s+[0-9]+\s+[0-9]+' "$log" | while read -r line; do
# Parse: kB reclen write rewrite read reread random_read random_write bkwd_read record_rewrite stride_read fwrite frewrite fread freread
local kb reclen write rewrite read_val reread rread rwrite bkwd rec_rewrite stride fwrite frewrite fread freread
read -r kb reclen write rewrite read_val reread rread rwrite bkwd rec_rewrite stride fwrite frewrite fread freread <<< "$line"
echo ""
echo "文件大小: ${kb} KB, 记录大小: ${reclen} KB"
echo " Write: ${write} KB/s"
echo " Re-write: ${rewrite} KB/s"
echo " Read: ${read_val} KB/s"
echo " Re-read: ${reread} KB/s"
echo " Random Read: ${rread} KB/s"
echo " Random Write: ${rwrite} KB/s"
# Calculate geometric mean of the key metrics
if [ -n "$write" ] && [ "$write" != "0" ]; then
local geo
geo=$(awk "BEGIN { printf \"%.0f\", ($write * $rewrite * ${read_val} * $reread * $rread * $rwrite) ^ (1/6) }" 2>/dev/null)
echo " Geometric Mean (6 ops): ${geo} KB/s"
fi
done
echo "=== 解析结束 ==="
}