blk-iocost權重限速功能是Alibaba Cloud Linux對cgroup I/O子系統(blkcg)基於權重的磁碟限速功能的改進。它是一種I/O控制器,可以根據應用程式或進程的優先順序為塊裝置上的I/O操作分配頻寬,並且可以通過設定權重值來限制特定應用程式或進程對塊裝置的I/O頻寬使用,以便協助您更好地實現對磁碟I/O資源的控制和管理。
cgroup v1和cgroup v2是Linux核心中兩個不同版本的資源管理功能。在Alibaba Cloud Linux核心中,blk-iocost功能同時支援cgroup v1和v2介面,但通常在一個系統中僅有一個版本被啟用和使用。您可以通過執行stat -fc %T /sys/fs/cgroup命令查看。
回顯為
tmpfs:表示cgroup v1介面。回顯為
cgroup2fs:表示cgroup v2介面。
作業系統限制
Alibaba Cloud Linux 2(核心
4.19.81-17及以上版本)。Alibaba Cloud Linux 3。
cost.qos介面使用說明
cost.qos是一個可讀寫的介面,用於開啟或關閉blk-iocost功能,以及基於延遲權重限制I/O服務品質(QoS)的速率。介面檔案僅存在於blkcg根組中,且在不同的cgroup中的完整名稱有所不同。
cgroup v1:介面檔案完整名稱為
blkio.cost.qos。cgroup v2:介面檔案完整名稱為
io.cost.qos。
配置說明
每行配置以裝置的Major號和Minor號開頭,格式為MAJ:MIN(通過lsblk | grep <雲端硬碟名稱>命令查詢裝置號),後邊銜接其他配置項,配置項說明如下。
配置項 | 說明 |
enable | 是否開啟blk-iocost功能。
|
ctrl | 控制模式。
|
開啟blk-iocost功能
本文以裝置254:48開啟blk-iocost功能,控制模式為user為例,並設定讀寫請求延遲(rlat|wlat)有95%超過5 ms時,認為磁碟飽和。核心將進行磁碟發送請求速率的調整,調整範圍為50%~150%。
cgroup v1介面
sudo sh -c 'echo "254:48 enable=1 ctrl=user rpct=95.00 rlat=5000 wpct=95.00 wlat=5000 min=50.00 max=150.00" > /sys/fs/cgroup/blkio/blkio.cost.qos'cgroup v2介面
sudo sh -c 'echo "254:48 enable=1 ctrl=user rpct=95.00 rlat=5000 wpct=95.00 wlat=5000 min=50.00 max=150.00" > /sys/fs/cgroup/io.cost.qos'
cost.model介面使用說明
cost.model是一個可讀寫接的口,用於設定成本模型(cost model)。該介面檔案僅存在於blkcg根組中,並且在不同的cgroup中,其完整名稱有所不同。
cgroup v1:介面檔案完整名稱為
blkio.cost.model。cgroup v2:介面檔案完整名稱為
io.cost.model。
配置說明
每行配置以裝置的Major號和Minor號開頭,格式為MAJ:MIN(通過lsblk | grep <雲端硬碟名稱>命令查詢裝置號),後邊銜接其他配置項,配置項說明如下。
配置項 | 說明 |
ctrl | 控制模式。
|
model | 模型參數。目前僅實現了
|
使用cost.model介面設定成本模型
本文以在裝置254:48上使用使用者輸入的linear建模參數設定模型為例。
cgroup v1介面
sudo sh -c 'echo "254:48 ctrl=user model=linear rbps=2706339840 rseqiops=89698 rrandiops=110036 wbps=1063126016 wseqiops=135560 wrandiops=130734" > /sys/fs/cgroup/blkio/blkio.cost.model'cgroup v2介面
sudo sh -c 'echo "254:48 ctrl=user model=linear rbps=2706339840 rseqiops=89698 rrandiops=110036 wbps=1063126016 wseqiops=135560 wrandiops=130734" > /sys/fs/cgroup/io.cost.model'
weight/cost.weight介面使用說明
Alibaba Cloud Linux 3的weight和Alibaba Cloud Linux 2的cost.weight是核心中用於控制I/O資源分派的核心介面,均為可讀寫介面。通過配置權重值[1,10000],動態分配磁碟I/O頻寬。該介面檔案僅存在blkcg的子組中,並且在不同cgroup中的完整名稱存在差異。
Alibaba Cloud Linux 3
cgroup v1:介面檔案完整名稱為
blkio.cost.weight。cgroup v2:介面檔案完整名稱為
io.weight。
Alibaba Cloud Linux 2
cgroup v1:介面檔案完整名稱為
blkio.cost.weight。cgroup v2:介面檔案完整名稱為
io.cost.weight。
配置說明
為介面設定權重值
<weight>:表示修改blkcg的預設權重。為介面設定連接埠號碼和權重值
MAJ:MIN <weight>:表示修改裝置上的blkcg的權重。
使用weight介面修改權重
開啟blk-iocost功能後,本文以建立cgroup v1的控制組blkcg1和cgroup v2的控制組cg1,通過使用cgroup v1的cost.weight介面和cgroup v2的weight介面將控制組的預設權重修改為50,並將控制組在裝置254:48上的權重設定為50為例。
cgroup v1介面
sudo mkdir /sys/fs/cgroup/blkio/blkcg1 # 建立控制組blkcg1 sudo sh -c 'echo "50" > /sys/fs/cgroup/blkio/blkcg1/blkio.cost.weight' # 將預設權重修改為50 sudo sh -c 'echo "254:48 50" > /sys/fs/cgroup/blkio/blkcg1/blkio.cost.weight' #將裝置上的權重設定為50cgroup v2介面
Alibaba Cloud Linux 3
sudo mkdir /sys/fs/cgroup/cg1 # 建立控制組cg1 sudo sh -c 'echo "50" > /sys/fs/cgroup/cg1/io.weight' # 將預設權重修改為50 sudo sh -c 'echo "254:48 50" > /sys/fs/cgroup/cg1/io.weight' #將裝置上的權重設定為50Alibaba Cloud Linux 2
sudo mkdir /sys/fs/cgroup/cg1 # 建立控制組cg1 sudo sh -c 'echo "50" > /sys/fs/cgroup/cg1/io.cost.weight' # 將預設權重修改為50 sudo sh -c 'echo "254:48 50" > /sys/fs/cgroup/cg1/io.cost.weight' #將裝置上的權重設定為50
常用監測工具
blk-iocost需要能夠監控和評估系統的I/O效能,可以通過以下工具或介面來監測I/O資源的使用方式,以便協助您更好地理解和調優I/O資源的使用方式。