DRF算法
最近在看yarn的一些東西,看到DRF的時候特別糾結爲什麼第一個選的是B,查了一些資料,尼瑪全是從書上扒下來的,千篇一律,沒有任何參考價值。後來從mesos的一篇文章中看到,原來第一個選誰都可以,選A選B的結果是一樣的。下面記錄下調度器先選擇A的調度順序和資源分配情況是怎樣的。
DRF簡介
DRF是一種通用的多資源的最大最小公平分配策略,其核心思想是在多環境下一個用戶的資源分配應該由用戶的主導份額的資源決定。主導份額的資源是在所有已經分配給用戶的多種資源中,佔據最大份額的一種資源。簡而言之,DRF試圖最大化所有用戶中最小的主導份額。
上面那段話從網上扒的,前面都還好,最後一句繞口令一樣的總結也是說蒙了不少人。
算法的完整表述
- 初始化系統所擁有的資源總量R
- 初始化已經分配出去的資源總量C
- 初始化應用的主導份額S
- 初始化每個應用所分配到的資源U
- 每次選擇已經分配給應用的主導資源佔這種資源總量的比例最小的那個應用
- 更新R,C,S,U的值
可能第五步說的有點繞,舉個例子,還是拿書中的例子說把,不過這裏我們先選擇A進行調度:
調度順序 | User A 使用的資源 | User A主導資源 | User B使用資源 | User B主導資源 | Cpu | RAM |
---|---|---|---|---|---|---|
A | (1/9, 4/18) | 4/18 | (0,0) | 0 | 1/9 | 4/18 |
A | (2/9, 8/18) | 8/18 | (0,0) | 0 | 2/9 | 8/18 |
B | (2/9, 8/18) | 8/18 | (3/9, 1/18) | 3/9 | 5/9 | 9/18 |
B | (2/9, 8/18) | 8/18 | (6/9, 2/18) | 6/9 | 8/9 | 10/18 |
A | (3/9, 12/18) | 12/18 | (6/9, 2/18) | 6/9 | 9/9 | 14/18 |
最後是分配了3個A和2個B,可以看到最後資源的使用情況和分配結果和書上是一樣的,也就是說第一次調度優先調度誰對結果沒有影響。