Power-Management

限制所有程序和核心的 CPU 使用率

  • December 28, 2016

我最近在我的戴爾機器上安裝了 Scientific linux 7(64 位),它有 2 個核心(即 2 個邏輯 CPU)。我有一段時間沒有打開電腦來清潔風扇、冷卻器等,當在一個(或兩個)核心上使用高(例如 100%)cpu 幾分鐘(通常是noveau損壞在Firefox上顯示圖形或載入 PDF 文件,或在終端上傳入任何長時間執行的命令,如make)。

在我清理系統之前,我想將 CPU 使用率限制在每個核心(而不是每個程序!)的 75% 或 80% 左右,這樣我就不會意外關機。這樣,程序仍然可以利用多個 CPU,但不會將它們中的任何一個推到 CPU 使用百分比限制之上。有什麼方法可以做到這一點?

經過幾天的深入研究,我發現了兩種降低程序 CPU 使用率的方法。一般來說,如果你想降低整機的cpu使用率,可能有一些程序使用最持久的cpu,你應該限制它們而不是給整機增加負擔。如果您這樣做是為了節省電池壽命,那麼您可能還想使用tunepowertop來控制硬體的電源使用,大多數發行版都有工具可以幫助您。

  1. 停止/繼續信號

信號從 UNIX 開始就存在。您將 SIGSTOP 或 SIGTSTP 發送到程序(不同之處在於,如果必須執行清理工作,前者可能會使程序崩潰,程序不會被迫停止在​​後者,使用適合您程序的程序)來暫停它(釋放CPU 和可能降低溫度)。然後你向程序發送一個 SIGCONT 以恢復它,佔用 CPU。此方法將在 cpu 圖上產生一系列“尖峰”,並阻止處理器過熱,因為您沒有通過暫停程序來給它足夠的時間。

這種方法的結果是這些暫停不流暢,這意味著影片播放甚至網頁瀏覽也不會流暢,因此您可能希望將此方法與 shell 命令(多程序程序或命令,如 Google Chrome 或 make這種方法也不能很好地工作)。顯然,建議像 systemd 那樣暫停/恢復系統程序。

儘管您可以手動執行此操作,但 cpulimit是一個使用此方法的不錯的小程序(它使用 SIGSTOP/SIGCONT)。與描述相反,即使您有多個核心,您指定的 cpu % 也在 0 到 100 之間。您可以隨時使用 Ctrl-Z 暫停終端中的作業。

  1. cpupower(強烈推薦)

這個是內置在 Linux 核心中的,所以大多數發行版都應該提供它(如果你沒有的話,可以在這裡獲取)。這個命令行實用程序管理 CPU 頻率,因此它幾乎可以使用調控器狀態(例如,性能、節能等)控制整個 cpu,它還可以做其他事情。與暫停/恢復方法不同,使用此方法的過程要順暢*得多。*您需要設置處理器的最大頻率。

  1. 執行cpupower frequency-info以查看可用的處理器狀態。
  2. 以root 身份鍵入cpupower frequency-set -u <frequency>,從您擁有的最低頻率開始,然後嘗試找到不會過熱的最高頻率。
  3. (這是可選的)如果你願意,你可以安裝 lm_sensors 包,它可以讓你看到你的系統溫度。然後執行sensors-detect並對所有問題回答“是”。最後,執行sensors以查看目前和臨界(系統過熱)溫度。

在這一點上,現在的溫度應該低得多。請注意,儘管某些性能密集型程序(例如游戲)在鍵入上述命令後可能會掛起,但如果您收到帶有該消息的彈出視窗,您應該等待程序而不是強制退出。請注意,每次系統重新啟動時都必須鍵入此命令(除非您可以使其自動執行)。有關 cpupower 的更多資訊,請參閱

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