Block IO:指的是磁盘的读写,docker 可以通过设置权重,限制bpsiops的方式控制容器读写磁盘的带宽

注:目前block IO限额只对direct IO不使用文件缓存)有效。

1.Block IO权重:--blkio-weight,这个--blkio-weight的权重值在  10~1000之间

和容器cpu的使用机制是一致的,所有容器都可以平等的读写磁盘,可以通过--blkio-weight参数来改变容器的优先级

--blkio-weight和-c类似,设置的都是资源使用的权重,都是在资源紧张的情况下才会起到权重的作用,正常情况下,都是平等的

docker 权限不允许 docker限制容器磁盘_资源分配

--blkio-weight-device 针对特定的设备设置权重 例:docker run -d --blkio-weight-device /dev/sdb:30M httpd

如果同时设置了--blkio-weight和--blkio-weight-device,则以--blkio-weight为全局默认配置

--blkio-weight和--blkio-weight-device,由于是根据权重进行资源分配的,而这种权重有体现在资源紧缺的情况下,所以暂时不做试验

 

2.限制bps和iops

bps:byte per second ,每秒读写的数据量

iops:io per second ,每秒IO次数

可以通过以下参数来控制容器的bps 和iops:

--device-read-bps:限制读某个设备的bps(数据量)   例:docker run -d  --device-read-bps /dev/sdb:30M  httpd

--device-write-bps : 限制写入某个设备的bps(数据量) 例:docker run -d --device-write-bps dev/sdb:30M httpd

--device-read-iops :限制读某个设备的iops(次数) 例:docker run -d --device-read-iops /dev/sdb

--device-write-iops :限制写入某个设备的iops(次数)

做一个限制bps的写入的操作的试验:由于没有找到比较好的“读”相关的bps和iops 的测试,所以这种测试之后在实际工作环境下再酌情进行测试吧~

docker run -it--device-write-bsp /dev/sda:60M --name bsp3 centos

docker 权限不允许 docker限制容器磁盘_权重_02

oflag=direct:指定使用direct IO方式写文件,这样--device-write-bps才会生效

在这个实验中,从结果来看是63M,但是我设置的是60M,按正常来说应该低于60M,但是为什么会高于60M呢?

根据我的分析来讲,是由于docker block IO 是根据权重来限制,而这种权重是体现在资源紧张的情况下的,在本实验中,资源非常够用,所以会出现以上结果

 

我们来看一下正常情况下的试验结果

docker 权限不允许 docker限制容器磁盘_docker 权限不允许_03

在这个试验中,是没有对容器加限制的,可以看到他的写入大小速度非常高