Logo

Personal Ops Runbook

Personal runbook covering infrastructure operations for Cloud, Kubernetes, OpenStack, and Ceph environments. Includes deployment and teardown procedures, node management, cluster monitoring setup, and incident response workflows compiled from day-to-day operational work. Intended strictly for personal reference — configurations and scripts are environment-specific and not guaranteed to work as-is elsewhere.

PoV Benchmark Runbook — GreenNode/Lightbits

Mục tiêu: chạy đúng bộ test trong tài liệu PoV để ghi nhận report.
Client: oss-nvme-06 (1 client).
Cluster: oss-nvme-01/02/03, EC4+2, replica 2.

⚠️ LƯU Ý QUAN TRỌNG

  • Tài liệu PoV mục 4.1: Each client is connected to a separate volume + target cluster-wide (60 GB/s đọc, 4 triệu IOPS) được tính cho NHIỀU client + dual 100GbE/node.
  • LAB này chỉ 1 client nên các số đo trần khả năng cao là giới hạn ở client chứ phải trần cluster.
    • Report phải nêu rõ: single-client baseline chứ không so trực tiếp với target cluster-wide.
    • Để đo trần cluster thật cần ≥3-4 client chạy song song.

Cài đặt nload để xem workload

dnf install -y epel-release
dnf install -y nload

Map test PoV → device

  • Mỗi test PoV: 1 client ↔ 1 volume.
  • Dùng /dev/nvme8n1 cho mọi bài baseline (1 volume), để khớp 1 client 1 volume của PoV.
  • Các disk nvme8nX chính là volume Lightbits, không đụng tới nvme0..7 vì là disk local client.

PHẦN 1 — CHUẨN BỊ

Trên client oss-nvme-06, xác nhận volume

[root@oss-nvme-06 ~]# nvme list | grep -i lightbits
/dev/nvme8n1          /dev/ng8n1            f973dc215df7aebb     Lightbits LightOS                        0x2        214.75  GB / 214.75  GB      4 KiB +  0 B   3.18
/dev/nvme8n2          /dev/ng8n2            f973dc215df7aebb     Lightbits LightOS                        0x3        214.75  GB / 214.75  GB      4 KiB +  0 B   3.18
/dev/nvme8n3          /dev/ng8n3            f973dc215df7aebb     Lightbits LightOS                        0x5        214.75  GB / 214.75  GB      4 KiB +  0 B   3.18
/dev/nvme8n4          /dev/ng8n4            f973dc215df7aebb     Lightbits LightOS                        0x6        214.75  GB / 214.75  GB      4 KiB +  0 B   3.18
/dev/nvme8n5          /dev/ng8n5            f973dc215df7aebb     Lightbits LightOS                        0x1        214.75  GB / 214.75  GB      4 KiB +  0 B   3.18
/dev/nvme8n6          /dev/ng8n6            f973dc215df7aebb     Lightbits LightOS                        0x4        214.75  GB / 214.75  GB      4 KiB +  0 B   3.18

PoV mục 4.1: "All runs executed after volumes and nodes have been pre-conditioned".
Phải fill đầy 6 volume trước = pre-conditioned.

Device bench thực tế

6 volume Lightbits = /dev/nvme8n1 .. /dev/nvme8n6 (cùng controller nvme8, subsystem Lightbits).
Xác nhận:

nvme list | grep -i lightbits # phải thấy nvme8n1..n6, model "Lightbits LightOS", 214.75 GB

⚠️⚠️ Cảnh báo: nvme0n1..nvme7n1 là 8 Ổ NVMe vật lý local của oss-nvme-06 (Samsung PM9A3).
Tuyệt đối không để filename trỏ nvme0..7.

Đổi iopolicy = round-robin (trải IO đều 3 path/3 node)

Mặc định iopolicy=numa → chỉ ưu tiên 1 path. round-robin trải đều cả 3 node → ép cluster tốt hơn.

[root@oss-nvme-06 ~]# echo round-robin > /sys/class/nvme-subsystem/nvme-subsys8/iopolicy
[root@oss-nvme-06 ~]# cat /sys/class/nvme-subsystem/nvme-subsys8/iopolicy
round-robin

(subsys8 là subsystem Lightbits trong output nvme list-subsys.)

Fill data — bơm đầy + đo bandwidth ghi tuần tự

Để bench giống prod nhất cần fill data.
Fill cũng là phép đo write bandwidth thô. 6×200GB=1.2TB → khá mất thời gian.

PHẦN 2 — BENCHMARK

Bước 1 — Setup

Quy trình dưới đây có thể áp dụng được cho 1 hoặc nhiều client, hãy chạy trên tất cả các client đoạn shell dưới đây.

cd ~
VOLS="/dev/nvme8n1 /dev/nvme8n2 /dev/nvme8n3 /dev/nvme8n4 /dev/nvme8n5 /dev/nvme8n6"
RT=120; RAMP=10; QDS="1 2 4 8 16 32"

runwl() {   # $1=outdir $2=name $3=rw $4=bs $5=mix $6=numjobs $7=iswrite
  local dir="$1" name="$2" rw="$3" bs="$4" mix="$5" nj="$6" wr="$7"
  mkdir -p "$dir"; cd "$dir"
  for QD in $QDS; do
    local f="${name}-qd${QD}.fio"
    {
      echo "[global]"; echo "ioengine=libaio"; echo "direct=1"; echo "time_based"
      echo "runtime=$RT"; echo "ramp_time=$RAMP"; echo "rw=$rw"
      [ -n "$mix" ] && echo "rwmixread=$mix"
      echo "bs=$bs"; echo "numjobs=$nj"; echo "iodepth=$QD"
      echo "randrepeat=0"; echo "norandommap=1"; echo "group_reporting=1"
      echo "cpus_allowed_policy=split"; echo "cpus_allowed=0-127"; echo "log_avg_msec=1000"
      if [ "$wr" -eq 1 ]; then
        echo "refill_buffers"; echo "buffer_compress_percentage=50"; echo "buffer_compress_chunk=4096"
      fi
      local i=1; for d in $VOLS; do echo "[vol$i]"; echo "filename=$d"; i=$((i+1)); done
    } > "$f"
    echo "=== $(hostname -s) | $name qd$QD ==="
    fio "$f" --output-format=json --output="${name}-qd${QD}.json"
  done
  cd ~
  echo ">>> XONG: $name ($(hostname -s))"
}
echo "runwl ready."

Bước 2 — Trường hợp 1 client (reference)

Chỉ chạy trên 1 client, ví dụ oss-nvme-06.

# latency floor (1 job, 1 vol)
mkdir -p ~/lbfio-1client && cd ~/lbfio-1client
cat > lat-floor-4k-qd1.fio <<EOF
[global]
ioengine=libaio
direct=1
time_based
runtime=$RT
ramp_time=$RAMP
rw=randread
bs=4k
numjobs=1
iodepth=1
randrepeat=0
norandommap=1
group_reporting=1
cpus_allowed_policy=split
cpus_allowed=0-127
[vol1]
filename=/dev/nvme8n1
EOF
echo "=== A0 latency floor ==="
fio lat-floor-4k-qd1.fio --output-format=json --output=lat-floor-4k-qd1.json
cd ~

# read sweeps
runwl ~/lbfio-1client read-rand-4k randread 4k "" 21 0
runwl ~/lbfio-1client read-rand-8k randread 8k "" 21 0
runwl ~/lbfio-1client read-seq-1m  read     1m "" 4  0

Bước 2 — Trường hợp nhiều client (aggregate)

Có bao nhiêu client thì chạy hết. Mỗi workload dưới đây paste vào 3 terminal cùng lúc, chờ cả 3 thông báo >>> XONG, rồi mới sang workload kế.
Các bài write/mix sẽ ghi đè dữ liệu.

B1 — 4K random read (tiêu chí IOPS)

runwl ~/lbfio-3client read-rand-4k randread 4k "" 21 0

B2 — 1M seq read (tiêu chí bandwidth)

runwl ~/lbfio-3client read-seq-1m read 1m "" 4 0

B3 — 8K random read

runwl ~/lbfio-3client read-rand-8k randread 8k "" 21 0

B4 — 4K random write ⚠️

runwl ~/lbfio-3client write-rand-4k randwrite 4k "" 10 1

B5 — 4K 70/30 mix ⚠️

runwl ~/lbfio-3client mix70-rand-4k randrw 4k 70 10 1

B6 — 4K 50/50 mix ⚠️

runwl ~/lbfio-3client mix50-rand-4k randrw 4k 50 10 1

B7 — 8K random write ⚠️

runwl ~/lbfio-3client write-rand-8k randwrite 8k "" 10 1

B8 — 8K 70/30 mix ⚠️

runwl ~/lbfio-3client mix70-rand-8k randrw 8k 70 10 1

B9 — 1M seq write ⚠️

runwl ~/lbfio-3client write-seq-1m write 1m "" 4 1

B10 — 1M 50/50 mix ⚠️

runwl ~/lbfio-3client mix50-seq-1m rw 1m 50 4 1

Nén lưu kết quả nếu cần

cd ~ && tar -czf fio-results-$(hostname -s).tar.gz lbfio-1client lbfio-3client 2>/dev/null
ls -lh ~/fio-results-$(hostname -s).tar.gz

Lưu ý

  • Mỗi workload B chỉ ~13 phút (6 QD × 130s). Xong workload nào là 3 máy tái đồng bộ ở workload kế → không còn lệch tích lũy.
  • Nếu muốn nhanh hơn nữa, sửa QDS="1 4 16 32" ở Bước 0 (đủ thấy đường cong + bão hòa).
  • Mẹo đồng bộ khi paste 3 terminal: có thể dùng terminal có chế độ broadcast/send to all panes, ví dụ Tmux :setw synchronize-panes on để gõ 1 lần chạy cả 3.
  • Thứ tự ưu tiên nếu không chạy hết: B1, B2, B3 (read — tiêu chí chính) trước và write/mix sau.