# Netflix Blog-容器的预测性CPU隔离
Date: 2019-06-20


    这篇文章 **[Predictive CPU isolation of containers at Netflix](https://medium.com/netflix-techblog/predictive-cpu-isolation-of-containers-at-netflix-91f014d856c7)**   是出自 [Netflix Technology Blog](https://medium.com/@NetflixTechBlog)

##      **现存问题：**

     应用在云中共享空间内性能隔离。 

##      **解决方案：**

     操作系统级别的方案： Linux CFS（Completely Fair Scheduler）， 公平的方式将正在运行的进程分配给CPU时间片。

##      **方案问题：**

      应用规模： millions of containers on thousands of machines 。 千台以上的机器上运行百万级别的容器。

##      **组合优化：**   

     数学中 组合优化 combinatorial optimization方法解决， 给定一组K个容器，每个容器在具有d个线程的实例上请求特定数量的CPU，目标是找到大小为（d，K）的二进制分配矩阵M， 使得每个容器获得它请求的CPU的数量。

     可以使用的一些策略如：

-    避免将容器分散到多个NUMA socket；
-    尽量减少超线程
-    平衡L3 的缓存压力
-    减少容器的防止决策的操作

##    **实现：**

- 通过[Titus](https://netflix.github.io/titus/)是Netflix的容器平台， 管理容器
- 使用Linux [cgroup](http://man7.org/linux/man-pages/man7/cgroups.7.html)实现CFS为每个容器操作的策略。
- 用户空间通过 [**titus-isolate**](https://github.com/Netflix-Skunkworks/titus-isolate) Titus子系统定义三个优化时间：
    - add：新增容器；
    - remove：移除完成的容器，
    - rebalance：根据CPU使用率重新评估放置策略；
- 每次发生时间后， 触发远程查询优化动作， 通过查询GBRT模型， 通过上下文功能 与容器关联的元数据：谁启动它，图像，内存和网络配置，应用程序名称等，以及CPU Accounting Controller（统计cgroup cpu使用情况）来预测未来10分钟内 每个CPU 95%使用率。
- 使用用[cvxpy](https://www.cvxpy.org/)作为前端，将预测送入MIP（混合整数程序）求解。 
- 服务将放置策略返回主机， 主机通过修改容器的cpusets来执行它。

##   **后续：**

- 支持 CPU超额预定(CPU oversubscription)
- 利用内核[PMC事件](http://www.brendangregg.com/blog/2017-05-04/the-pmcs-of-ec2.html)来更直接地优化最小的缓存噪声

