我想做的是:將一個檔案放在 tmpfs 上,但確保所有檔案(它的所有頁面)最終都位於同一個 NUMA 節點上。首先,我認為這很簡單:我只需mmap()
一個 tmpfs 文件MAP_SHARED
,然後用mbind()
它將其綁定到我想要的節點,然後我只需複製。然而,mbind() 的手冊頁明確排除了這種方法:
NUMA policy is not supported on a memory-mapped file range
that was mapped with the MAP_SHARED flag.
天啊!手冊mbind()
頁說,對於共享映射,我只能依賴進程內存策略(使用set_mempolicy()
)。但這遠非理想:我正在運行一個大量的多線程應用程序,我不想關心哪個線程正在執行複製。我寧願記憶體策略與 tmpfs 綁定在一起文件相反,讓我的生活更輕鬆。
有人對如何解決這個問題有任何想法嗎?