1. 程式人生 > >Dominant Resource Fairness: Fair Allocation of Multiple Resource Types

Dominant Resource Fairness: Fair Allocation of Multiple Resource Types

論文的大致內容:
在一個擁有多資源系統中往往需要面對資源平均分配的問題,每個使用者對每個資源都有不同的需求。針對這個問題,伯克利幾位大牛Ali Ghodsi, Matei Zaharia, Benjamin Hindman, Andy Konwinski, Scott Shenker, Ion Stoica發表了一篇文章,提出Dominant Resoruce Fairness(DRF)演算法,一個多資源分配的max-min fariness演算法。DRF不同於其他策略,他擁有幾個很重要的特性:
1. DRF刺激使用者共享資源,保證在均分資源後沒有使用者能夠獲得更多的資源
2. DRF是strategy-proof的,表示的意思是一個使用者不能通過欺騙他的真實需求來提高自身的分配額度
3. DRF是envy-free的,表示的意思是沒有使用者願意與其他使用者交易他的分配額
4. DRF是Pareto efficient的,因為通過降低其他使用者的分配來提高某一使用者的份額

Introduction
資源分配是任何共享資源的計算系統的重要元件,目前最流行的分配策略是Max-min fairness,它最大化了系統中使用者最小分配量,假設每個使用者有足夠的需求,這個策略給每個使用者一個相等資源份額。 Max-min fairness 方法現已被拓展成帶有權值的增強形式。
帶有權值的Max-min fairness可以支援多種資源分配策略,比如基於優先順序,保留和deadline的方法。除此以外,帶權值得Max-min fairness能夠保值隔離性,因為使用者能夠被確保收到她應得的資源而不管其他使用者的需求。
儘管在公平分配領域已經有很多的工作,但是焦點一直都放在了單一資源型別。儘管在擁有多資源的環境下,使用者擁異構的資源需求,分配也是使用了單一資源抽象進行的。比如Haddop,Dryad的公平排程器,這兩個廣泛使用的叢集計算框架,都是根據fixed-size劃分資源進行分配,並稱每個劃分為一個slot。這種方法忽略了在叢集中,不同的任務其實具有完全不同的CPU,記憶體和I/O資源的需求。

這篇文章主要解決了多資源異構需求的多使用者資源分配,具體的講,提出了Dominant Resource Fairness方法,DRF方法的設想是在多資源的環境中,使用者被分配的量應該由其dominant share來決定,dominant share是該使用者被分配的任何資源中最大的份額。一句話來說就是DRF目的是在所有使用者中,尋求最小份額的最大值。比如說,如果使用者A啟動了CPU密集型任務,使用者B啟動了記憶體密集型任務,DRF嘗試均等使用者A的CPU份額和使用者的記憶體份額。在單一資源的場景下,DRF退化成max-min fairness方法。

DRF的長處主要是它滿足的眾多屬性引人入勝,這些屬性在max-min fairness下的單一資源環境下很容易被滿足,但是在多資源情況下並不是那麼容易。這些屬性分別是:sharing incentive,strategy-proofness, Pareto efficiency, and envy-freeness.

Motivation
正如前面說的,之前在帶有權值的max-min fairness工作中,主要聚焦於單一的資源,然而現在雲端計算和多核處理器都進步的很快,使用者的多資源異構需求也在上升。 多資源這裡指的是多種不同的資源型別而不是多個可以相互替代的資源例項。

圖1展示了Facebook的2000個節點的Hadoop叢集一個月內的資料(2010年十月)
這裡寫圖片描述
每個圓圈都表示任務的記憶體和cpu消耗,圓圈的大小與在這個位置的任務數量成對數關係。儘管大量的任務都是CPU密集型的,仍然存在一部分任務是記憶體密集型的,尤其是在reduce環節。
3. Allocation Properties
為了闡述問題,假設一個系統擁有9個cpu,18GB記憶體,兩個使用者A和B,使用者A執行的每個任務需要< 1 cpu, 4GB >,B使用者執行的每個任務需要< 3cpus, 1GB >。那麼一個公平的分配方案會是什麼樣的?
一種可能是對每種資源都均分個每個使用者,另外一種方式是把cpu和記憶體看做一個整體,然後平均分配(CPU+記憶體)。儘管這種拍腦子想的方案很容易得到,但是仍然不清楚如何去比較評估這些分配方案。

為了應對這樣的挑戰,我們定義了一組我們認為任何資源分配方案都想要的目的,由這組目標屬性來引領我們構造公平的分配策略。 我們認為以下四個屬性很重要:
(1) Sharing incentive: 每個使用者都應該共享這個進群,而不是排他式的獨佔他得那部分叢集。 設想一個叢集擁有n個使用者,那麼使用者能夠至多分得1/n的所有資源,而不能夠分配更多的任務。(不知道這個對不對啊,這樣不是資源利用率不高麼)
(2) Strategy-proofness: 使用者不應該能能夠通過謊報他的資源需求來獲得更過的資源
(3) Envy-freeness: 使用者不會嫉妒別的人的資源分配,這個屬性意味著公平
(4) Pareto efficiency: 不可能在通過減少其他使用者資源的分配的情況下提高某一個使用者的資源分配量.
可以很容易的知道,max-min fairness在一種資源的情況下,滿足上述所有的屬性。然而,在多資源,異構的使用者需求的情況下下,並不容易(not trivial).
除了上述屬性,我們認為以下幾個屬性最好擁有:
(1) Single resource fairness: 對單一資源來說,方案應該規約到max-min fairness
(2) Bottleneck fairness: 如果有一個資源大家都是最需要,該方案也要規約到max-min fairness
(3) Population monotonicity: 如果有使用者離開了系統並釋放了她的資源,那麼其餘的使用者的分配資源不能有減少
(4) Resource monotonicity: 如果更多的資源被加入了系統,任何的使用者的資源不會減少
4. Dominant Resource Fairness(DRF)
對每個使用者,DRF計算每種資源的份額,一個使用者的最大份額被稱為dominant share,相對應的資源叫dominant resource. 不同的使用者可能擁有不同的dominant resource. 比如,一個使用者的計算密集任務的dominant share是CPU,一個使用者的I/O密集型的任務的dominant share是頻寬。DRF簡單的在使用者的dominant share上應用了max-min fairness。 也就是說,DRF目標是最大化系統中的最小的dominant share,然後是第二小,依此類推。

這一節中,我們考慮一個計算模型擁有n個使用者和m種資源,每個使用者執行獨立的任務,每個任務都是由demand vector來刻畫,比如< 1CPU, 4GB >. 一般的,任務通常有不同的demands,即使是隸屬於同樣的使用者。

4.1 一個例子
考慮一個系統有9CPUS,18GB RAM,兩個使用者A和B,使用者A執行的每個任務需要< 1 cpu, 4GB >,B使用者執行的每個任務需要< 3cpus, 1GB >。
在上述場景中,每個使用者A的任務都消耗1/9的總CPU,2/9的總記憶體,所以使用者A的dominant resource是記憶體,每個使用者B的任務都消耗1/3的總CPU,1/18的總記憶體。所以使用者B的dominant resource是CPU。 DRF將會均等化使用者的dominant share,如圖所示:
這裡寫圖片描述
使用者A有三個任務, < 3 CPUs, 12 GB >, 兩個任務給使用者B, < 6 CPUs, 2 GB >, 通過這樣的分配,每使用者最終將會得到相同的dominant share, 比如,使用者A得到2/3的記憶體,使用者B得到2/3的CPU。

這個分配方案可以如下列方式計算得到:
這裡寫圖片描述
令x和y分別代表DRF分配給使用者A和B的任務數,那麼使用者A得到< x CPU, 4x GB >,使用者B得到< 3y CPU, y GB>。 總的被分配的資源是(x + 3y)CPUs 和 (4x+y) GB, 那麼使用者A和B的dominant share為4x/18=2x/9和3y/9=y/3. 解決這個問題得到x=3,y=2. 那麼使用者A最後得到< 3CPU, 12GB >,B得到< 6CPU, 2GB >.

注意DRF並不是總的需要均等每個使用者的dominant shares。當一個使用者的總的需求得到後,使用者將不需要更多的任務,所以額外的資源可以那麼分配給其他使用者,像max-min fairness一樣。除此以外,如果一個資源被用完了,那麼那些不需要這個資源的使用者仍可繼續收到更高的其他資源的份額。

4.2 DRF 排程演算法
這裡寫圖片描述
Algorithm 1 顯示了DRF排程的虛擬碼。這個演算法跟蹤了分配給使用者的總的資源和使用者的dominant share,si. 在每一步,DRF選擇一個使用者,這個使用者她擁有最小的dominant share. 如果使用者的任務需求能夠被滿足,比如系統擁有足夠的資源滿足她,那麼她的任務能夠被啟動。 我們考慮一個一般的情況,一個使用者可以啟動不同資源需求的任務,我們使用Di來表示使用者i的下一個想啟動的任務的需求向量,為了簡單起見,虛擬碼並沒有包括任務完成的事件資訊。這個例子中,使用者釋放任務的資源,然後DRF重新選擇擁有最小dominant share的使用者,來啟動她的任務。

考慮4.1中兩個使用者的例子,表1闡述了DRF對這個例子的分配過程。
這裡寫圖片描述
DRF首先選擇B來啟動任務,結果是,B的份額成為< 3/9, 1/18 >,然後dominant share成為max(3/9,1/18)=1/3,下一步,DRF選擇A,因為她的dominant share是0,這個過程反覆反覆直到不可能啟動新的任務。這個例子中,是最後CPU飽和了。

最後,使用者A得到< 3CPU, 12GB >,使用者B得到< 6CPU, 2GB >,每個使用者得到了2/3的dominant share. 注意這個例子中只要資源被耗盡了,分配就結束了。然而,在一般情況中,在有些任務不需要獲取耗盡資源的情況下,仍然能夠啟動新的任務。

以上的演算法可以用二叉堆來儲存每個使用者的dominant share, 每個排程決策使用O(logn)時間複雜度。

4.3 帶有權值的DRF
在實際中,均分所有的資源給所有的使用者並不是是我們的目的,相反,我們希望給執行更重要任務的使用者分配更多的資源,或者給叢集貢獻更多資源的使用者更多的資源。為了實現這樣的目的,我們提出帶有權值的DRF,一個更一般的DRF和加權max-min fairness。

在帶有權值的DRF中,每個使用者i的權值來自於Wi=< wi,1,….,wi,m >,其中wi,j表示使用者i對資源j的權值。那麼使用者i的dominant share的定義變成了si=maxj{ui,j/wi,j},其中ui,j表示使用者i的資源j的份額,一個具體的情況是當麼個使用者i的權值相等時,比如wi,j=wi(1<=j<=m).在這種情況下使用者i,j的dominant share的比率會是wi/wj. 如果每個使用者的權值都是1,帶有權值的DRF會回到常規的DRF.

  1. Alternative Fair Allocation Policies
    在一個多資源環境中定義一個公平的分配方案是一件不容易的事情,因為“公平”如何來定義本身就是個開放的問題。DRF是目前為唯一一個滿足第三節提到的四種屬性,這一節中,我們考慮另外兩種替代方案,分別叫Asset Fairness,一個簡單的直觀的將資源看做整體均分給使用者的策略,和Competitive Equilibrium from Equal Incomes(CEEI),在微觀經濟學領域中均勻分配資源的方法,我們在5.3節進行了對DRF的比較。

5.1 Asset Fairness
Asset Fairness 目標是把資源看做整體,均勻分配給所有使用者,具體的來說,Asset Fairness計算每個使用者i的聚集份額xi=Sumjsi,j,其中si,j表示資源j分配給i的份額,然後在所有的使用者中應用max-min方法。比如它重複為擁有最小聚集份額的使用者啟動任務。

考慮4.1中的例子,既然記憶體的數量是CPU的兩倍(9CPUs,18 GB RAM),一個CPU值兩個GB的記憶體,假設一個GB的記憶體值1美元,一個CPU值2美元,那麼使用者A需要花6美元啟動一個任務,使用者B是7美元,假設x,y分別代表使用者A,B的啟動任務數量,那麼在asset fair分配中得到以下的優化問題:

這裡寫圖片描述
解得x=2.52,y=2.16,那麼也就是說使用者A得到(2.5CPU, 10.1GB),使用者B得到(6.5CPU,2.2GB)。

這個分配方法有缺點:它違背了sharing incentive 屬性。我們將在6.1節中看到asset fairness方法會導致一個使用者得到少於1/n的所有資源,n為使用者的數量。

5.2 Competitive Equilibrium from Equal Incomes
在微觀經濟學領域,均勻分配資源的方法通常採用 Competitive Equilibrium from Equal Incomes (CEEI) ,通過CEEI,每個使用者初始得到每個資源的1/n部分,然後每個使用者在這一個競爭市場裡頭對他的資源進行交易。最終CEEI的結果是envy-free和Pareto efficient。

更具體的說,CEEI方案實際上來自於Nash bargaining solution,Nash Bargaining Solution挑選能夠最大化productiui(ai),其中ui(ai)是使用者i在其分配方案中得到的效用值,為了簡化比較,我們假設一個使用者從他的分配方案中得到的效用值是他的dominant share si.

重新考慮4.1節中兩個使用者的例子,使用者A的dominant share是4x/18=2x/9,使用者B的dominant share是3y/9=y/3,最大化dominant share之積,與最大化x*y是一個性質的,於是CEEI著力於解決如下的問題:

這裡寫圖片描述
解得x=45/11,y=18/11,於是使用者A得到(4.1CPU, 16.4GB),使用者B得到(4.9CPU,1.6GB)。

遺憾的是,CEEI儘管是envy-free和Pareto efficient,但是他不滿足strategy-proof, 我們將會在6.1.2中指出使用者能夠通過謊報他們的資源需求得到資源分配。

5.3 Comparison with DRF
這裡寫圖片描述
DRF能夠均分dominant share,即使用者A的記憶體份額,使用者B的CPU份額,相反,Asset Fairness均等總的資源佔比,如圖中每個使用者的矩形框,最後,CEEI假設了一個絕對競爭的市場,能夠找到一個能夠達成市場清算的方案,也就意味著每個資源都能被分配。遺憾的是,這種方式使得欺騙CEEI成為可能:一個使用者可以聲稱她需要更多的未充分使用的資源,即使她並不需要,這就導致了CEEI給了她更多的任務以完成市場清算。

  1. Analysis
    6.1 Fairness Properties
    這裡寫圖片描述
    表2總結了Asset Fairness,CEEI和DRF滿足的公平性屬性,本節我們將通過例子展示Asset Fairness和CEEI缺少哪些屬性,同樣的,我們也證實沒有任何策略能夠保證資源單調性而不違背sharing incentive或者Pareto efficiency,所以DRF也缺少資源單調性。

6.1.1 Properties Violated by Asset Fairness
Asset Fairness違背了幾個重要的屬性:sharing incentive,bottleneck fairness, resource monotonicity.

考慮下圖的場景:這裡寫圖片描述
兩個使用者共享一個系統<30 ,30 >,需求向量為D1=<1,3>,D2=<1,1>,Asset Fairness將會給第一個使用者分配6個任務,第二個使用者12個任務,那麼第一個使用者會收到<6, 18>資源,第二個使用者收到<12,12>,儘管每個使用者收到聚集份額為24/60,但是第二個使用者僅僅得到了每個資源的少於一半的資源,這樣違背了sharing incentive屬性。

考慮另外一個場景,總資源是<21,21>,兩個使用者的需求向量為<3,2>,<4,1>會導致資源1是瓶頸資源。 Asset Fairness將會給每個使用者三個任務,是他們的聚集都是15,然而,這將會僅僅給第一個使用者3/7的資源1。

考慮兩個使用者的需求是<4,2>,<1,1>在一個兩資源都是77個單元的系統裡,Asset Fairness將會給第一個使用者分配<44,22>,第二個使用者<33,33>,來使得他們的總額度是66/77,如果資源二變成了雙倍,Asset Fairness會減少第一個使用者的分配為<42,21>,增加第二個使用者為<35,35>,使他們的份額為42/77+21/154=35/77+35/154=105/154. 這樣的話,就違背了資源單調性屬性。

6.1.2 Properties Violated by CEEI

這裡寫圖片描述

從這個圖中,我們看到,假設總的資源向量為<100,100>,兩個使用者的需求為<16,1>,<1,2>,這種情況下,CEEI分配給100/31,1500/31個任務給每個使用者,如果使用者1改變他的需求為<16,8>,CEEI會分別給使用者25/6,100/3個任務,那麼其實是使用者1通過欺騙的形式,提高了他的任務數量。

未完,待續

相關推薦

Dominant Resource Fairness: Fair Allocation of Multiple Resource Types

論文的大致內容: 在一個擁有多資源系統中往往需要面對資源平均分配的問題,每個使用者對每個資源都有不同的需求。針對這個問題,伯克利幾位大牛Ali Ghodsi, Matei Zaharia, Benjamin Hindman, Andy Konwinski, S

Mesos Resource Allocation Algo: DRF(Dominant Resource Fairness)

location pdf ast sam original system lai sources type http://datastrophic.io/resource-allocation-in-mesos-dominant-resource-fairness-expl

Writing a Resource Manager -- Chapter 2:The Bones of a Resource Manager

Chapter 2:The Bones of a Resource Manager 讓我們從資源管理器的整體結構開始。首先,我們將瞭解客戶端和伺服器端的內幕情況。之後,我們將進入資源管理器中的層,然後檢視一些示例。 Under the covers 儘管您將使用隱藏了許

Revisiting Salient Object Detection: Simultaneous Detection, Ranking, and Subitizing of Multiple Sal

問題: 作者認為,顯著性目標檢測領域迄今為止的工作解決的是一個相當病態的問題。即不同的人對於什麼是顯著性目標沒有一個普遍的一致意見。這意味著一些目標會比另一些目標更加顯著,並且不同的顯著性目標中存在著一個相對排名。 本文方法: 本文方法解決了考慮了相對排名這個更普遍的問題,並且提出了適合

TensorFlow Allocation of 1511424000 exceeds 10% of system memory

在利用TensorFlow社群的神經網路新手教程的一個例程時,遇到了一個因為記憶體問題而導致電腦卡主沒反應的問題,本次神經網路的模型為一隱層的神經網路模型(2,3,1結構),在訓練過程中,出現了記憶體的問題。 print(‘test accuracy %.3f’

DevTools: Improved Logging of Multiple Values

DevTools: Improved Logging of Multiple ValuesWriting multiple values to the console usually looks like this — using ordinary console.log:console.log(age, n

關於datebase,cursor的一些異常 android.database.CursorWindowAllocationException: Cursor window allocation of

原來測試的時候沒有報錯,現在出現好多藍色提示,並且有時候程式會崩潰,我出現過以下幾個錯誤 android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb faile

How to Use 3 Kinds of NetSuite Billing Types

Project management in NetSuite offers a great deal of flexibility when managing projects and resources. With that flexibility comes the options t

loadrunner出現報錯operands of = have illegal types `pointer to char' and `int'

原始程式碼: void split(char * p,char * str){ /* 傳入一個數組進行p和一個以什麼進行分割的str,返回切片後的值 */ int i = 0, j = 0; char tmp[32][32] = {0}; char *

【問題記錄系列】the resource is not on the build path of a java project

搭建 關閉 spring源碼 remove 環境 eclips 右鍵 生產 ldp 在eclipse中新建了一個maven項目搭建Spring源碼閱讀環境,創建一個bean生產getter和setter方法的時候報錯“the resource is not on the b

Failed to load resource: the server responded with a status of 404 (Not Found)

PE nbsp ava col AI div short rtc not Failed to load resource: the server responded with a status of 404 (Not Found) 報錯情況:圖標加載失敗 原因分析:路徑錯誤

Description Resource Path Location Type Unknown Unknown Unknown org.eclipse.core.internal.resources.Marker is not of a displayable type

刪除 cat sources unknown isp pre 項目 warnings aries 是訪問限制報錯. 方法一: 全局屬性Project>preferences>java>Compiler>Errors/Warnings>把右側的【

Error creating bean with name 'fileController': Injection of resource dependencies failed;

alt context http original pen isp listener uestc file 1.錯誤描述 Exception sending context initialized event to listener instance of class o

Zend Studio 開發Resource is out of sync with the file system的解決辦法

SVN上down下來的專案,本地執行卻無法顯示頁面,經過嘗試給模板檔案改名就能迴避這個問題。 定位到是模板快取的問題,於是清模板快取。 但是發現ThinkPHP專案Runtime目錄下的快取檔案在刪除時候會提示: Resource is out of sync with the file

Injection of resource dependencies failed;錯誤幾種解決方法

Error creating bean with name 'connDataController': Injection of resource dependencies failed; 最近研究ssm專案的時候出現這個問題,去網上一搜那答案真是差不多,都沒有解決我的問題,後來在重複搭建專案後

解決Error creating bean with name XXX: Injection of resource dependencies failed

解決SSH整合時出現的錯誤,錯誤如上圖所示。 該錯誤是因為Mybatis中需要的註解,spring沒有檢測到此註解資訊。 錯誤原因可能有四處: (1):web.xml沒有配置spring的上下文環境和核心的監聽器 解決辦法: 在web.xml新增 <!--s

Error: Expected resource of type id [ResourceType]解決辦法

如下方法報錯: @TargetApi(19) public SystemBarTintManager(Activity activity) { Window win = activity.getWindow(); ViewGroup dec

打包時Resource is out of sync with the file system 報錯問題

這是檔案系統不同步的問題,是因為在eclipse之外對工程中的resource進行修改引起的;但是,有時沒有在eclipse之外進行修改,也會報類似的錯誤。  解決辦法:需要手動重新整理一下資源管理器。  (1)在eclipse中,工程目錄右鍵,選擇F5(refresh)&n

解決The resource identified by this request is only capable of generating responses with charac.......

在除錯springmvc的時候,將一個物件返回為json串的時候,瀏覽器報406錯誤,錯誤內容如下: The resource identified by this request is only capable of generating responses

解決:Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.

今天除錯專案程式碼,出現的引resource的Injection報錯,查原因查了好長時間才找到,現在這裡總結一下,以免以後忘掉以及給大家參考。 最終原因是迴圈呼叫,也就是我要注入的那個類也呼叫了我當前在寫的類; 報錯大致內容入下: Error starting Ap