Blk-iocost weight-based throttling in Alibaba Cloud Linux (Alinux) enhances the standard weight-based disk throttling of the cgroup I/O subsystem (blkcg). This I/O controller allocates bandwidth for I/O operations on a block device based on application or process priority. By configuring weight values, you can limit the I/O bandwidth of specific applications or processes for granular control over disk I/O resources.
cgroup v1 and cgroup v2 are two different versions of the resource management feature in the Linux kernel. In the Alibaba Cloud Linux kernel, blk-iocost supports both cgroup v1 and v2 interfaces, but typically only one version is active in a system. Run the stat -fc %T /sys/fs/cgroup command to check which version is active.
A return value of
tmpfsindicates the cgroup v1 interface.A return value of
cgroup2fsindicates the cgroup v2 interface.
Operating system limitations
Alibaba Cloud Linux 2 with kernel version
4.19.81-17or laterAlibaba Cloud Linux 3
Use the cost.qos interface
The cost.qos file is a read-write interface used to enable or disable blk-iocost and to rate-limit I/O quality of service (QoS) based on latency and weight. This interface file exists only in the root blkcg group, and its full name varies between cgroup versions.
cgroup v1:
blkio.cost.qoscgroup v2:
io.cost.qos
Configuration
Each configuration line begins with the device's major and minor numbers in MAJ:MIN format. You can find these numbers by running the lsblk | grep <Cloud_Disk_Name> command. The device numbers are followed by other parameters.
Parameter | Description |
enable | Enables or disables blk-iocost.
|
ctrl | The control mode.
|
Enable the blk-iocost feature
This example enables blk-iocost for device 254:48 in user control mode. In this example, the disk is considered saturated when 95% of read/write request latencies (rlat and wlat) exceed 5000 us (5 ms). The kernel then adjusts the request dispatch rate within a range of 50% to 150%.
cgroup v1 interface
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 interface
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'
Use the cost.model interface
The cost.model file is a read-write interface used to set the cost model. This interface file exists only in the root blkcg group, and its full name varies between cgroup versions.
cgroup v1:
blkio.cost.modelcgroup v2:
io.cost.model
Configuration
Each configuration line begins with the device's major and minor numbers in MAJ:MIN format. You can find these numbers by running the lsblk | grep <Cloud_Disk_Name> command. The device numbers are followed by other parameters.
Parameter | Description |
ctrl | The control mode.
|
model | The model parameter. Currently, only the
|
Set a cost model
This example sets a cost model for device 254:48 by using user-defined linear model parameters.
cgroup v1 interface
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 interface
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'
Use the weight/cost.weight interface
The name of the core read-write interface for controlling I/O resource allocation depends on the cgroup version and the operating system. By configuring a weight value between 1 and 10000, you can dynamically allocate disk I/O bandwidth. These interface files exist only in blkcg subgroups.
Alibaba Cloud Linux 3
cgroup v1:
blkio.cost.weightcgroup v2:
io.weight
Alibaba Cloud Linux 2
cgroup v1:
blkio.cost.weightcgroup v2:
io.cost.weight
Configuration
To modify the default weight of a
blkcg, set a weight value for the interface:<weight>.To modify the weight of a
blkcgon a specific device, use the following format:MAJ:MIN <weight>.
Modify weights
After you enable blk-iocost, the following examples create control groups (blkcg1 for cgroup v1 and cg1 for cgroup v2) and set their weights. The examples set the default weight for the control group to 50 and the device-specific weight for device 254:48 to 50.
cgroup v1 interface
sudo mkdir /sys/fs/cgroup/blkio/blkcg1 # Create the control group blkcg1 sudo sh -c 'echo "50" > /sys/fs/cgroup/blkio/blkcg1/blkio.cost.weight' # Change the default weight to 50 sudo sh -c 'echo "254:48 50" > /sys/fs/cgroup/blkio/blkcg1/blkio.cost.weight' # Set the weight on the disk to 50cgroup v2 interface
Alibaba Cloud Linux 3
sudo mkdir /sys/fs/cgroup/cg1 # Create the control group cg1 sudo sh -c 'echo "50" > /sys/fs/cgroup/cg1/io.weight' # Change the default weight to 50 sudo sh -c 'echo "254:48 50" > /sys/fs/cgroup/cg1/io.weight' # Set the weight on the disk to 50Alibaba Cloud Linux 2
sudo mkdir /sys/fs/cgroup/cg1 # Create the control group cg1 sudo sh -c 'echo "50" > /sys/fs/cgroup/cg1/io.cost.weight' # Change the default weight to 50 sudo sh -c 'echo "254:48 50" > /sys/fs/cgroup/cg1/io.cost.weight' # Set the weight on the disk to 50
Common monitoring tools
To use blk-iocost effectively, you must monitor and evaluate system I/O performance. The following tools and interfaces help you monitor and tune I/O resource usage.