Cpu

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

  • October 27, 2016

我剛才正在閱讀這個連結,它讓我思考。

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

我在概念上對多執行緒任務感到滿意,但我天真地假設在我的 nohup 呼叫中為每個程序設置後台(每個程序是一個單獨的模擬,然後執行數週),足以將每個子程序放置到一個核心/執行緒上它自己的,然後只是繼續完成,而不需要求助於 GNU Parallels 或其他東西。

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

有人(我認為在某處的 SO 頁面上)告訴我這可能最終導致“CPU 抖動”。

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

  • 首先,我認為 nohup 和/或後台足以將程序固定在特定核心上是錯誤的嗎?(並且可以在終端中顯示在特定核心上執行的程序嗎?Top 只告訴您哪些核心很忙,而不是據我所知它們正在執行什麼任務?)
  • 其次,即使有 2 個備用 CPU 可用於處理系統其他任務,CPU 也會發生抖動嗎?
  • 最後,如果我沒記錯的話,一個給定的程序是否被固定到一個特定的 CPU,並且只有那個 CPU,或者它們會根據呼叫順序/時間等線上程之間跳轉,即如果我循環文件,第一個一個被固定到 CPU 0,然後是 1、2 等等直到完成?

nohup沒有設置任何東西來保持特定核心上的程序。你通常會使用tasksetwithnohup來做到這一點。top可以顯示一個程序最後安排在哪個核心上,它是P列。

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

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

Nohup 執行命令就像它們沒有執行一樣,唯一的區別是它們從 pid 列表中刪除以在退出時發送信號。(disown 適用於未使用 nohup 啟動的程序)。

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

只有在沒有 nohup 的情況下發生 CPU 抖動…

最後,如果我沒記錯的話,一個給定的程序是否被固定到一個特定的 CPU,並且只有那個 CPU,或者他們會根據呼叫順序/時間等線上程之間跳轉。即如果我循環文件,第一個一個被固定到 CPU 0,然後是 1、2 等等直到完成?

和沒有 nohup 一樣…

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

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

taskset -c -p 0 1234

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