NUMA线程内存管理

时间:2014-12-24 11:41:51

标签: multithreading memory heap-memory numa

我的服务器有80个逻辑核心(型号:DL580 G7)。我每个核心运行一个线程。

每个线程使用malloc从堆执行INTEL MKL FFT,卷积和许多分配和解除分配。

我之前有16个逻辑核心的服务器,没有问题。每个线程在其核心上工作,CPU使用率为100%。

当我将我的应用程序从16核服务器移动到具有NUMA架构的80核服务器时,在创建第一个线程之后,该线程工作在100%(内核时间0%)并且添加了每个线程,性能为其他线程减少,直到CPU使用率降级到40%(内核时间为39%)。

因为内核时间增加了,我认为这个事件的原因是堆顺序机制和堆锁。由于对内存分配的需求不断增加,每个请求都增加了等待时间。或者,对其他NUMA节点内存的远程内存访问可能会降低性能。

我在每个线程上使用createheap()来消除等待解锁堆内存的问题,但是heapalloc可以分配最多512KB的内存,这对我来说是不够的。

我使用virtuallalloc,但它导致线程性能下降。

我该怎么做才能解决这个问题?

0 个答案:

没有答案