Gentoo

為什麼人們在擁有雙核 CPU 時推薦 make 的 -j3 選項?

  • October 14, 2012

在 Gentoo Linux 中,可以設置MAKEOPTS變數 in/etc/portage/make.conf來告訴make在建構包時它應該並行執行多少個作業。由於我有一個雙核 CPU,我天真地選擇了使用-j2選項:每個核心一個工作,所以兩者都有事可做。“問題”是有很多參考資料告訴擁有雙核 CPU 的使用者來設置-j3選項。他們之中有一些是:

例如,Gentoo 手冊說:

一個不錯的選擇是系統中的 CPU(或 CPU 核心)數量加一,但該指南並不總是完美的。

但是“CPUs + 1”規則的基本原理是什麼?為什麼要加班?

make.conf(5) 手冊頁甚至說:

建議設置在 CPUs+1 和 2*CPUs+1 之間。

make我還閱讀了該選項的資訊頁面和make手冊頁說明中的第 5.4 節(並行執行)-j,但那裡似乎沒有答案。

沒有一個簡單的規則總是有效的。人們可能會推荐一個特定的人物,因為他們在特定的機器上嘗試了特定的編譯,這是最好的設置,或者因為他們遵循了一些可能與現實有關係也可能沒有關係的推理。

如果您有幸擁有大量 RAM,那麼長時間編譯的限制因素將是 CPU 時間。然後每個 CPU 一個任務,加上那些偶爾的 I/O 塊的一個待處理任務,是一個很好的設置。這使得它-j3適用於雙核 CPU(或更準確地說,適用於雙 CPU 機器——如果每個核心都是超執行緒的,那將是 4 個 CPU,所以-j5)。

如果您的 RAM 非常少,那麼一個限制因素可能是您不能有很多並發作業,否則它們會不斷地互相交換。例如,如果您不能在記憶體中輕鬆地容納兩個編譯器實例,make -j2則可能已經比make. 由於這取決於您一次可以在 RAM 中容納多少編譯器程序,因此無法得出一般數字。

在這兩者之間,擁有更多的工作可能是有益的。如果每個編譯器程序都很小,但整個建構涉及大量數據,那麼磁碟 I/O 可能是阻塞因素。在這種情況下,您需要同時為每個 CPU 執行多個作業,以便每個 CPU 始終有一個作業在使用,而其他作業則在等待 I/O。同樣,這在很大程度上取決於建構作業和可用 RAM,這裡取決於可用於數據記憶體的內容(有一個最佳值,之後有太多作業會過多地污染記憶體)。

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