我正在爲linux構建一個用戶模式的NUMA感知內存分配器。分配器在其初始化期間抓取大塊內存,每個NUMA節點一塊。之後,通過從大塊池中提供儘可能多的內存頁面來滿足用戶請求的內存頁面。如何在用戶模式的NUMA感知內存分配器中實現交織頁面分配?
如果用戶要求n個頁面,很容易給從特定塊n頁。但是現在我想實現一個交織分配策略,用戶從每個塊中獲取一個頁面,循環多達n個頁面。這帶來了這些頁面的虛擬地址不再連續的問題。
Q1:是否有辦法返回虛擬可尋址的連續內存?我能想到的唯一解決方案是使用知道如何從一個頁面跳轉到另一個頁面的「智能」指針。
一個我走這條路的原因是,我不是很滿意的linux MPOL_INTERLEAVE內存分配策略,其循環政策不嚴格(確定性)。
Q2:有沒有知道哪個頁面和NUMA節點給定的虛擬地址範圍映射到的一種廉價的方式?更確切地說,我不知道如何通過讀取/ proc/< proc_id>/numa_maps來獲取細粒度的頁面級信息。
謝謝你的回答。