Linux Disk I/O Performance Tuning Guide
Disk I/O is often the biggest bottleneck on a Breeze server. Tuning the I/O scheduler, filesystem settings, and kernel parameters can dramatically improve throughput and latency.
Checking Current I/O Performance
# Monitor disk I/O in real time
iostat -xz 2
# Check per-process I/O
iotop -oP
# Benchmark disk speed
fio --name=randread --ioengine=libaio --rw=randread \
--bs=4k --numjobs=4 --size=1G --runtime=30 --time_based
I/O Scheduler Selection
Choose the right scheduler for your workload:
# Check current scheduler
cat /sys/block/sda/queue/scheduler
# For SSDs/NVMe (recommended on Breeze)
echo "none" > /sys/block/sda/queue/scheduler
# For HDDs with mixed workloads
echo "mq-deadline" > /sys/block/sda/queue/scheduler
Make persistent via /etc/udev/rules.d/60-scheduler.rules:
ACTION=="add|change", KERNEL=="sd*", ATTR{queue/scheduler}="mq-deadline"
ACTION=="add|change", KERNEL=="nvme*", ATTR{queue/scheduler}="none"
Filesystem Mount Options
Optimize your ext4 or XFS mount options in /etc/fstab:
# ext4 optimized for SSD
/dev/sda1 /data ext4 noatime,nodiratime,discard,commit=60 0 2
# XFS optimized
/dev/sdb1 /storage xfs noatime,logbufs=8,logbsize=256k 0 2
Kernel Tuning Parameters
# Reduce swappiness for database workloads
echo 10 > /proc/sys/vm/swappiness
# Increase readahead for sequential workloads
blockdev --setra 4096 /dev/sda
# Tune dirty page writeback
sysctl -w vm.dirty_ratio=15
sysctl -w vm.dirty_background_ratio=5
Key Takeaways
- Use
nonescheduler for NVMe drives on Breeze instances - Mount with
noatimeto reduce unnecessary writes - Monitor with
iostatandiotopbefore and after changes - Benchmark with
fioto validate improvements