Linux

我應該嘗試“平衡”我的執行緒還是 linux 這樣做?

  • June 6, 2020

一個簡單的例子。我正在執行一個使用 TCP 套接字為 http 請求提供服務的程序。它可能 A) 計算出意味著 CPU 將成為瓶頸的東西 B) 發送一個可能導致網路成為瓶頸的大文件或 C) 具有半隨機訪問的複雜數據庫查詢導致磁碟瓶頸

我是否應該嘗試將每個頁面/API 呼叫歸類為上述類型中的一種或多種,並嘗試平衡我應該擁有多少?或者作業系統會為我這樣做嗎?我如何決定我想要多少執行緒?

我將為硬體執行緒 12 和 48 使用 2 個數字(英特爾至強有那麼多)。我正在考慮讓 2/3 的執行緒用於重型 CPU(8/32),1 個執行緒用於重型磁碟(或每個磁碟 1 個重型執行緒),其餘 3/15 用於其他任何東西,這意味著沒有嘗試平衡網路。

我應該在僅支持 12/48 執行緒的硬體上擁有超過 12/48 執行緒嗎?我想要更少,這樣我就不會導致 CPU 進入較慢的節流模式(我忘記了它的名稱,但我聽說如果一次有太多晶片處於活動狀態,就會發生這種情況)。如果我必須對我的執行緒進行負載和資源平衡,我會怎麼做?

Linux:

Linux 核心對此有很好的實現,並且有許多特性/設置旨在管理正在執行的程序(通過 CPU 調控器、sysctl 或 cgroup)的資源,在這種情況下,調整這些設置以及交換調整(如果需要)是推薦,基本上您將根據您的設備調整預設功能模式。

應用更改後的基準測試、壓力測試和情況分析是必須的,尤其是在生產伺服器上。當核心設置被調整到所需的使用時,性能提升可能非常重要,另一方面,這需要測試並很好地理解不同的設置,這對於管理員來說是非常耗時的。

Linux 確實使用調控器在正在執行的應用程序之間對 CPU 資源進行負載平衡,許多調控器可用;根據您發行版的核心,某些調控器可能不可用(可以重建核心以添加缺失或非上游調控器)。您可以檢查目前的調控器,更改它,更重要的是,在這種情況下,調整它的設置

附加文件:閱讀指南類似問題頻率縮放、調節器選擇性能調節器cpufreq

系統控制:

Sysctl是用於在執行時檢查和更改核心參數的工具,可以使用配置文件進行永久調整/etc/sysctl.conf,這是此答案的重要部分,因為可以使用 Sysctl 更改許多核心設置,可以顯示可用設置的完整列表使用該命令sysctl -a,可獲得有關文章和本文的詳細資訊。

C組:

核心提供了以下功能:控制組,在本指南中,它們的簡稱為 cgroups。Cgroups 允許您在系統上執行的使用者定義的任務(程序)組之間分配資源,例如 CPU 時間、系統記憶體、網路頻寬或這些資源的組合。您可以監控您配置的 cgroup,拒絕 cgroup 訪問某些資源,甚至可以在正在執行的系統上動態重新配置您的 cgroup。cgconfig(控制組配置)服務可以配置為在引導時啟動並重新建立預定義的 cgroup,從而使它們在重新引導後保持不變。

來源,進一步閱讀關於此事的問題。

記憶體:

如果系統的記憶體數量有限,這可能很有用,否則您可以禁用交換以主要使用記憶體。交換系統可以按程序或使用交換設置進行調整。如果需要,可以使用ulimit限制每個程序的資源(ram) (也用於限制其他資源)。

磁碟:

磁碟 I/O 設置 ( I/O Scheduler ) 以及集群大小可能會更改。

備擇方案:

其他工具,如nicecpulimitcpusettasksetulimit可以用作替代方案。

引用自:https://unix.stackexchange.com/questions/587930