中文译名:优势资源公平性:多种资源类型的公平分配
摘要
解决不同类型资源在系统内的资源公平分配问题,提出优势资源公平性算法(DRF),是一种对多种资源类型的最大-最小公平性的推广。 DRF满足几个属性。首先,DRF鼓励用户共享资源,通过确保如果资源在他们之间平均分配,没有用户会更好。其次,DRF是防策略的,因为用户不能通过谎报自己的需求来增加她的分配。第三,DRF是免费的,因为没有用户愿意将她的分配与其他用户的分配进行交换。最后,DRF的分配是帕累托有效的,因为不可能在不减少另一个用户的分配的情况下改进一个用户的分配。 在Mesos集群资源管理器中实现了DRF,并表明它比当前集群调度器中基于插槽的公平共享方案具有更好的吞吐量和公平性。
介绍
资源分配是任何共享计算机系统的关键组成部分。到目前为止,提出的最流行的分配策略之一是最大-最小公平算法,它最大化了用户在系统中接收到的最小分配。假设每个用户都有足够的需求,该策略给每个用户相同的资源份额。最大-最小公平性已被推广到包括权重的概念,即每个用户获得与其权重成比例的资源份额。 加权最大-最小公平性的吸引力源于它的通用性和它提供性能隔离的能力。加权最大-最小公平性模型可以支持多种其他资源分配策略,包括优先级、保留和基于最后期限的分配。此外,加权的最大-最小公平性确保了隔离,因为一个用户可以保证收到她的份额,而不考虑其他用户的需求。 考虑到这些特性,大量的算法被提出来实现不同精度的(加权)最大最小公平,这并不奇怪,如循环、比例资源共享和加权公平排队。这些算法已应用于多种资源,包括链路带宽、CPU、内存和存储。 尽管在公平分配方面做了大量的工作,但迄今为止的重点主要集中在单一的资源类型上。即使在用户有异构资源需求的多资源环境中,分配通常也使用单个资源抽象来完成。例如,Hadoop和Dryad这两个广泛使用的集群计算框架,在节点的固定大小分区级别上分配资源,称为插槽。尽管这些集群中的不同作业可能对CPU、内存和I/O资源有很大不同的需求。 DRF论文主要解决了将多种类型的资源公平分配给具有异构需求的用户的问题,提出DRF:一种对多种资源的最大-最小公平性的泛化方法。DRF背后的直觉是,在多资源环境中,用户的分配应该由用户的主导份额来决定,这是用户被分配的任何资源的最大份额。简而言之,DRF寻求在所有用户中最大化最小的主导份额。例如,如果用户A运行cpu密集型的任务,而用户B运行内存密集型的任务,那么DRF将试图将用户A的cpu份额与用户B的内存份额相等。在单一资源的情况下,DRF降低到对该资源的最大-最小公平性。 对于单一资源,最大-最小公平性可以满足这些属性,但在多个资源的情况下效果不太显著。 这四个属性分别是共享激励、策略证明性、帕累托效率和嫉妒自由性。DRF通过保证在用户之间静态和平均共享资源的系统中没有用户过得更好,从而激励用户共享资源。此外,DRF是策略证明的,因为用户不能通过谎报她的资源需求来获得更好的分配。DRF是帕累托效率的,因为它根据满足其他属性的条件分配所有可用资源,并且不抢占现有的分配。最后,DRF是没有嫉妒的,因为没有用户更喜欢分配其他用户。其他的解决方案至少违反了上述属性之一。 通过在Mesos上使用DRF作为资源调度策略,与Hadoop中基于槽的公平共享方案进行对比,发现基于DRF的Mesos具有更好的性能,Hadoop提供较弱的隔离保证以及较差的性能。 虽然本文关注的是数据中心的资源分配,DRF普遍适用于其他用户有异构需求的多资源环境,如多核机器。
动机
以前关于加权最大-最小公平性的工作主要集中在单一资源上,但在云计算和多核处理器的出现增加了对具有多资源和异构用户需求的环境的分配策略的需求。
在Facebook上超过一个月(2010年10月)的一个包含2000个节点的Hadoop集群中的任务的资源使用情况。现有的集群的公平调度器,如Quincy和Hadoop公平调度器,忽略了用户需求的异构性,并在槽的粒度上分配资源,其中槽是节点的固定部分。这将导致低效率的分配,因为一个插槽通常与任务需求不匹配。
分配属性
现在我们将注意力转向为多个资源和异构请求设计最大最小公平分配策略。为了说明这个问题,考虑一个由9个cpu和18 GB RAM组成的系统,以及两个用户:用户a运行的任务需要<1CPU,4GB内存>,用户B运行的任务需要<3GPU,1GB内存>。什么是在这种情况下的一个公平的分配政策?DRF开发者认为任何针对多个资源和异构需求的资源分配策略都应该满足以下四个属性: 1、共享激励:每个用户都应该更好地共享集群,而不是单独使用她自己的集群分区。考虑一个具有相同节点和n个用户的集群。那么,用户就应该不能在由1/n个所有资源组成的集群分区中分配更多的任务。 2、防策略性:用户不应该能够通过谎报他们的资源需求而获益。这提供了激励兼容性,因为用户不能通过撒谎来改善她的分配。 3、自由分配:用户不能拥有不同于别的用户的特定资源 4、帕累托效率:不可能在不减少至少另一个用户的分配的情况下增加一个用户的分配。这个特性很重要,因为它可以在满足其他特性的前提下实现系统利用率的最大化 共享激励属性,提供了性能隔离,因为它保证了每个用户的最小分配(即,一个用户不可能比拥有1n个集群更差),而不管其他用户的需求如何。 除了上述四个属性,DRF设计者也考虑其他属性: 1、单个资源公平:对于单个资源,解决方案应该减少到max-min公平。 2、瓶颈公平性:如果有一种资源是每个用户需求最多的,那么解决方案应该减少该资源的最大-最小公平性。 3、种群单调性:当一个用户离开系统并放弃她的资源时,剩余用户的分配不应该减少。 4、资源单调性:当系统增加资源时,现有用户的资源分配不会减少。
DRF算法
DRF优势资源公平性策略,是一个多资源的新分配策略。对于每个用户,DRF计算分配给该用户的每个资源的份额。用户所有份额中最大的份额称为该用户的优势份额,与该优势份额对应的资源称为优势资源。不同的用户可能拥有不同的优势资源。例如,运行计算绑定作业的用户的主导资源为CPU,而运行IO绑定作业的用户的主要资源是带宽。DRF只是在用户的主导份额上应用最大最小公平。也就是说,DRF寻求最大化系统中最小的主导份额,然后是第二大份额,依此类推。 在DRF算法举例中,考虑一个有n个用户和m个资源的计算模型。每个用户运行单独的任务,每个任务由一个需求向量表征,该需求向量指定任务所需的资源量,例如<1CPU, 4 GB>。一般来说,任务(甚至属于同一个用户的任务)可能有不同的需求。
一个例子
考虑一个有9个CPU、18 GB RAM和两个用户的系统,其中用户a使用需求向量<1CPU,4GB内存>运行任务,用户B使用需求向量<3GPU,1GB内存>运行任务。在上述场景中,用户A的每项任务占用cpu总数的1/9,占用内存总数的2/9,因此用户A的主要资源是内存。用户B的每项任务消耗总CPU的1/3和总内存的1/18,因此用户B的优势资源是CPU。这种分配可以用数学方法计算如下。设x和y为分配的任务数由DRF分别发给用户A和用户B。用户A收到<xCPU, 4xGB>,用户B收到h<3yCPU,yGB>。分配给两个用户的资源总量分别为(x + 3y)个cpu和(4x + y)个GB。另外,用户A和用户B的主要份额分别为4x/18 = 2x/9和3y/9 = y/3(它们对应的内存和CPU份额)。DRF分配由以下优化问题的解给出: max (x, y) (最大化分配) subject to x + 3y ≤ 9 (CPU限制) 4x + y ≤ 18 (Memory限制) 2x / 9 = y / 3 (均衡优势份额) 解这个问题得到x = 3和y = 2。因此,用户A获得3 CPU, 12 GB,用户B获得6 CPU, 2 GB。注意,DRF不需要总是平衡用户的主导份额。当一个用户的总需求得到满足时,该用户将不需要更多的任务,因此多余的资源将被分配给其他用户,这很像最大-最小公平策略。此外,如果资源耗尽,不需要该资源的用户仍然可以继续获得其他资源的更高份额。
DRF调度算法
算法跟踪分配给每个用户的总资源以及用户的主导份额Si。在每个步骤中,DRF从那些准备运行任务的用户中选择支配份额最低的用户。如果该用户的任务需求能够得到满足,即有足够的资源。考虑一个用户可以有不同需求向量的任务的一般情况,用变量Di表示用户i想要启动的下一个任务的需求向量。
在一个有9个CPU和18GB RAM的系统中,DRF将资源分配给两个用户,分别运行需要1 CPU, 4 GB和3 CPU, 1 GB的任务。每一行都对应于DRF做出的调度决策。一行显示每个用户对每个资源的份额、用户的主导份额以及到目前为止分配的每个资源的比例。DRF反复选择支配份额最低的用户(用粗体表示)来启动任务,直到不能再分配任务为止。
DRF首先选择B运行任务。因此,B的份额变为3/9,1/18,主导份额变为max(3/ 9,1/18) = 1/3。接下来,DRF选择A,因为她的优势份额为0。该流程将继续,直到不再可能运行新任务为止。在这种情况下,一旦CPU饱和,就会发生这种情况。
在上述分配结束后,用户A获得3 CPU, 12 GB,用户B获得6 CPU, 2 GB,即每个用户获得其优势资源的2/3。在一般情况下,即使某些资源已经饱和,仍然可能继续分配任务,因为有些任务可能对饱和的资源没有任何需求。
加权DRF调度算法
在用户之间平均分配资源不是理想的策略,可以将更多资源分配给运行更重要作业的用户。使用加权DRF,每个用户i关联一个权重向量Wi = (wi-1,…,wi-m), wi-j代表用户i使用资源j。
可选的公平分配策略
在多资源系统中定义一个公平的分配并不是一个容易的问题,因为“公平”的概念本身是可以讨论的。本节主要考虑两种方案:资产公平,一种简单而直观的政策,旨在均衡分配给每个用户的总资源;来自平等收入的竞争均衡(CEEI),一种在微观经济领域公平分配资源的选择政策。
资产公平
资产公平背后的思想是,不同资源的平等份额价值相同,即,1%的cpu价值等同于1%的内存和1%的I/O带宽。然后,资产公平性试图平衡分配给每个用户的总资源价值。总的来说,资产公平是为了计算每个用户所需资源的总份额,然后在用户的总份额上应用max-min,即为总份额最小的用户重复启动任务。由于其GB的RAM是CPU的两倍(即9个CPU和18 GB的RAM),因此一个CPU的价值是1GBRAM的两倍。假设一个GB值1美元,一个CPU值2美元,那么用户A为每个任务花费6美元,而用户B花费7美元。设x和y分别为资产公平度分配给用户A和用户B的任务数。然后通过以下优化问题的解给出资产公平分配:max (x, y) (最大分配) subject to x + 3y ≤ 9 (CPU 限制) 4x + y ≤ 18 (Memory 限制) 6x = 7y (每个用户花费相同) 求解上述问题得到x = 2.52, y = 2.16。因此,用户A获得2.5 cpu, 10.1 GB,用户B获得6.5 cpu, 2.2 GB。虽然这种分配策略看起来很简单,但它有一个显著的缺点:它违反了共享激励属性。正如上文说的,资产公平可以导致一个用户获得的资源小于所有资源的1/n,其中n是用户总数。
来自平等收入的竞争均衡
在微观经济理论中,公平分配资源的首选方法是来自等收入(CEEI)的竞争平衡。使用CEEI,每个用户最初接收每个资源的1/n,随后,每个用户在一个竞争非常激烈的市场中与其他用户交换它的资源。更准确地说,CEEI的分配是由纳什谈判解决方案给出的。在上面的问题中,A用户的主要份额是4x/18 = 2x/9而用户B的主要份额是3y/9 = y/3,其中x是任务的数量给A和y是任务的数量给b,最大化占主导地位的份额相当于最大化产品x·y。因此,CEEI致力于解决以下优化问题:max (x · y) (maximize Nash product)subject to_x _+ 3_y ≤ _9 (CPU constraint) 4_x _+ _y ≤ _18 (Memory constraint) 解决上述问题可以得到x = 45/11和y = 18/11。因此,用户A的是4.1cpu,16.4GB,而用户B的4.9cpu,1.6GB。
与DRF对比
将DRF与基于资产公平以及CEEI的分配策略的结果进行对比。
DRF均衡了用户的主导份额,即用户A的内存共享和用户B的CPU共享。相比之下,资产公平性等于分配给每个用户的资源的总比例,即图中每个用户的矩形区域。最后,由于CEEI假设一个完全竞争的市场,它找到了一个满足市场许可的解决方案,每个资源都被分配。不幸的是,这个确切的特性使欺骗CEEI成为可能:用户可以声称她需要更多的一些未充分利用的资源,即使她没有,导致CEEI给这个用户更多的整体任务,以实现市场许可。
分析
资产公平
下表总结了资产公平性、CEEI和DRF所满足的公平性属性。
资产公平违反了:共享激励属性、资源单调性以及瓶颈公平性。如上图所示DRF实现了除资源单调性外的所有属性。这并不是DRF的一个限制,而是由于不能同时实现共享激励、帕累托效率和资源单调性这一事实的结果。由于这些属性中的前两个更重要,并且由于向系统添加新资源是一个相对罕见的事件,优先选择满足共享激励和帕累托效率,并放弃资源单调性。
离散资源分配
上面假设是一个很大的资源池, 但在实际的生产环境中,集群可能会由多个小型机器组成。其中的资源以离散的数量分配给任务。文中给了如下结论: 在离散场景中,分配资源与连续分配场景相比,任意两个用户的分配差异被一个最大任务所限制。 假设从开始一次在一台机器上分配资源,并且总是将一个任务分配给占主导地位份额最低的用户。只要在第一台机器上至少有一个最大任务可用,就可以使用继续将任务分配给下一个主导份额最低的用户。一旦第一台机器上的可用资源小于最大任务大小,就会移动到下一台机器并重复这个过程。当分配完成时,两个用户分配的他们的主导资源与连续场景之间的差异最多是最大任务。
实验结果
通过微观和宏基准测试来评估DRF。前者是通过在Mesos集群资源管理器中运行DRF的实现来完成的。
动态资源共享
实验展示了在不同需求作业之间动态共享资源。在Amazon EC2上的一个48个节点的Mesos集群上运行了两个作业,使用了具有4个CPU核和15GB RAM的超大实例。将Mesos配置为在每个节点上分配最多4个cpu和14 GB的RAM,为操作系统留出1 GB。提交了两个作业,在6分钟的间隔内,在不同的时间启动具有不同资源需求的任务。下图a,b显示了给给每个作业的CPU和内存分配作为时间的函数,而下图c显示了它们的主导份额。在前2分钟内,作业1使用 1 CPU,每个任务使用10 GB RAM,作业2使用1 CPU,每个任务使用1 GB RAM。Job1的主要资源是RAM,而Job2的主要资源是CPU。DRF均衡了作业的主导资源份额。此外,由于作业有不同的主导资源,它们的主导份额超过了50%,即job 1使用了大约70%的RAM,而job 2使用了大约75%的cpu。因此,作业受益于在共享集群中运行,而不是占用每个节点的一半。这就抓住了共享激励属性的本质。2分钟后,两个作业的任务大小都变为2 CPU,作业1为4 GB,1 CPU,作业2为3 GB。现在,这两个作业的主要资源都是CPU,因此DRF均衡了它们的CPU共享。请注意,DRF通过让Mesos在任务完成时为占主导地位的份额最小的任务提供资源来动态切换分配。最后,再过2分钟,两个作业的任务大小再次改变:1 CPU,作业1为7GB,1CPU,作业2为4 GB。这两个作业的主要资源现在都是内存,因此DRF试图平衡它们的内存共享。
未来的工作
- 首先,在具有离散任务的集群环境中,一个有趣的问题是在不损害公平性的情况下最小化资源碎片化。这个问题类似于装箱,但必须打包尽可能多的项目(任务),以满足DRF。
- 第二个方向是定义当任务有位置约束时的公平性,比如机器偏好。考虑到目前多核机器的发展趋势。
- 第三个研究方向是探索DRF作为操作系统调度器的使用。