NUMA系統我有一個提供不同的裝置根據不同的策略來分配內存中的幾個自定義的分配。其中一個在定義的NUMA節點上分配內存。到分配器的接口是直截了當realloc()的使用HWLOC
template<typename config>
class NumaNodeStrategy
{
public:
static void *allocate(const size_t sz){}
static void *reallocate(void *old, size_t sz, size_t old_sz){}
static void deallocate(void *p, size_t sz){}
};
分配本身是使用hwloc_alloc_membind_nodeset()
方法有用於分配策略等Howver,hwloc僅提供分配和free'ing存儲器和I的方法設置的參數,根據處理想知道我應該如何實施reallocate()
。
兩個可能的解決方案:
- 分配新的內存區域和
memcpy()
數據 - 使用
hwloc_set_membind_nodeset()
設置內存分配/結合政策的節點集,並使用純malloc()
/posix_memalign()
和realloc()
。
誰能幫助我得到這個吧?
更新:
我努力使這個問題更具體:是否有執行可能性realloc()
使用hwloc
不分配新的內存,並四處移動網頁?
直接使用libnuma怎麼樣? http://linux.die.net/man/3/numa – osgx
因爲'libnuma'可能會產生錯誤的結果(顯示numa節點等錯誤的cpu綁定),我希望使用'hwloc'代替。 https://gist.github.com/1125022 – grundprinzip
嗯..是內存綁定設置節點特定的?那麼,如果節點5調用內存中的realloc(由節點5擁有),libc的realloc會執行同節點內存分配嗎? – osgx