在 x86_64/Linux 上透過 tmpfs 和 NUMA 使用共享內存

在 x86_64/Linux 上透過 tmpfs 和 NUMA 使用共享內存

我想做的是:將一個檔案放在 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 綁定在一起文件相反,讓我的生活更輕鬆。

有人對如何解決這個問題有任何想法嗎?

相關內容