块设备 IO 权重
按权重分配块设备带宽,取值从十到一千:多个容器争抢同一块盘时按比例分配读写机会,属于竞争占比而不是绝对限速。需要绝对上限要用按设备读写限速的参数。
基本信息
| 语法 | --blkio-weight=<10-1000> |
|---|---|
| 性质 | 相对权重,非绝对限速 |
| 生效条件 | 多个容器存在 IO 竞争时 |
| 绝对限速 | 按设备读写的速率限制参数 |
| 核对 | inspect 里的对应字段 |
典型使用场景
- 同一块盘上区分数据库与批处理任务的 IO 优先级
- 避免大批量导入把在线服务的磁盘响应拖垮
- 压测时构造 IO 竞争观察分配比例
- 核对权重是否真正写入
- 容量评估时确认 IO 资源的分配预期
设置与核对
设置与核对
docker run -d --blkio-weight=500 --name db postgres:16-alpine
docker run -d --blkio-weight=100 --name loader loader:1.2
docker inspect -f '{{.HostConfig.BlkioWeight}}' db # 核对生效值参数与适用判断
| 参数 | 性质 | 适用判断 |
|---|---|---|
| 权重参数 | 相对权重 | 竞争时按比例分配 |
| 读写速率限制 | 绝对上限 | 需要硬性限速时 |
| 权重相同 | 平均分配 | 无优先级差异 |
| 无竞争 | 权重不体现 | 空闲时看不出差异 |
需要宿主启用块 IO 控制器;单容器要绝对上限时改用按设备的速率限制参数。
权重在无竞争时看不出差异,验证时要同时制造两个容器的 IO 负载。
宿主未启用 IO 控制器时不生效,排查先看 cgroup 目录下的控制器列表。
权重与绝对限速可以同时使用,前者管竞争比例,后者管上限。
不同存储介质上的实际表现差异较大,结论要按实际硬件压测得出。
核对生效值时若显示为零,说明参数没有真正写入,要回头检查启动命令。
同一块盘上的容器若使用不同的存储驱动或不同的数据目录,权重的影响范围也会变化,压测结论要注明硬件与布局差异。
权重类参数与内核调度实现相关,较老内核上可用的控制器可能不完整,选型前先确认宿主能力。