今天記錄的**為: 《dominant resource fairness: fair allocation of multiple resource types》(nsdi』11)。這篇**介紹了在多資源緯度場景下(比如cpu和memory)的排程演算法,證明了演算法所具備的幾個重要的特性。寫這篇博文的時候,只看了其中的前幾節,摸清楚整個演算法的大致思路,後面的數學證明還沒看。因此這篇博文嚴格說只是半篇介紹,作為後面介紹的乙個引子。
廢話不多說,先直接用**中的乙個簡單的例子來說明演算法思路:
考慮乙個有的資源池。有兩個user a和b,向這個資源池申請資源執行自己眾多的task。出於簡化問題的考慮,我們認為乙個user下的所有task的資源需求都是同質的。比如在這個例子中,a的每個task需要的資源為,b需要的是。那麼如何分配資源池的資源給user a和user b才算合理呢?**的演算法認為max-min fairness是合理的,即最大化最小資源分配者的資源總量(maximizes the minimum allocation received by a user)。簡單的說,如果系統發現乙個使用者當前分配到的資源在總池子中的佔比(share)較少,那麼就應該優先將資源分配給這個倒霉的使用者。換句話說,如果使用者任務數都是足夠的,那麼對於有n個使用者的系統,理論上使用者得到的資源應該都是池子的1n1n。這個優化目標在單一緯度的資源模型上是沒有問題的。比如只有cpu,我可以把資源給當前cpu分配量最少的那個使用者。但在對多緯度資源的場景下,比如這個case中需要同時考慮cpu和memory,又應當如何處理呢?
文章提出的基本思路是『看主導的那一維資源』(dominant resource)就可以了。什麼意思呢?比如上面這個case,對於使用者a來說,其cpu需求對池子的總cpu資源佔比(share)為1919,而memory為418=29418=29,因此其dominant resource share就是memory的那個2929,而b則為memory那個緯度的1313。整個演算法的優化目標就是讓所有使用者的dominant resource share值盡可能的」相等」。比如在上面的例子中,假定在池子中啟動了xx個user a的task和yy個user b的task,那麼問題就表達為:
由上面的方程可以解得, 即啟動3個a使用者的task,2個b使用者的task。二者分配的資源為a:, b:。在工程實現中,上面的思路可以翻譯成如下演算法:
這個演算法的思路很簡單,即維持記錄當前使用者的dominant resource的share值的大小,每次從中挑選最小的那個,只要資源足夠就把這個使用者的任務啟動起來。
在這個演算法下,上述問題的執行過程為:
此時,由於cpu資源已經被分配完了,因此演算法結束。上述過程出於簡單考慮,沒有處理任務結束的場景。在實際實現中,任務結束的時候,也需要更新具體的dom.share值。此外,可以對每個使用者增加乙個」權重值」,對share執行修正,以適應不同使用者資源分配量不同的場景。不論哪個變種,演算法的基本思路不會發生變化。LVS的排程演算法介紹
1.輪詢排程 rr 輪詢排程 round robin 簡稱 rr 演算法就是按依次迴圈的方式將請求排程到不同的伺服器上,該演算法最大的特點就是實現簡單。輪詢演算法假設所有的伺服器處理請求的能力都一樣的,排程器會將所有的請求平均分配給每個真實伺服器。2.加權輪詢排程 wrr 加權輪詢 weight r...
Linux IO排程器相關演算法介紹
io排程器 io scheduler 是作業系統用來決定塊裝置上io操作提交順序的方法。存在的目的有兩個,一是提高io吞吐量,二是降低io響應時間。然而io吞吐量和io響應時間往往是矛盾的,為了盡量平衡這兩者,io排程器提供了多種排程演算法來適應不同的io請求場景。其中,對資料庫這種隨機讀寫的場景最...
DRF資源分配演算法
dominant resource fairness 是mesos預設的資源分配策略 drf基於 最大 最小 演算法設計而成,支援異構環境下多種型別資源的排程。以公平的方式提供資源,保證每個計算框架可以接受到該框架需要的資源。mesos將資源劃分為 cpus gpus disk mem ports ...