萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux cgroups blkio 子系統實戰:磁碟 I/O 節流、權重分配、統計監控與多裝置差異化限制

cgroups blkio 子系統提供塊裝置 I/O 的節流 與權重分配兩大控制模式,並內建豐富的統計介面。本文通過實戰示範如何限制進程讀寫頻寬、按權重分配 I/O、監控關鍵指標並針對不同裝置實施差異化策略。

blkio 可寫入控制參數

參數類型功能單位
blkio.throttle.read_bps_device節流限制每秒讀取位元組數Bytes/sec
blkio.throttle.write_bps_device節流限制每秒寫入位元組數Bytes/sec
blkio.throttle.read_iops_device節流限制每秒讀取操作數IOPS
blkio.throttle.write_iops_device節流限制每秒寫入操作數IOPS
blkio.weight權重CFQ 排程器下相對 I/O 權重 (10~1000)相對權重
blkio.weight_device權重針對特定裝置設定權重相對權重

實戰一:節流模式限制讀取頻寬

  1. 產生高負載讀取:
dd if=/dev/sda of=/dev/null &
# 假設 PID=2750
  1. 查看裝置號:
ls -l /dev/sda
# brw-rw---- 1 root disk 8, 0 ... → 主:次 = 8:0
  1. 建立控制組並設定限制 (1 MB/s):
mkdir -p /sys/fs/cgroup/blkio/foo
echo '8:0 1048576' > /sys/fs/cgroup/blkio/foo/blkio.throttle.read_bps_device
echo 2750 > /sys/fs/cgroup/blkio/foo/tasks
  1. 驗證效果 (用 iotop 觀察):
# 限制前:~66 MB/s
# 限制後:~1 MB/s (約 1048576 B/s)
  1. 解除限制:
echo '8:0 0' > /sys/fs/cgroup/blkio/foo/blkio.throttle.read_bps_device

注意:節流採用 Token Bucket 演算法,對小於取樣間隔的突發 I/O (如 1 秒內 100MB 尖峰) 無法精確限制。

實戰二:權重模式按比例分配 I/O

  1. 建立兩個控制組並設定權重 5:1:
mkdir -p /sys/fs/cgroup/blkio/foo /sys/fs/cgroup/blkio/bar
echo 500 > /sys/fs/cgroup/blkio/foo/blkio.weight
echo 100 > /sys/fs/cgroup/blkio/bar/blkio.weight
  1. 準備大檔案並清空頁面快取:
dd if=/dev/zero of=/tmp/file_1 bs=1G count=1
dd if=/dev/zero of=/tmp/file_2 bs=1G count=1
sync && echo 3 > /proc/sys/vm/drop_caches
  1. 在兩組中並發讀取:
cgexec -g "blkio:foo" dd if=/tmp/file_1 of=/dev/null &
cgexec -g "blkio:bar" dd if=/tmp/file_2 of=/dev/null &
  1. 觀察 iotop:兩進程讀取頻寬比約維持 5:1 (500:100)。

優勢:非繁忙時可充分利用頻寬;繁忙時按比例保障,比節流更彈性。

裝置級差異化控制

blkio.weight_device 格式:主:次 權重。

# 針對 sda (8:0) 給 foo 組權重 800,sdb (8:16) 給 200
echo '8:0 800' > /sys/fs/cgroup/blkio/foo/blkio.weight_device
echo '8:16 200' > /sys/fs/cgroup/blkio/foo/blkio.weight_device

統計監控介面 (唯讀)

重置統計:echo 1 > blkio.reset_stats

blkio 節流效果對比

命令列工具輔助

# 查看子系統掛載點
lssubsys -am blkio
# 直接在控制組執行指令
cgexec -g "blkio:foo" dd if=/dev/sda of=/dev/null

總結:blkio.throttle.* 提供硬性頻寬上限 (適合多租戶硬性 SLA);blkio.weight* 提供彈性比例分配 (適合業務優先級保障);統計介面支援精細化 I/O 觀測與計費。生產環境建議結合 cgconfig/cgred 服務持久化配置。

copyright © 萬盛學電腦網 all rights reserved
檔案含義
blkio.time各裝置 I/O 服務時間 (毫秒)
blkio.sectors各裝置讀/寫扇區數
blkio.io_serviced各類型 (read/write/sync/async/total) I/O 操作次數
blkio.io_service_bytes各類型 I/O 傳輸位元組數
blkio.io_service_time各類型 I/O 服務時間 (微秒)
blkio.io_wait_time各類型 I/O 在佇列等待時間
blkio.io_merged各類型 I/O 請求合併次數
blkio.io_queued各類型 I/O 當前佇列深度