“第一次接觸”(在 NUMA 系統中用于表示虛擬記憶體映射的特殊術語)寫操作導致記憶體頁面映射到與第一次寫入它們的執行緒關聯的 NUMA 節點。閱讀了這個對于新手來說相當難以理解的頁面,根據我的理解,這是使用默認記憶體映射策略時的情況。根據可能使用的不同策略,我們可以期望這不再是真的。請隨時糾正我對此事的理解。
我現在的問題是:如果我的調度策略(想想#pragma omp for schedule(static, chunk_size))需要來自兩個不同 NUMA 節點的兩個執行緒來處理來自同一記憶體頁面的資料,那么第一次觸摸寫入操作是否會按照默認映射將記憶體頁面加載到兩個節點Linux 政策?
uj5u.com熱心網友回復:
您鏈接的檔案頁面說默認策略是“本地分配”,這意味著第一個接觸記憶體的任務將導致頁面被分配在任務運行的 CPU 本地的 NUMA 節點上。
當系統“啟動并運行”時,系統默認策略將使用下面描述的“本地分配”。
[...]
“本地”分配策略可以看作是從包含發生分配的 cpu 的節點開始的首選策略。
為一個頁面分配一次。例如,假設一個映射頁面由兩個執行緒 T0(在 NUMA 節點 0 上)和 T1(在 NUMA 節點 1 上)共享,默認策略是在第一次觸摸時,頁面將分配在節點 0 上。當另一個執行緒觸摸該頁面時分配后,它不會移動到不同的節點或在另一個執行緒的節點中再次重新分配。
會發生什么:
- 頁面被映射
- T0 寫入(第一次觸摸,這會導致頁面錯誤)
- 頁面在節點 0 上分配
- T1 寫入
- 沒有分配發生,只是非本地訪問
作為參考,Christoph Lameter 的這篇文章還對 Linux 下的 NUMA 惡作劇進行了詳盡的解釋
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/450270.html
上一篇:Python調度執行緒
