目錄
前言
本文是《Dominant Resource Fairness: Fair Allocation of Multiple Resource Types》的翻譯版本,如果需要原文請點擊https://people.eecs.berkeley.edu/~alig/papers/drf.pdf連接下載。
摘要
我們思考擁有多種資源類型的系統中的資源公平分配問題,其中每個用戶可能對每個資源都有不同的需求。爲了解決這個問題,我們提出了主導資源公平(DRF),它是最大-最小公平(max-min fariness)在多種資源類型上的推廣。本文證明了DRF與其他可能的策略不同,它滿足幾個非常理想的特性。首先,DRF通過確保在資源之間平均分配的情況下,沒有比較富裕的用戶,鼓勵用戶共享資源。第二,DRF是策略防範(防操縱的),因爲用戶不能通過謊報需求來增加她的分配。第三,DRF是無嫉妒的,因爲沒有用戶認爲其他用戶分配的資源比自己的更有價值。最後,DRF分配是帕累托最優的,因爲不可能在不減少其他用戶的份額的情況下改進某個用戶的份額。Mesos集羣資源管理器中實現了DRF,並表明它比當前集羣調度器中基於槽的公平分配方案具有更好的吞吐量和公平性。
1.介紹
資源分配是任何共享計算機系統的關鍵組成部分。迄今爲止提出的最流行的分配策略之一是最大-最小公平(max-min fairness),它最大化系統中用戶接收的最小分配。假設每個用戶都有足夠的需求,此策略爲每個用戶提供平等的資源共享。最大-最小公平被推廣到包括權重的概念,其中每個用戶收到的資源份額與其權重成比例。
加權最大-最小公平吸引人源於其通用性和性能隔離的能力。加權最大-最小公平模型可以支持多種其他的資源分配策略,包括優先級、預留和基於截止期限(base deadline)的分配。此外,加權最大-最小公平確保隔離,在這一點上,無論其他用戶的要求如何,用戶都能得到她的份額。
鑑於這些特點,提出了大量算法來實現(加權)最大-最小公平並具有不同的精度也就不足爲奇,如循環、比例資源分配和加權公平隊列。這些算法已應用於多種資源,包括鏈路帶寬,CPU、內存和存儲。
儘管在公平分配方面進行了大量的工作,但到目前爲止,重點主要集中在單一資源類型上。即使在用戶具有異構資源需求的多資源環境中,分配通常也是使用單個資源抽象完成的。例如,Hadoop和Dryad這兩個廣泛使用的集羣計算框架,把節點資源分割成固定大小的槽(slot),在槽這個級別分配資源。儘管這些集羣中的不同工作可能對CPU、內存和I/O資源需求存在很大差異。
本文研究了用戶對多種資源異構需求的公平分配問題。特別地,我們提出了主導資源公平(DRF),它是多種資源最大-最小公平的推廣。DRF背後的思想是,在多種資源環境中,用戶的分配應該由用戶的主導份額決定,這是用戶分配到全部資源的最大份額。簡而言之,DRF最大限度地尋求在所有用戶之間最小主導份額。例如,如果用戶A運行重CPU型任務,而用戶B運行重內存型任務,DRF將嘗試使用戶A的CPU份額與用戶B的內存份額相等。在單資源情況下,DRF會將該資源的公平性換算到最大-最小公平。
DRF的優勢在於其所滿足了很多特性。對於單個資源,最大-最小公平可以輕易滿足這些特性,但對於多種資源並不輕鬆。四個這樣的特性是鼓勵共享、策略防範、帕累托最優和無嫉妒。DRF靜態和均等的把系統中的資源分配給用戶,確保沒有一個用戶過得更好,爲用戶提供資源均分。此外,DRF是策略防範的,因爲用戶不能通過謊報其資源需求來獲得更好的分配。DRF是帕累托最優的,因爲它在滿足其他特性的前提下分配所有可用資源,而不搶佔已經分配的資源。最後,DRF是無嫉妒的,因爲沒有用戶喜歡另一個用戶分配的資源。其他解決方案至少違反了上述特性之一。例如,微觀經濟學理論中的公平分工機制,即平等競爭均衡不是策略防範的。
Mesos中實現並評估了DRF,Mesos是一個資源管理器,可以運行多個集羣計算框架,如Hadoop和MPI。我們將DRF與Hadoop和Dryad中使用的基於槽的公平分配方案進行了比較,結果表明,基於槽的公平分配會導致性能下降,不公平地懲罰某些工作負載,同時提供較弱的隔離保證。
本文着重研究數據中心的資源分配問題,我們認爲,DRF通常適用於用戶具有異構需求的多資源環境,例如多核機器。
2.動機
雖然之前關於加權最大-最小公平的工作集中在單個資源上,但云計算和多核處理器的出現增加了對具有多個資源和異構用戶需求的環境的分配策略的需求。對於多個資源,我們指的是不同類型的資源,而不是同一個可互換資源的多個實例。
爲了激發對多資源分配的需求,我們在圖1中繪製了一個月(2010年10月)內Facebook Hadoop 2000個節點集羣中任務的資源使用概況。圖1中圓的位置表示任務消耗的內存和CPU資源。圓的大小與圓區域內的任務數量成對數關係。雖然大多數任務都是重CPU的,但也存在重內存的任務,特別是爲了減少操作。
圖1:Facebook2000節點Hadoop集羣中超過一個月(2010年10月)任務的CPU和內存需求。每個氣泡的大小是其區域中任務數的對數。
現有的集羣公平調度程序,如Quincy和Hadoop公平調度程序,忽略了用戶需求的異質性,並在槽的粒度上分配資源,其中槽是節點的固定分片。這導致效率低下的分配,因爲槽常常與任務需求匹配不良。
圖2量化了Hadoop MapReduce公平調度程序提供的公平性和隔離性級別。該圖顯示了任務CPU需求與槽CPU分配之間的比率以及任務內存需求與槽內存分配之間的比率的累計分佈函數CDF。我們通過簡單地將內存和CPU總量除以插槽數來計算槽內存和CPU佔有率。比率1對應於任務需求與槽資源之間的完美匹配,比率低於1對應於未充分利用槽資源的任務,而比率高於1對應於過度利用槽資源的任務,這可能導致任務波動。圖2顯示了大部分任務要麼未充分利用要麼過度利用它們的一些槽資源。修改每臺機器的槽數並不能解決問題,因爲這可能導致較低的總體利用率,或者由於過度使用而導致更多任務性能不佳。
圖2:Facebook2000個節點集羣在一個月內(2010年10月)的需求/槽CDF。需求/槽爲2.0表示需要的CPU(或內存)是槽CPU(或內存)大小的兩倍的任務。
3.分配特性
現在,我們將注意力轉向爲多種資源和異構請求設計一個最大-最小公平分配策略。爲了說明這個問題,考慮一個由9個CPU和18 GB內存組成的系統,以及兩個用戶:用戶A運行需要1個CPU 、4 GB內存的任務,而用戶B運行需要3個CPU核、1 GB內存的任務。什麼是公平分配政策?
一種可能是爲每個用戶分配每個資源的一半。另一種可能是使每個用戶的聚合(即CPU加內存)分配相等。雖然提出各種可能的“公平”分配相對容易,但是如何評估和比較這些分配尚不清楚。
爲了應對這一挑戰,我們從一組不受歡迎的特性開始,我們相信任何針對多種資源和異構需求的資源分配策略都應該滿足這些特性。然後,我們讓這些特性指導開發公平的分配策略。我們發現以下四個特性很重要:
- 鼓勵共享:每個用戶應該更好地共享集羣,而不是獨享用她自己的集羣分區。考慮具有相同節點和n個用戶的集羣。那麼,用戶應該不能夠在由1/n所有資源組成的集羣分區中運行更多的任務。
- 策略防範:用戶不應該通過謊報他們的資源需求而獲益。這也具備通用性,因爲用戶無法通過撒謊來改善其分配。
- 無嫉妒:用戶不應該喜歡其他用戶分配的資源。這一性質體現了公平的概念。
- 帕累托最優:如果增加某個用戶的份額只能減少其他至少一個用戶的份額。這一特性非常重要,因爲它可以在滿足其他特性的前提下最大限度地提高系統利用率。
我們簡要地評述了策略防範和鼓勵共享特性,我們認爲這些特性在數據中心環境中特別重要。我們已經討論過的來自雲運營商的有意思的跡象表明,策略防範很重要,因爲用戶試圖操縱調度程序是很常見的。例如,Yahoo的Hadoop MapReduce數據中心有不同數量的槽用於map和reduce任務。一位用戶發現map槽是競爭對手,因此只要在reduce階段他就啓動他的所有作業,MapReduce將手動完成map階段的工作。另一家大型搜索公司只在用戶能夠保證高利用率的情況下才爲工作提供專用機器。該公司很快發現,用戶會在代碼中加入有限循環,人爲地提高利用率。
此外,滿足鼓勵共享特性的任何策略也提供性能隔離,因爲它保證對每個用戶最小分配(即,無論其他用戶的需求如何,用戶不能做得比擁有集羣的1/n更糟)。
顯而易見,在單個資源的情況下,最大-最小公平滿足上述所有特性。然而,在多個資源和異構用戶需求的情況下實現這些特性並非易事。例如,微觀經濟學理論中的公平分工機制,即平等收入的競爭均衡,並不是策略防範的。
除了上述特性外,我們還考慮了其他四個很好的特性:
- 單資源公平性:對於單資源,解決方案應該蛻變到最大-最小公平。
- 瓶頸公平性:如果有一個資源是每個用戶都最需要的,那麼解決方案應該蛻變到該資源的最大-最小公平。
- 總體單調性:當用戶離開系統並放棄其資源時,剩餘用戶的分配不應減少。
- 資源單調性:如果系統增加了更多的資源,則現有用戶的分配不應減少。
4.主導資源公平(DRF)
我們提出了主導資源公平性(DRF),這是一種針對多種資源的新分配策略,滿足上一節中所有四個必需特性的要求。對於每個用戶,DRF計算分配給該用戶的每個資源的份額。用戶所有份額中的最大值稱爲該用戶的主導份額,與主導份額相對應的資源稱爲主導資源。不同的用戶可能擁有不同的主導資源。例如,運行計算密集型作業的用戶的主導資源是CPU,而運行I/O密集型作業的用戶的主導資源是帶寬。DRF簡單地將最大-最小公平應用於用戶的主導佔比的資源上。也就是說,DRF尋求最大化系統中最小的主導份額,然後是第二個最小的份額,依此類推。
在本節中,我們考慮一個具有n個用戶和m種資源的計算模型。每個用戶運行單獨的任務,每個任務都有一個需求向量,它指定了任務所需的資源量,例如1 個CPU核、4 GB內存。一般來說,任務(甚至是屬於同一用戶的任務)可能有不同的需求。
4.1舉個栗子
考慮一個具有9個CPU核、18 GB內存和兩個用戶的系統,其中用戶A使用需求向量1個CPU核、4 GB內存運行任務,而用戶B使用需求向量3個CPU核、1G內存運行任務。
在上面的場景中,來自用戶A的每個任務消耗了總CPU的1/9和總內存的2/9,因此用戶A的主導資源是內存。用戶B的每個任務消耗了總CPU的1/3和總內存的1/18,因此用戶B的主導資源是CPU。DRF將均衡用戶的主要份額,給出圖3中的分配:用戶A的三個任務,總共3個CPU核,12GB內存,用戶B的兩個任務,總共6個CPU核,2GB內存。通過這種分配,每個用戶最終得到相同的主導份額,即用戶A得到2/3的RAM,而用戶B得到2/3的CPU。
圖3: DRF分配的示例
這種分配可以用數學方法計算,如下所示。設x和y分別是DRF分配給用戶A和B的任務數。用戶A獲得<x CPU,4x GB>,而用戶B獲得<3y CPU,y GB>。分配給兩個用戶的資源總量是(x+3y)CPU和(4x+y)GB。另外,用戶A和B的主導份額分別爲4x/18=2x/9和3y/9=y/3(它們對應的內存和CPU份額)。然後通過以下優化問題的解決方案給出DRF分配:
解決這個問題會得到x=3和y=2。因此,用戶A得到<3CPU,12GB>,而B得到<6CPU,2GB>。
請注意,DRF並不總是需要平衡用戶的主導份額。當一個用戶的總需求得到滿足時,該用戶將不需要更多的任務,因此多餘的資源將在其他用戶之間進行分配,就像在最大-最小公平中一樣。此外,如果一種資源耗盡,不需要該資源的用戶仍然可以繼續獲得其他資源的更高份額。我們在下一節中提出了一種DRF分配算法。
4.2DRF調度算法
算法1顯示了DRF調度的僞代碼。該算法跟蹤分配給每個用戶的總資源以及用戶的主導份額, si 。在每一步中,DRF都會在那些準備運行任務的用戶中選擇佔主導份額最低的用戶。如果該用戶的任務需求可以滿足,即系統中有足夠的可用資源,則會啓動其中一個任務。我們考慮一個一般情況,在這種情況下,用戶可以擁有具有不同需求向量的任務,並且我們使用變量Di來表示我想要啓動的下一個任務用戶的需求向量。爲了簡單起見,並沒有在僞代碼捕獲任務退出事件。在這種情況下,用戶釋放任務的資源,DRF再次選擇具有最小主導份額的用戶來運行他的任務。
考慮第4.1節中的兩個用戶示例。表1說明了這個示例的DRF分配過程。DRF首先選擇B來運行一個任務。因此,B的份額變成3/9,1/18,佔主導的份額最大(3/9,1/18)=1/3。接下來,DRF選擇A,因爲她的主導份額是0。此過程將繼續,直到無法再運行新任務爲止。在這種情況下,一旦CPU飽和,就會發生這種情況。
在上述分配結束時,用戶A得到<3 CPU,12 GB>,而用戶B得到<6 CPU,2 GB>,即每個用戶得到其主資源的2/3。
注意,在這個例子中,一旦任何資源飽和,分配就會停止。但是,在一般情況下,即使某些資源已飽和,也可能繼續分配任務,因爲某些任務可能對飽和的資源沒有任何需求。
上述算法可以使用存儲每個用戶的主導份額的二叉堆來實現。然後,對於n個用戶,每個調度決策都需要O(log n)時間。
4.3加權DRF
實際上,在許多情況下,在用戶之間平均分配資源並不是理想的策略。相反,我們可能希望將更多的資源分配給運行更重要作業的用戶,或者分配給向集羣提供更多資源的用戶。爲了實現這一目標,我們提出了加權DRF,這是DRF和加權最大-最小公平的一個推廣。
對於加權DRF,每個用戶i都關聯一個權重向量Wi = 〈wi,1 , . . . , wi,m 〉, 其中wi,j表示用戶i的資源j的權重。用戶i的主導份額的定義變爲s i=maxj{ui,j/wi,j},其中ui,j表示用戶i對資源j的份額。特定情況下,當用戶i的所有權重都相等時,即wi,j=wi,(1≤j≤m)。在這種情況下,i和j用戶的主導份額之間的比率將簡單地爲wi/wj。如果將所有用戶的權重設置爲1,則加權的DRF會退化到DRF。
5.可選的公平分配策略
在多資源系統中定義公平分配不是一個簡單的問題,因爲“公平”的概念本身是可以討論的。我們努力調查了許多分配政策,最後確定DRF作爲唯一一項滿足第3節中所有四項要求的特性的:鼓勵共享、策略防範、帕累托最優和無嫉妒。在本節中,我們考慮了我們調查的兩個可選方案:資產公平,一種簡單而直觀的策略,旨在使分配給每個用戶的總資源均等,以及微觀經濟領域公平配置資源選擇的平等收入競爭均衡(CEEI)策略。我們將這些策略與DRF進行比較。
5.1資產公平
資產公平性背後的思想是:不同資源的相同份額價值相同,即,所有CPU價值的1%與內存的1%和I/O帶寬的1%相同。然後,資產公平試圖均衡分配給每個用戶的總資源值。特別是,資產公平爲每個用戶計算總的份額xi =∑jsi,j,其中Si,j是給用戶i的資源j的份額,然後在用戶的總份額上應用最大-最小公平,即它以最小的總份額重複地爲用戶啓動任務。
考慮4.1節中的例子。因爲內存的GB數量是CPU核數的兩倍(即9個CPU核和18GB 內存),所以一個CPU核的價值是1GB 內存的兩倍。假設1GB值1塊錢,一個CPU核值2塊錢,那麼用戶A每個任務花費6塊錢,而用戶B花費7塊錢。設x和y分別是由資產公平分配給用戶A和B的任務數量。然後,通過求解下列優化問題給出的資產公平分配是:
解決上述問題得出x=2.52,y=2.16。因此,用戶A得到2.5個CPU,10.1 GB,而用戶B得到6.5個CPU,2.2 GB。
雖然這種分配政策在其簡單性上似乎引人注目,但它有一個顯著的缺點:它違反了鼓勵共享特性。6.1.1章節會證明資產公平可能導致一個用戶獲得資源少於總資源的1/n,其中n是用戶總數。
5.2收入均等的競爭均衡(CEEI)
在微觀經濟學理論中,公平分配資源的首選方法是CEEI。對於CEEI,每個用戶最初每個資源擁有的1個,隨後,n個用戶在完全競爭的市場中與其他用戶交換其資源。CEEI的出局因爲只有無嫉妒和帕累托最優。
更準確地說,CEEI分配由納什討價還價解給出。納什討價還價解選擇可行的分配,以最大化∏i ui(ai),其中ui(ai)是用戶i從她的分配ai中獲得的實用價值。爲了簡化比較,我們假設用戶從其分配中獲得的效用與她佔主導份額si相同。
再次考慮前面節中的兩個用戶示例。回想一下,用戶A的主導份額是4x/18=2x/9,而用戶B的主導份額是3y/9=y/3,其中x是給a的任務數,y是給b的任務數,最大化主導份額的結果等於最大化x·y的結果,因此,CEEI旨在解決以下優化問題:
解決上述問題得到x=45/11和y=18/11。因此,用戶A得到4.1個CPU,16.4 GB,而用戶B得到4.9個CPU,1.6 GB。
圖4:DRF、資產公平性和CEEI在第4.1節的示例場景中給出的分配。
不幸的是,儘管CEEI是無嫉妒和帕累托最優的,但事實證明它並不是戰略防範的,正如我們將在第6.1.2節中展示的那樣。因此,用戶可以通過謊報資源需求來增加分配。
5.3與DRF比較
爲了讓讀者直觀地理解資產公平性和CEEI,我們將它們在4.1節中的示例中的分配與圖4中的DRF中的分配進行比較。
我們看到DRF均衡了用戶的主導份額,即用戶A的內存份額和用戶B的CPU份額。相比之下,資產公平性均衡分配給每個用戶的資源的總份額,即圖中每個用戶的矩形區域。最後,由於CEEI假設一個完全競爭的市場,它找到了一個滿足市場準入要求的解決方案,其中每個資源都被分配。不幸的是,這一事實使得欺騙CEEI成爲可能:即使用戶不用也可以聲稱她需要更多未充分利用的資源,導致CEEI給這個用戶更多的任務,以獲得市場許可。
6.分析
在本節中,我們將討論資產公平性、CEEI和DRF滿足第3節中介紹的哪些特性。當任務大小與可用資源不完全匹配時,我們還評估DRF的準確性。
6.1公平性
表2總結了資產公平、CEEI和DRF滿足的公平特性。在本節的其餘部分中,我們將討論表中一些有趣的丟失項,即每個算法違反的特性。特別地,我們通過實例說明了爲什麼資產公平和CEEI缺乏這些特性,並且我們證明任何策略都不能在不違背鼓勵共享或帕累托最優的情況下提供資源單調性,從而解釋了DRF缺乏資源單調性的原因。
表2:資產公平性、CEEI和DRF的屬性。
6.1.1資產公平不具備的特性
資產公平雖然是最簡單的策略,但卻違背了幾個重要的屬性:鼓勵共享、瓶頸公平性和資源單調性。接下來,我們使用示例來展示這些特性的衝突。
定理1:資產公平違反了鼓勵共享特性。
證明:考慮以下示例,如圖5所示:在一個資源總量爲<30,30>的系統中,兩個用戶具有需求向量d1=<1,3>和d2=<1,1>。資產公平性將分配第一個用戶6個任務,第二個用戶12個任務。第一個用戶將收到<6,18>資源,而第二個將收到<12,12>資源。
當每個用戶獲得24個相等的總份額時,第二個用戶得到的資源少於兩個資源的一半(15)。這違反了鼓勵共享特性,因爲第二個用戶靜態分集羣並獨享一半的節點會更好。
圖5:資產公平可能無法滿足鼓勵共享特性的示例。資產公平爲用戶2提供的資源少於兩種資源的一半。
定理2:資產公平違背了瓶頸公平性。
證明:考慮一個總資源向量爲<21,21>和兩個需求向量爲d1=<3,2>和d2=< 4,1>的場景,使第一個資源成爲瓶頸資源。資產公平性將爲每個用戶提供3個任務,將其總使用量平均爲15。但是,這隻給第一個用戶3/7的第一個資源(爭用的瓶頸資源),違反了瓶頸公平性。
定理3:資產公平不滿足資源單調性。
證明:考慮兩個用戶A和B,其需求分別爲<4,2>和<1,1>以及資源總量爲<77,77>。資產公平分配了A<44,22>和B <33,33>的份額,使其份額總數平均爲66/77。如果第2個資源總量翻倍,則兩個用戶在第2個資源中的份額將減半,而第一種資源是飽和的。資產公平在將A的分配減少到42、21,將B的分配增加到35、35,使其份額均衡到42/77+21/154=35/77+35/154=105/154,從而違背了資源的單調性。
6.1.2CEEI不具備的特性
雖然CEEI是無嫉妒和帕累托最優的,但事實證明它不是策略防範。直觀地說,這是因爲CEEI假設一個完全具有競爭力的市場,從而實現市場準入,即供需匹配和所有可用資源的分配。這可能導致用戶無需競爭就可以從CEEI獲得更高的份額,以便充分利用該資源。因此,用戶可以聲稱,她需要更多未充分利用的資源來增加她的整體資源份額。我們將在下面對此進行說明。
定理4:CEEI不是策略防範的。
證明:考慮下面的例子,如圖6所示。假設總資源向量爲<100,100>,兩個用戶的需求分別爲<16,1>和<1,2>。在這種情況下,CEEI分別爲每個用戶分配100/31和1500/31任務(大約3.2和48.8個任務)。如果用戶1將其需求向量更改爲<16,8>,要求比實際需要更多的第2個資源,CEEI將分別向用戶提供25/6和100/3任務(大約4.2和33.3 3個任務)。因此,用戶1通過謊報需求向量,她的任務數量從3.2增加到4.2。由於任務分配減少,用戶2因此受到影響。
圖6:展示CEEI如何違反策略防範的示例。用戶1可以通過聲稱她比實際需要更多的資源2來增加她的份額。
定理5:CEEI違反了集羣單調性
證明:考慮總資源向量<100,100>和三個具有以下需求向量的用戶:d1=<4,1>、d2=<1,16>、d3=<16,1>(見圖7)。CEEI將生成分配A1=<11.3,5.4,3.1>,其中括號中的數字表示分配給每個用戶的任務數。如果用戶3離開系統並放棄其資源,CEEI將給出新的分配A2=<23.8,4.8>,這使得用戶2分配的資源比A1更糟。
圖7:顯示CEEI違反集羣單調性的示例。當用戶3離開時,CEEI將分配從a)更改爲b),從而降低用戶2的份額。
6.1.3資源單調性VS共享激勵和帕累托最優
如表2所示,DRF實現了除資源單調性外的所有特性。這不是DRF的限制,而是鼓勵共享、帕累托最優和資源單調性不能同時實現的結果。由於我們認爲前兩個屬性更重要(見第3節),而且向系統添加新資源是一個相對罕見的事件,因此我們選擇滿足鼓勵共享和帕累托最優,並放棄資源單調性。特別是,我們有以下結果。
定理6:滿足鼓勵共享和帕累托最優特性的分配策略不能同時滿足資源單調性。
證明:我們使用一個簡單的例子來證明這個性質。分別考慮兩個具有對稱需求<2,1>和<1,2>的用戶A和B,並假設兩個資源的總量相等。鼓勵共享要求用戶A獲得至少一半的資源1,而用戶B獲得一半的資源2。根據帕累托最優,我們知道兩個用戶中至少有一個必須分配更多的資源。在不喪失通用性的情況下,假設用戶A被賦予超過資源1的一半(如果用戶B被賦予超過資源2的一半,則對稱參數成立)。如果資源2的總量現在增加了4倍,那麼用戶B將不再獲得其對資源2一半的保證份額。現在,滿足鼓勵共享的唯一可行分配是給兩個用戶一半的資源1,這就需要減少用戶1對資源1的份額,從而破壞資源的單調性。
這個定理解釋了DRF和CEEI都違反資源單調性的原因。
6.2離散資源分配
到目前爲止,我們已經隱式地假設了一個大資源池,它的資源可以任意地小規模分配。當然,在實踐中,情況往往不是這樣。例如,集羣由許多小型機器組成,其中資源以離散的數量分配給任務。在本節中,我們將這兩個場景分別稱爲連續場景和離散場景。現在我們將注意力轉向在離散場景中公平是如何受到影響的。
假設一個由k臺機器組成的集羣。讓max-task表示所有需求向量的最大需求向量,即max-task=<maxi{di,1},maxi{di,2},····,maxi{di,m}>。進一步假設可以在每臺機器上調度任何任務,即每臺機器上的資源總量至少是最大任務的需求量。只有當每個用戶都有嚴格的確定要求時,我們纔會考慮這種情況。考慮到這些假設,我們得到了以下結果。
定理7:與連續場景不同,在離散場景中,任意兩個用戶分配資源之間的差異的上限是一個max-task。
證明:假設我們開始一次在一臺機器上分配資源,並且我們總是將任務分配給具有最低主導份額的用戶。只要第一臺機器上至少有一個最大任務的資源可用,我們就繼續將一個任務分配給下一個份額最少的用戶。一旦第一臺機器上的可用資源小於最大任務,我們將移動到下一臺機器並重復該過程。當分配完成時,兩個用戶對其主導資源的分配與連續場景的分配之差最多爲max-task。如果不是這樣的話,那麼某個用戶A與另一個用戶B之間的差異將超過max-task的量。但是,這種情況不可能出現,因爲最後一次A被分配任務時,B應該也被分配一個任務。
7.實驗結果
本節通過微觀和宏觀的基準評估DRF。前者是通過在Mesos集羣資源管理器中運行DRF實現的實驗來實現的。後者是使用跟蹤數據驅動的模擬完成的。
7.1動態資源分配
在我們的第一個實驗中,我們展示了DRF如何在具有不同需求的作業之間動態地共享資源。我們在一個48節點的Mesos集羣上運行了兩個作業,使用4個CPU核和15GB內存的服務器。我們將Mesos配置爲在每個節點上分配最多4個CPU核和14 GB的內存,爲操作系統保留1 GB。我們提交了兩個作業,在6分鐘的時間間隔內,在不同的時間啓動具有不同資源需求的任務。
圖8(a)和8(b)顯示了作爲時間函數給每個作業的CPU和內存分配,而圖8(c)顯示了它們的主導份額。在前2分鐘內,作業1每個任務使用<1 CPU,10 GB RAM>,作業2每個任務使用<1 CPU,1 GB RAM>。作業1的主導資源是內存,而作業2的主導資源是CPU。請注意,DRF平衡了主導資源的份額。此外,由於作業具有不同的主導資源,它們的主導份額超過50%,即作業1使用大約70%的RAM,而作業2使用大約75%的CPU。因此,與每個作業獨享一半的節點相比,集羣共享作業從中獲益。這體現了鼓勵共享的本質。
圖8:兩個作業的CPU、內存和主導份額。
2分鐘後,兩個作業的任務大小將更改,作業1變爲<2CPUs,4GB>,作業2變爲<1CPU,3GB>。現在,兩個作業的主導資源都是CPU,所以DRF均衡它們的CPU份額。請注意,當任務完成時,DRF通過Mesos爲最小主導份額的作業提供資源。
最後,再過2分鐘,兩個作業的任務大小再次發生變化:作業1變爲<1 CPU,7 GB>和作業2變爲<1 CPU,4 GB>。兩個作業的主導資源現在都是內存,所以DRF試圖平衡它們的內存份額。份額不完全相等的原因是由於資源碎片(見第6.2節)。
7.2DRF vs其他分配策略
接下來,我們將針對兩種代替方案評估DRF:基於槽的公平調度(當前系統中的一種常見策略,如Hadoop公平調度器和Quincy)和(max-min)僅應用於單個資源(CPU)的公平分配。在實驗中,我們在運行了一個48節點的Mesos集羣,每個實例有8個CPU核和7 GB RAM。我們將Mesos配置爲在每個節點上分配最多8個CPU和6 GB RAM,爲操作系統提供1 GB的空閒空間。我們將這三個調度策略作爲Mesos分配模塊來實現。
我們使用兩類用戶運行的工作負載,表示兩個具有不同工作負載的組織實體。其中一個實體有四個用戶提交任務需求爲<1 CPU,0.5 GB>的小作業。另一個實體有四個用戶提交任務需求爲<2CPU,2 GB>的大型作業。每項作業包括80項任務。一旦一個作業完成,用戶就會啓動另一個具有類似需求的作業。每個實驗都進行了十分鐘。最後,我們計算了每種類型的完成作業的數量以及它們的響應時間。
對於基於槽的分配方案,我們將每臺機器的槽數從3個更改爲6個,以瞭解它如何影響性能。圖9到12顯示了我們的結果。在圖9和圖10中,我們比較了每種類型的作業在10分鐘內爲每個調度方案完成的數量。在圖11和12中,我們比較了平均響應時間。
從數據來看,有幾個趨勢是明顯的。首先,對於基於槽的調度,不管槽的數量如何,吞吐量和作業響應時間都比DRF差。這是因爲使用較少的槽,調度程序讓節點使用率不足(例如,在一個節點上只啓動3個小任務),而使用較多的槽,調度程序讓節點過度使用(例如,在一個節點上啓動4個大任務並導致交換,因爲每個任務需要2 GB,而節點只有6 GB)。第二,由於CPU級別的公平分配,執行的小作業數量與DRF類似,但執行的大作業數量要少得多,因爲某些計算機上的內存過度使用,導致運行在那裏的所有高內存任務的性能都很差。總的來說,這兩種資源基於DRF的調度程序具有最低的響應時間和最高的總吞吐量。
7.3使用Facebook跟蹤數據的模擬
接下來,我們將使用Facebook 2000節點集羣的跟蹤日誌,其中包含爲期一週的數據(2010年10月)。數據由Hadoop MapReduce作業組成。我們假設任務持續時間、CPU使用率和內存消耗與原始跟蹤中相同。在400個節點的較小集羣上模擬跟蹤,以達到更高的利用率級別,從而使二者公平性可以對比。羣集中的每個節點由12個槽、16個核和32 GB內存組成。圖13顯示了一個簡短的300秒的子示例,用可視化方式展示與Hadoop的公平調度程序(槽)相比,使用DRF時CPU和內存的利用率。如圖所示,DRF提供了更高的利用率,因爲它能夠更好地將資源分配與任務需求相匹配。
圖13:DRF和Facebook Hadoop槽公平集羣跟蹤的CPU和內存利用率。
圖14顯示了與Hadoop 公平調度程序相比,DRF的平均作業完成時間減少。小型工作的工作負載相當大,沒有改善(即-3%)。這是因爲小作業通常只有一個執行階段,完成時間由最長的任務決定。因此,對於這樣的小工作來說,完成時間很難提高。相比之下,大工作的完成時間減少了66%。這是因爲這些工作由許多階段組成,因此它們可以從DRF實現的更高利用率中獲益。
圖14:Facebook Hadoop集羣中跟蹤的不同作業大小的平均減少完成時間。
8.相關工作
我們簡要回顧計算機科學和經濟學的相關工作。
雖然計算機科學的許多論文都關注多資源公平性,但它們只考慮同一可互換資源的多個實例,如CPU和帶寬。與這些方法不同,我們關注的是不同類型的資源分配。
Quincy是一個在Dryad集羣計算框架環境中開發的調度程序。Quincy通過將公平調度問題建模爲low-cost flow問題來實現公平性。Quincy目前不支持多資源公平性。事實上,正如本文討論部分所提到的,將多資源需求納入low-cost flow公式似乎很困難。
Hadoop目前提供兩個公平分配調度程序。這兩個調度程序都以槽粒度分配資源,其中槽是計算機上資源的固定部分。因此,這些調度程序不能總是將資源分配與任務的需求相匹配,特別是當這些需求非常異構時。如第7節所示,這種不匹配可能導致集羣利用率低,或者由於資源過度使用而導致性能低下。
在微觀經濟學文獻中,公平問題是在博弈論框架內外進行研究的。Young和Moulin的書完全致力於這些主題,並提供了很好的介紹。正如Varian 所介紹的,微觀經濟學中公平劃分的首選方法是CEEI。因此,我們在第5.2節中對此給予了相當大的關注。與DRF相比,CEEI的主要缺點是它不是戰略防範。因此,用戶可以通過撒謊來操縱調度程序。
微觀經濟學文獻中提出的許多公平劃策略都是基於效用的概念,因此側重於效用的單一指標。在經濟學文獻中,最大-最小公平被稱爲效用的字典序(leximin)。
問題是多資源集合中的用戶效用是什麼,以及如何比較這些效用。一種自然的方法是將效用定義爲分配給用戶的任務數。但是這樣的建模工具和leximin一起違反了我們提出的許多公平性屬性。從這個角度來看,DRF有兩個貢獻。首先,它建議使用主導份額作爲效用的代理,這是使用標準的leximin排序來均衡的。其次,我們證明了低於此類效用函數該方案是策略防範的。請注意,leximin排序是kalai-smordinsky(ks)解決方案的詞典版本。因此,我們的結果表明,對於此類效用KS是策略防範的。
9.結論和未來工作
我們引入了主導資源公平(DRF),一種將最大-最小公平推廣爲多種資源類型的公平分配模型。DRF允許集羣調度程序考慮到數據中心應用程序的異構需求,這使得資源分配比現有這些將相同的資源片(槽)分配給所有任務的解決方案更加公平,利用率也更高。DRF滿足許多理想的特性。特別是,DRF是一種策略防範,因此可以鼓勵用戶準確地報告他們的需求。DRF還通過確保用戶在共享集羣中的性能至少與在較小的、獨立的集羣中的性能相同來鼓勵用戶共享資源。我們研究的其他調度程序,以及微觀經濟學文獻中關於公平的其他概念,都不能滿足所有這些特性。
我們通過在Mesos資源管理器中實現DRF對其進行了評估,結果表明,與目前普遍使用的基於槽的公平調度程序相比,它可以帶來更好的總體性能。
9.1未來工作
未來的研究有幾個有趣的方向。首先,在具有離散任務的集羣環境中,一個有趣的問題是在不損害公平性的情況下最小化資源碎片。這個問題類似於裝箱,但一個人必須滿足DRF並打包儘可能多的物品(任務)。第二個方向涉及到在任務具有位置約束(如機器首選項)時定義公平性。鑑於當前多核機器的發展趨勢,第三個有趣的研究方向是探索將DRF用作操作系統調度程序。最後,從微觀經濟學的角度來看,考慮到帕累托最優等其他可取的特性,一個自然的方向是研究DRF是否是多資