【每周论文】Heracles: Improving Resource Efficiency at Scale(ISCA 2015)
这篇文章发表在ISCA 2015,其中一作 DAVID LO 2015年毕业于斯坦福大学,是Christos Kozyrakis的学生,毕业之后去了Google的Platforms team,这个工作就是他在Google实习期间做出来的工作。
在数据中心中,为了保护一些面向用户的延迟敏感型应用,例如搜索服务、实时翻译服务、视频网站等应用的服务质量,通常会为其分配过多的资源来保证其性能,这其实是在一定程度上导致了服务器的资源利用率很低。各大公司为了提高自己数据中心的资源利用率,常常将延迟敏感型应用(latency-critical,LC)和其他应用(best-effort,BE)混合运行来提高资源利用率,但是这种方法最大的挑战是,这些应用混合运行之后对于系统的共享资源(如cache、memeory、I/O channels和network links)产生竞争进而对LC应用产生了干扰,对于LC应用来说,在尾延迟(tail latency)方面有非常严格的SLOs(service level objectives),甚至只有一点点的干扰都有可能违反SLO,这样常常导致LC应用的服务质量下降(用户的体验变差)。
作者的目标是消除LC作业的SLO违规,同时最大化BE任务的吞吐量。
为了实现这个目标呢,作者面临了三个挑战:
- 我们必须认真分配每个资源。保守的分配将降低BE任务的吞吐量,而乐观的分配将导致违反LC任务的SLO。
- 这两种任务的性能取决于多种资源,这将导致很广的资源分配空间,这就需要随着负载实时变化的同时去探索这些资源分配的空间。
- 在现在的服务器中,孤立和非孤立资源之间存在并不明显的相互作用。例如,为了避免热数据的驱逐而增加LC任务的cache,这可能会导致BE任务的未命中增加而产生内存带宽方面的干扰。
本文作者提出了Heracles,它通过软件和硬件方面的资源隔离机制,使不同的任务能够在一台物理机上运行。它能够在保证LC服务性能稳定的情况下,最大限度的将空闲资源给BE作业来使用,并且它使用了实时监控和离线分析来检测干扰源,通过隔离机制来预防干扰的产生。
Heracles会实时监控LC应用的latency,当LC的latency比较小时,可以运行更多的BE;当LC的latency比较大时,则会限制BE来避免干扰。下图是Heracles的整体架构,它会在每一个服务器上都会部署一个服务,来管理本地的LC服务和BE服务。Heracles的主要思想是将LC和BE任务相互干扰的问题当做一个优化的问题,通过分离干扰源来降低优化的复杂度,并将高维度的问题分解为很多个小的和相互独立的低维度的小问题。如下图所示,一个大的控制器下面还有三个子控制器,这三个子控制器通过绿色的控制器来协同工作。
该工作使用了4种隔离机制来减少干扰的产生,分别是core isolation、LLC isolation、DRAM isolation、power isolation、network traffic isolation。
那该工作的缺点就是,它只能保证一台服务器上的一个LC应用,如有其它的LC应用就被当做BE应用来对待了。并且在所有的应用中LC应用的优先级是最高最高的,当LC应用性能出现波动时,马上牺牲BE应用来空出来一部分资源给LC使用,当然当LC应用性能非常好很稳定时,会把一些松弛的资源来最大限度的运行BE应用。
现在Google对于单个LC应用和多个BE应用的混合部署有了好的方案,其实很期待他的future work,能够保障多个LC应用的混合部署。