nohup 是否將每個進程專門放置在一個核心上

nohup 是否將每個進程專門放置在一個核心上

我正在讀書這個連結剛才這讓我開始思考。

不久前,我在 32 核虛擬機的多達 30 個核心上啟動模擬,並使用調用nohup perl ...<rest of command>...和重定向 STOUT/STDERR 的包裝器腳本來執行此操作 - 我不確定具體細節是否相關,所以我會備用你詳細資訊。

從概念上講,我對多執行緒任務處理很滿意,但我天真地認為,在nohup 呼叫中對每個進程進行後台處理(每個進程都是一個單獨的模擬,然後運行幾週),足以將每個子程序放置到一個核心/執行緒上它自己的,然後繼續完成,而不需要 GNU Parallels 或其他東西。

我定期檢查它們,總是看到 30 個 vCPU 正在處理任務,一切都在合理的時間內完成,所以到目前為止我的邏輯似乎沒有任何問題...

有人(我認為在某個頁面上)告訴我這可能最終會導致「CPU 抖動」。

所以我的問題有幾個相互關聯的部分:

  • 首先,我是否錯誤地假設 nohup 和/或後台足以將進程黏在特定核心上? (並且可以在終端中顯示在特定核心上運行的進程嗎?Top 只告訴您哪些核心正忙,而不是據我所知它們正在執行什麼任務?)
  • 其次,即使有 2 個備用 CPU 可以處理系統其他任務,CPU 抖動也會發生嗎?
  • 最後,如果我沒記錯的話,給定的進程是否會固定到特定的 CPU,而且只有那個CPU,或者它們會根據調用順序/計時等在線程之間跳轉。

答案1

首先,我是否錯誤地假設 nohup 和/或後台是在終端機中顯示的特定核心上運行的進程? Top 只告訴您哪些核心正忙,而不是據我所知它們正在執行什麼任務? (並且可以

Nohup 運行命令的方式與沒有執行命令時完全相同,唯一的區別是它們從 pid 列表中刪除,以便在退出時向其發送訊號。 (disown 適用於未使用 nohup 啟動的程序)。

其次,即使有 2 個備用 CPU 可以處理系統其他任務,CPU 抖動也會發生嗎?

僅當在沒有 nohup 的情況下發生 CPU 抖動時...

最後,如果我沒有錯的話,給定的進程是否會固定到特定的CPU,並且只有該CPU,或者它們會根據調用順序/計時等在線程之間跳轉。一個行程會被固定在一個特定的CPU上嗎?

和沒有 nohup 一樣...

您可以使用 ps 查看進程正在哪個 cpu 核心上運行,並且可以使用任務集限製或更改對核心的限制。

ps -eo pid,sgi_p,cmd --sort sgi_p

taskset -c -p 0 1234

答案2

nohup沒有設定任何東西來在特定核心上保留進程。你通常會使用taskset一起nohup做那件事。top可以顯示進程最後調度在哪個核心上,它就是P列。

多年來,進程和執行緒調度變得相當複雜,因為需要考慮的因素越來越多:CPU 親和性、快取親和力、中斷處理、功率包絡……但如果您假設系統不太忙於其他任務,則啟動的作業數量少於可用核心的數量。以類似的方式,您無法真正預測任務將在哪個 CPU 上運行,但如果合適,調度程序很可能在選擇核心後將其保留在同一核心上。

相關內容