Load-Balancing

根據他的 CPU 使用情況實時設置所有使用者程序的 nice 值

  • April 2, 2020

為了平衡使用者在共享計算伺服器上的 CPU 消耗,我認為如果可以:

  1. 為使用者的所有程序設置 nice 級別
  2. 此外,實時調整此級別
  3. 此外,這個級別不僅適用於未來,而且適用於正在執行的作業
  4. 此外,從使用者目前的整體 CPU 使用率得出這個級別

這個想法是使用者可以呼叫任意數量的作業。但是如果有其他使用者,他的優先級會下降,這取決於他要求多少。所以 A 可以一次使用所有 32 個核心。然後另一個使用者 B 來了,只開始了一項工作。現在 A 的優先級應該低於 B。然後 C 來啟動 8 個作業。他現在應該在 A 和 B 之間有一個優先級。但是,優先級實際上不應該基於程序的數量,而是基於它們的整體 CPU 需求——如果可以確定的話。

我想這可能與將相同份額的 CPU 分配給所有活躍使用者相同,只要他們使用它並將其餘的分配給所有想要更多的人。

你認為這有可能嗎?

你覺得這有道理嗎?

每一項任務都為自己

一個過於簡單的方法是根本不給它們配額。在這個 32 CPU 的機器上,A + B + C 是 41 個工作。加上核心的一些希望很小的系統成本。但是,並非所有東西都受 CPU 限制,在 I/O、記憶體和其他方面存在瓶頸。所以平均負載實際上不是 41,響應時間和吞吐量可能是可以容忍的。當然,沒有任何控制項可以防止進一步的負載導致性能問題。

公平的分享

也許資源應該按比例分配。例如Solaris 的公平共享調度程序就是這樣做的。假設 AB 和 C 都是 32 個核心池中某些區域的項目,每個都有 1000 個份額。(有關實際區域範例,請參閱 Greg 的註釋。)B 和 C 將以 100% 執行,因為它們使用的少於第三個。但是 A 在 23 個 CPU 上執行,因為需要 1 + 8 才能讓 B 和 C 分得一杯羹。如果您的管理員想出一些分配它們的方案,不平等的份額是可能的。

Linux cgroups 後來出現了類似的東西。CPU cgroups 可用於實現比例份額或特定配額。這就是 systemd 切片和 Kubernetes CPU 資源的分配方式。

接下來要執行什麼

由於有許多任務等待執行,理想情況下,調度程序不會讓任何東西等待太長時間才能在 CPU 上執行。在微觀層面上,執行隊列或等效工作的方式也與系統的執行方式相關。

Linux CFS 調度程序為每個等待的任務劃分時間片,這在這方面是公平的。此外,那些使用較少時間的任務首先完成。它具有優先互動事物,空閒等待使用者輸入的有用效果。

優先級(包括不錯的值)是調度程序決策的輸入。而且它不依賴配額人為地限制使用,這很好。然而,調整優先級,即使存在這樣做的方案,也有限制。當每個使用者都有不同優先級的任務時,一個系統範圍的優先級編號無濟於事,但仍需要保持公平的資源份額。

引用自:https://serverfault.com/questions/1010382