Linux

使用 make -jnproc 導致頁面錯誤數量激增

  • January 17, 2022

我正在執行一個基準來確定我應該允許 GNU Make 使用的作業數量,以便獲得最佳編譯時間。為此,我使用 N 編譯 Glibc,make -j<N>其中 N 是 1 到 17 的整數。到目前為止,我每次選擇 N 都做了 35 次(總共 35*17=595 次)。我還使用GNU Time執行它來確定 Make 花費的時間和使用的資源。

當我分析結果數據時,我注意到一些奇怪的東西。當我達到-j8.

主要頁面錯誤的平均數

我還應該注意,8 是我電腦上的 CPU 核心數(或者更具體的超執行緒數)。

在自願上下文切換的數量上,我也可以注意到同樣的事情,但不那麼明顯。

自願上下文切換的平均次數

為了確保我的數據沒有偏差或其他任何問題,我又執行了兩次測試,但仍然得到相同的結果。

我正在使用 linux 核心 5.15.12 執行 artix linux。

這些尖峰背後的原因是什麼?

編輯:我在 4 核 PC 上再次做了同樣的實驗。我可以觀察到同樣的現象,這次是 4 個工作崗位。

4 核 CPU 上的平均主要頁面錯誤數

此外,請注意 2 個作業標記中主要頁面錯誤的跳躍。

4 核 CPU 上的平均自願上下文切換次數

編輯2:

@FrédéricLoyer 建議將頁面錯誤與效率(經過時間的倒數)進行比較。這是一個確切的箱線圖:

以 1/秒為單位的反向經過實時(掛鐘)的箱線圖

我們可以看到,隨著我們從 1 個工作變為 4 個工作,效率越來越高。但對於更多的工作,它基本保持不變。

我還應該提到我的系統有足夠的記憶體,所以即使有最大數量的作業,我也不會用完記憶體。我還記錄了 PRSS(峰值駐留集大小),這是它的箱線圖。

以 KB 為單位的峰值駐留集大小的箱線圖

我們可以看到作業的數量根本不會影響記憶體使用。

EDIT3:正如 MC68020 所建議的,這里分別是 4 核和 8 核系統的 TLBS(事務備份緩衝區擊穿)值圖:

事務備份緩衝區擊落 - 4 核

事務備份緩衝區擊落 - 8 個核心

因為您顯示全域效率的圖表為您的任務提供了正確的答案,所以我將嘗試專注於解釋。

A/效率\工作安排

理論上,(假設在 make 啟動時所有 CPU 都處於空閒狀態,並且在啟動第 n 個 > i 時沒有其他任務正在執行,並且沒有 i 作業已經完成),我們可能期望 CFS 分配 1、2、3、4、5, 6,7,8 個作業到 CPU 0,2,4,6(因為記憶體共享沒有好處)然後 1,3,5,7(記憶體共享仍然沒有好處但是因為記憶體在兄弟姐妹之間共享,增加鎖爭論因此對全球效率產生負面影響)這是否足以解釋從工作 5 開始全球效率缺乏改進?

B/頁面錯誤

正如 Frédéric Loyer 所解釋的,在作業啟動時預計會出現重大頁面錯誤(由於必要的讀取系統呼叫)。您的圖表顯示,從 5 個職位增加到 8 個職位幾乎是恆定的。在我看來,4+4 核心上 -j4 的顯著增加(由 2+2 核心上的 -j2 顯著增加證實)看起來更有趣。這可能是由於任何其他任務引起的某些 <=4 cpu 的突然活動而在 > 4 cpu 上重新安排一個作業執行緒的見證嗎?-j(n>8) 的恆定頁面錯誤數量可以通過所有可以選擇的 cpu 已經具有適當映射的事實來解釋。


順便說一句:只是為了證明我對雜項的要求。OPs 評論中的緩解資訊,我想首先確保您的所有核心都可以完全執行。他們似乎是。

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