From: Jaya Prakash Date: Mon, 18 May 2026 19:57:33 +0000 (+0000) Subject: qa/workunits: add EC fio workload for allocation recovery testing X-Git-Tag: v21.0.1~7^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=818dd863f23ad765d4daffbb72311e98554a36fc;p=ceph.git qa/workunits: add EC fio workload for allocation recovery testing Signed-off-by: Jaya Prakash --- diff --git a/qa/workunits/rados/fio_ec_workload.sh b/qa/workunits/rados/fio_ec_workload.sh new file mode 100755 index 00000000000..fe3d79c6faf --- /dev/null +++ b/qa/workunits/rados/fio_ec_workload.sh @@ -0,0 +1,89 @@ +#!/bin/bash +# vim: ts=8 sw=2 smarttab +set -ex + +POOL_NAME="ecpool" + +echo "[fio-workload] Installing FIO..." +if [[ -f /etc/debian_version ]]; then + sudo apt-get update + sudo apt-get install -y git gcc make librados-dev librbd-dev zlib1g-dev libaio-dev + git clone -b master https://github.com/axboe/fio.git /home/ubuntu/cephtest/fio + cd /home/ubuntu/cephtest/fio + ./configure + make + sudo make install + cd - +elif [[ -f /etc/redhat-release ]]; then + sudo yum install -y fio +else + echo "Unsupported OS" + exit 1 +fi + +sleep 10 + +echo "[fio-workload] Creating erasure-coded pool..." +ceph osd erasure-code-profile set myecprofile k=2 m=1 +ceph osd pool create ${POOL_NAME} 16 16 erasure myecprofile +ceph osd pool set ${POOL_NAME} allow_ec_overwrites true + +cleanup() { + echo "[fio-workload] Cleaning up..." + if [[ -n "$FIO_PID" ]]; then + kill -9 $FIO_PID 2>/dev/null || true + fi + ceph osd pool rm ${POOL_NAME} ${POOL_NAME} --yes-i-really-really-mean-it || true + ceph osd erasure-code-profile rm myecprofile || true + rm -rf /home/ubuntu/cephtest/fio || true + echo "[fio-workload] Cluster status:" + ceph -s + ceph health detail +} + +trap cleanup EXIT INT TERM + +echo "[fio-workload] Starting FIO workload (1hr runtime)..." +fio --name=test-alloc-recovery \ + --ioengine=rados \ + --pool=${POOL_NAME} \ + --clientname=admin \ + --conf=/etc/ceph/ceph.conf \ + --time_based=1 \ + --runtime=1h \ + --invalidate=0 \ + --direct=1 \ + --touch_objects=0 \ + --iodepth=32 \ + --numjobs=4 \ + --rw=randwrite \ + --file_service_type=pareto:0.20:0 \ + --bssplit=4k/16:8k/10:12k/9:16k/8:20k/7:24k/7 \ + --size=15G \ + --nrfiles=12500 \ + --filename_format=stress_obj.\$jobnum.\$filenum \ + & + +FIO_PID=$! + +echo "[fio-workload] FIO PID: $FIO_PID" +echo "[fio-workload] FIO running in background..." + + +TIMEOUT=3600 +START_TIME=$(date +%s) +while true; do + CURRENT_TIME=$(date +%s) + ELAPSED=$((CURRENT_TIME - START_TIME)) + if [ $ELAPSED -ge $TIMEOUT ]; then + echo "Reached 1-hour timeout, stopping FIO" + if [[ -n "$FIO_PID" ]]; then + kill -9 $FIO_PID || true + fi + break + fi + sleep 60 +done + +echo "[fio-workload] FIO workload completed successfully" +exit 0