# Linux下如何操作I/O調度器
## 1. I/O調度器概述
在Linux系統中,I/O調度器(I/O Scheduler)是內核用于管理塊設備I/O請求的機制。它的主要作用是通過優化請求順序和合并相鄰請求,減少磁盤尋道時間,從而提高存儲設備的吞吐量和響應速度。
### 1.1 常見I/O調度器類型
Linux內核提供了多種I/O調度器,常見的有:
- **CFQ(Completely Fair Queuing)**:公平隊列調度器,適合多任務環境
- **Deadline**:保證請求的截止時間,適合數據庫應用
- **NOOP**:簡單的FIFO隊列,適合SSD或虛擬化環境
- **Kyber**:新式調度器,針對低延遲設備優化
- **BFQ(Budget Fair Queuing)**:改進的公平隊列,適合交互式應用
## 2. 查看當前I/O調度器
### 2.1 查看系統支持的調度器
```bash
cat /sys/block/sdX/queue/scheduler
輸出示例:
noop deadline [cfq]
cat /sys/block/sdX/queue/scheduler | grep -o '\[.*\]'
echo 'deadline' > /sys/block/sdX/queue/scheduler
創建文件 /etc/udev/rules.d/60-io-scheduler.rules
:
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/scheduler}="deadline"
然后重新加載udev規則:
sudo udevadm control --reload-rules
sudo udevadm trigger
編輯 /etc/default/grub
,在 GRUB_CMDLINE_LINUX
中添加:
elevator=deadline
更新GRUB配置:
sudo update-grub # Debian/Ubuntu
sudo grub2-mkconfig -o /boot/grub2/grub.cfg # RHEL/CentOS
# 設置優先級
echo 1 > /sys/block/sdX/queue/iosched/prio_type
# 調整時間片長度(毫秒)
echo 100 > /sys/block/sdX/queue/iosched/quantum
# 查看所有可調參數
ls /sys/block/sdX/queue/iosched/
# 讀請求超時(毫秒)
echo 500 > /sys/block/sdX/queue/iosched/read_expire
# 寫請求超時(毫秒)
echo 5000 > /sys/block/sdX/queue/iosched/write_expire
# 批量寫入大?。ㄉ葏^)
echo 1024 > /sys/block/sdX/queue/iosched/writes_starved
推薦使用 CFQ 或 Deadline: - 多用戶環境:CFQ - 數據庫應用:Deadline
推薦使用 NOOP 或 Kyber: - NOOP:簡單隊列,減少調度開銷 - Kyber:專為低延遲設備設計
推薦使用 NOOP,因為宿主機已經做了I/O調度
sudo apt install fio # Debian/Ubuntu
sudo yum install fio # RHEL/CentOS
# 隨機讀測試
fio --name=randread --ioengine=libaio --rw=randread --bs=4k --numjobs=4 --size=1G --runtime=60 --time_based --group_reporting
調度器 | 隨機讀IOPS | 隨機寫IOPS | 延遲(ms) |
---|---|---|---|
CFQ | 15,000 | 8,000 | 1.2 |
Deadline | 18,000 | 9,500 | 0.8 |
NOOP | 20,000 | 11,000 | 0.5 |
現代內核(4.0+)支持多隊列塊層:
cat /sys/block/sdX/queue/nr_requests # 查看隊列深度
echo 128 > /sys/block/sdX/queue/nr_requests # 修改隊列深度
# 創建cgroup
cgcreate -g blkio:/mygroup
# 限制I/O帶寬
echo "8:0 1048576" > /sys/fs/cgroup/blkio/mygroup/blkio.throttle.write_bps_device
Q:修改調度器后系統變慢? A:可能是調度器與硬件不匹配,嘗試其他調度器
Q:SSD是否需要I/O調度? A:現代SSD建議使用NOOP或Kyber,傳統調度器可能帶來額外開銷
Q:如何確認修改生效?
A:使用 cat /sys/block/sdX/queue/scheduler
確認當前調度器
選擇合適的I/O調度器可以顯著提升系統存儲性能。建議: 1. 了解硬件特性(HDD/SSD/NVMe) 2. 根據應用場景選擇調度器 3. 進行基準測試驗證效果 4. 考慮使用cgroup進行細粒度控制
通過合理配置I/O調度器,可以使Linux系統在各種負載下都能獲得最佳存儲性能。 “`
這篇文章提供了約1100字的詳細指南,涵蓋了I/O調度器的查看、修改、調優和性能測試等內容,采用Markdown格式編寫,包含代碼塊、表格和結構化標題。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。