Last active
August 10, 2025 03:00
-
-
Save codedeep79/e87c1cfc969ab575ed1aa3266680ed34 to your computer and use it in GitHub Desktop.
Revisions
-
codedeep79 renamed this gist
Aug 10, 2025 . 1 changed file with 0 additions and 13 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,15 +1,3 @@ #!/bin/bash set -e @@ -83,4 +71,3 @@ if [[ "$CLOUD_PROVIDER" != "Unknown" && "$CLOUD_PROVIDER" != "BareMetal" ]]; the fi echo "Scheduler tốt nhất: $BEST_SCHED (p99 = $BEST_LAT µs)" echo "Đặt scheduler mặc định: echo $BEST_SCHED | sudo tee /sys/block/$DEVICE_NAME/queue/scheduler" -
codedeep79 renamed this gist
Aug 10, 2025 . 1 changed file with 0 additions and 0 deletions.There are no files selected for viewing
File renamed without changes. -
codedeep79 created this gist
Aug 10, 2025 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,86 @@ 1. Tạo file `scylla_scheduler_test.sh` Bản universal script hoàn chỉnh, chạy được trên bare metal lẫn tất cả cloud provider phổ biến (AWS, GCP, Azure, OCI, KVM/OpenStack, VMware...). Script này sẽ: + Phát hiện volume Scylla (hoặc volume chỉ định). + Nhận diện cloud provider dựa trên MODEL / VENDOR. + Liệt kê scheduler khả dụng. + Nếu có nhiều scheduler → benchmark bằng fio. + Xuất bảng kết quả p99 latency + khuyến nghị. + Nếu đang ở cloud và scheduler không ảnh hưởng → cảnh báo. ```sh #!/bin/bash set -e DATA_PATH="${1:-/var/lib/scylla}" echo "=== [1/6] Phát hiện thiết bị chứa dữ liệu ScyllaDB ($DATA_PATH) ===" DEVICE=$(df "$DATA_PATH" | tail -1 | awk '{print $1}' | sed 's/[0-9]*$//') DEVICE_NAME=$(basename "$DEVICE") if [ -z "$DEVICE" ]; then echo "[ERROR] Không tìm thấy thiết bị chứa $DATA_PATH" exit 1 fi MODEL=$(lsblk -d -n -o NAME,MODEL | grep "$DEVICE_NAME" | awk '{$1=""; print $0}' | xargs) VENDOR=$(cat /sys/block/$DEVICE_NAME/device/vendor 2>/dev/null || echo "") echo "[INFO] Thiết bị: $DEVICE_NAME ($MODEL | $VENDOR)" echo "=== [2/6] Nhận diện Cloud Provider ===" CLOUD_PROVIDER="Unknown" if [[ "$MODEL" =~ "Amazon Elastic Block Store" ]] || [[ "$VENDOR" =~ "Amazon" ]]; then CLOUD_PROVIDER="AWS" elif [[ "$MODEL" =~ "Google PersistentDisk" ]] || [[ "$VENDOR" =~ "Google" ]]; then CLOUD_PROVIDER="GCP" elif [[ "$MODEL" =~ "Micros" ]] || [[ "$VENDOR" =~ "Msft" ]]; then CLOUD_PROVIDER="Azure" elif [[ "$MODEL" =~ "VIRTIO" ]] || [[ "$VENDOR" =~ "Virtio" ]]; then CLOUD_PROVIDER="KVM / Generic" elif [[ "$MODEL" =~ "VMware" ]] || [[ "$VENDOR" =~ "VMware" ]]; then CLOUD_PROVIDER="VMware" fi echo "[INFO] Cloud Provider phát hiện: $CLOUD_PROVIDER" echo "=== [3/6] Liệt kê scheduler khả dụng ===" SCHEDS=$(cat /sys/block/$DEVICE_NAME/queue/scheduler | tr -d '[]') echo "[INFO] Scheduler khả dụng: $SCHEDS" if [ $(echo $SCHEDS | wc -w) -le 1 ]; then echo "[WARN] Chỉ có 1 scheduler → Không thể so sánh." echo "[NOTE] Trên $CLOUD_PROVIDER, tối ưu I/O bằng storage type hoặc Scylla I/O queues." exit 0 fi echo "=== [4/6] Benchmark từng scheduler với fio ===" rm -f fio-*.json for sched in $SCHEDS; do echo "[TEST] Scheduler: $sched" echo $sched | sudo tee /sys/block/$DEVICE_NAME/queue/scheduler > /dev/null sleep 1 fio --filename=$DEVICE --direct=1 --rw=randread --bs=4k \ --ioengine=libaio --iodepth=32 --runtime=10 --time_based \ --name=test-${sched} --output=fio-${sched}.json --output-format=json done echo "=== [5/6] So sánh p99 latency ===" printf "%-15s %-15s\n" "Scheduler" "p99_latency(µs)" BEST_SCHED="" BEST_LAT=999999 for sched in $SCHEDS; do P99=$(jq '.jobs[0].read.clat.percentile."99.000000"' fio-${sched}.json) printf "%-15s %-15s\n" "$sched" "$P99" if (( $(echo "$P99 < $BEST_LAT" | bc -l) )); then BEST_LAT=$P99 BEST_SCHED=$sched fi done echo "=== [6/6] KHUYẾN NGHỊ ===" if [[ "$CLOUD_PROVIDER" != "Unknown" && "$CLOUD_PROVIDER" != "BareMetal" ]]; then echo "[NOTE] Đang chạy trên $CLOUD_PROVIDER → Scheduler ở guest có thể không ảnh hưởng đáng kể." fi echo "Scheduler tốt nhất: $BEST_SCHED (p99 = $BEST_LAT µs)" echo "Đặt scheduler mặc định: echo $BEST_SCHED | sudo tee /sys/block/$DEVICE_NAME/queue/scheduler" ```