架构鹅结合TencentOS团队在混部方面的落地实战经验,重点推送了TencentOS Server大规模容器集群混部服务器QoS产品“如意”相关内容。
TencentOS “如意”产品主要应用在离、在线混部场景,目标是为了提高服务器的资源利用率,进而降低业务及客户的服务器成本。“如意”作为一套OS侧的资源隔离方案,主要包括CPU、IO、内存和网络四大模块。针对这四种服务器资源进行QoS(Quality of Service,服务质量),能够将用户的在线、离线业务部署到同一台服务器上,既能保证在线业务的服务质量,又能有效提升资源利用率。
针对“如意”特性中CPU QoS模块和网络资源隔离分别推出深度技术解析文章,本篇,架构鹅重点介绍如意IO隔离方案的应用和实践效果。
一、IO隔离应用背景
随着容器的大量使用,资源隔离的需求越来越强烈,比如大量的平台基于容器提供guest OS环境,这些容器之间的IO不进行限制的话,由于共享整机IO资源必将导致大量竞争,进而无法保证容器的Qos。与CPU资源,内存资源不同的是,IO资源不能很方便的计算使用量,因为磁盘的BPS与IOPS都是有限的,并且是相互影响的,综合来讲磁盘的使用成本是多维的。为了更好兼容不同场景的需求,我们对内核现有机制进行大量优化,并引入新的Qos机制。
从IO的方向,IO可以分为读IO与写IO;从IO提交的角度来区分,IO可以分为Buffer IO与Diret IO;从IO随机度来区分,IO可以分为顺序IO与随机IO。实际生产环境中IO模型要复杂很多,更多是多种不同的IO模型混合在一起。不同的存储设备的差异性也是非常大,比如HDD,SATA SSD, NVMe,云盘等。这些因素都给隔离方案带来较多的挑战。以下章节如无额外说明,如意IO隔离方案在大部分场景中对于常见HDD, SATA SSD, NVMe都是适用的。
二、IO隔离原理
2.1 BPS隔离
BPS隔离主要是用于保证容器的磁盘可用带宽,目前支持限制上限与保证下限两种方式。限制上限的方式可以限制每个容器最大可用磁盘带宽,由于容器空闲带宽不能被复用,所以这种方案的资源利用率相对较低,适用于资源利用率要求不高隔离要求高的场景。保证下限的方式保证每个容器最小可用磁盘带宽,在最小带宽满足前提下,各个容器尽可能去争取更高的带宽,这种方式资源利用率相对较高,但是隔离性相对可能不会特别好,不太适用隔离要求高的场景。
默认BPS限制是读写单独控制的,这种方案非常灵活,但是实际使用会增加复杂性。为此,我们也支持对容器配置单一BPS上限,内核会自动分配读写带宽,基本原则上是读操作优先写操作。BPS相关的部分内核接口与配置方法如下:
2.2 IOPS隔离
IOPS隔离主要是用于保证容器的磁盘可用IOPS,目前支持限制上限与保证下限两种方式。限制上限的方式可以限制每个容器最大可用磁盘IOPS,由于容器空闲IOPS不能被复用,所以这种方案的资源利用率相对较低。保证下限的方式保证每个容器最小可用磁盘IOPS,在最小IOPS满足前提下,各个容器尽可能去争取更高的IOPS,这种方式资源利用率相对较高。
默认IOPS限制是读写单独控制的,这种方案非常灵活,但是实际使用会增加复杂性。为此,我们也支持对容器配置单一IOPS上限,内核会自动分配读写IOPS,基本原则上是读操作优先写操作。IOPS相关的部分内核接口与配置方法如下:
2.3 权重隔离
BPS / IOPS隔离方案的鲁棒性较差,因为系统的负载与设备的工况都是变化的,这些变化因子最终会导致磁盘性能的波动,这个波动最终体现在BPS或者IOPS上。由于无法较好的复用空闲资源,部分场景下系统资源利用率不高。为了更好的鲁棒性以及更高的资源利用率,我们也支持权重隔离方案。与BPS / IOPS隔离不同,权重隔离是以权重分配系统资源,可以更好适应不同的负载以及性能波动。我们权重隔离方案目前主要是基于bfq实现的,针对容器场景进行专门优化,使得我们可以实现较好的鲁棒性, 较高的吞吐量,较好的隔离效果。权重隔离的相关配置接口如下所示:
be1与be2的权重比是1:2
echo 100 > be1/blkio.bfq.weight
echo 200 > be2/blkio.bfq.weight
be1与be2的权重比是1:2
echo 100 > be1/io.bfq.weight
echo 200 > be2/io.bfq.weight
三、实验效果
本次测试在INSPUR SA5112M4上单块NVMe(INTEL SSDPE2MX020T4)上测试,测试时每个容器内部运行32个fio线程同时IO,测试效果如下所示:
3.1
Buffer IO 写带宽为1MB/s的效果
3.2
Buffer IO 写IOPS为1024/s的效果
3.3
Buffer IO权重为1:2的效果
3.4
Direct IO BPS为1MB/s的效果
3.5
Direct IO IOPS为1024/s的效果
3.6
Direct IO 权重为1:2的效果
3.7
权重隔离场景下的性能开销,由于篇幅原因,主要列举direct IO的结果:
测试 | 开权重 KB/s | 不开权重KB/s | 开销 |
---|---|---|---|
1 | 1535380 | 1540673 | 0.7% |
2 | 1532529 | 1521605 | 0.0% |
3 | 1506826 | 1529164 | 1.4% |
平均 | 1524911 | 1530480 | 0.7% |
四、IO隔离可有效提升资源利用率
综上所述,使用IO隔离方案在常见场景下可以达到较好的隔离效果以及较高的资源利用率。除此之外,我们还支持更多的Qos机制,比如IO抢占,文件句柄限制等等,后续的文章我们再详细介绍。IO隔离方案目前已应用在腾讯互娱的TenC平台,得到较好的效果,可以很好地避免各个容器之间的相互影响。
相关阅读