Articles of numa

如何解释numademo输出

numademo实用程序(是numactl包的一部分)随许多stream行的Linux发行版(RHEL,SLES,…)一起发行。 我试图找出任何有关这个工具的文档,但我无法find任何有用的信息。 要么没有人使用它,要么所有使用它的人都知道。 这是一个示例输出 2个节点可用 memory with no policy memcpy Avg 10415.77 MB/s Max 10427.37 MB/s Min 10377.83 MB/s local memory memcpy Avg 9499.52 MB/s Max 10423.22 MB/s Min 7239.55 MB/s memory interleaved on all nodes memcpy Avg 7355.64 MB/s Max 7657.19 MB/s Min 6284.92 MB/s memory on node 0 memcpy Avg 5837.94 MB/s Max […]

适用于Linux的支持NUMA的命名共享内存

Windows API提供了CreateFileMappingNuma函数( http://msdn.microsoft.com/en-us/library/windows/desktop/aa366539(v=vs.85).aspx )在特定的NUMA上创build一个命名的共享内存空间节点。 到目前为止,我还没有find一个相当于Linux的function。 我目前的做法是这样的: 分配命名共享内存(使用shm_open(…)) 确定当前的NUMA节点(使用numa_move_pages(…)) 将页面移动到目标节点(再次使用numa_move_pages(…) 有谁知道更好的方法? 编辑:为了logging:我build议的实现确实按预期工作!

保留多个NUMA节点中的内存块

这个问题讨论了如何强制Linux内核从内存中排除一些内存(因此内核可见)。 用memmap=nn[KMG]$ss[KMG]你可以排除1块内存。 是否有可能多次提供此内核引导参数,以便从各个NUMA节点中排除物理内存的多个部分。 你试过了吗? 有什么build议么 ?

Java进程报告“不正确”的可用处理器数量

我在一个8节点的NUMA机器上运行一个Java 1.6进程,使用: numactl –cpunodebind=0 java -server com.foo.Bar 每个节点有8个CPU,由numactl –hardware报告: available: 8 nodes (0-7) node 0 cpus: 1 2 3 4 5 6 7 8 node 0 size: … node 0 free: … node 1 cpus: 9 10 11 12 13 14 15 16 node 1 size: … node 1 free: … … node 7 cpus: […]

multithreading会降低NUMA上的套接字吞吐量

我使用Red Had Linux在16核心NUMA机器上testing了一个Java程序。 我测量了一个Java DatagramSocket(对于UDP)的吞吐量,就每秒能接收和发送多less个数据包(64字节大小)而言。 程序由一个socket和n个线程组成,这些线程正在socket上侦听。 当一个数据包到达时,他们会将有效载荷复制到一个byte []数组中,然后用该数组创build一个新的DatagramPacket,然后直接将其发送回来。 把它看作是UDP层上的一个ping。 我发现使用多个线程(即两个或四个)时,Java DatagramSocket套接字的吞吐量将显着降低。 如果我只使用一个线程来侦听套接字,则每秒吞吐量为122,000个,而多个线程每秒只能达到65,000个数据包。 现在,我知道一个线程可能会在NUMA机器的任何核心上执行,并且如果内存必须从一个节点移动到另一个节点,那么内存访问将变得非常昂贵。 但是,如果我有两个线程,只有一个线程应该在“错误”的核心上执行,而另一个线程仍然应该达到很高的吞吐量。 另一个可能的解释是Datagramsocket中的同步问题,但这只是猜测。 有什么真正的解释是有人有一个很好的洞察力? 我发现在多个端口上多次(并行)执行这个程序可以达到更高的吞吐量。 我用一个线程启动程序四次,每个程序在一个单独的端口上使用一个套接字(5683,5684,5685和5686)。 四个程序的总吞吐量是每秒370,000个数据包。 总之,在同一端口上使用多个线程会降低吞吐量,而使用多个端口和一个线程会增加吞吐量。 这是如何解释的? 系统规格: 硬件:2个AMD Opteron(TM)处理器6212处理器上的16个核心组织在4个节点中,每个32 GB RAM。 频率:1.4 Ghz,2048 KBcaching。 node distances: node 0 1 2 3 0: 10 16 16 16 1: 16 10 16 16 2: 16 16 10 16 3: 16 16 16 […]

在Linux(CentOS)/多处理器设置中,如何将CPU内核分配给NUMA节点?

我正在安装一个装有CentOS的四核Operton 6272系统。 我怀疑NUMAconfiguration有问题。 当我运行numactl –hardware我得到: available: 5 nodes (0,2-4,6) node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 node 0 size: 32765 MB node 0 free: 31145 MB node 2 cpus: 16 17 18 19 20 21 22 23 node 2 size: 16384 MB node […]

在驻留在不同套接字上的处理器之间共享数据的最快方法

我有一个双插槽8核心处理器,也就是说,每个处理器都有4个核心。 我没有完全看过它的规格,但是我认为一个单独的存储体是以ccNUMA方式连接到每个处理器的,因此从另一个处理器的存储体访问相对较慢。 他们也有不同的L3caching我想。 现在我的问题是在两个处理器之间共享数据的最快方式是什么。 由于ccNUMA和caching一致性,简单的共享内存将会有问题。 有什么方法是非常快的?

为什么使用numa_alloc_onnode()分配导致“页面不存在”?

当我使用numa_alloc_onnode()像这样在特定的NUMA节点上分配内存时: char *ptr; if ((ptr = (char *) numa_alloc_onnode(1024,1)) == NULL) { fprintf(stderr,"Problem in %s line %d allocating memory\n",__FILE__,__LINE__); return(1); } 然后使用move_pages()来尝试确认分配的内存确实在节点1上: printf("ptr is on node %d\n",get_node(ptr)); 哪里 // This function returns the NUMA node that a pointer address resides on. int get_node(void *p) { int status[1]; void *pa; unsigned long a; // round p […]

什么是最好的分析器NUMA(非统一内存访问)在Linux上?

Kernrate在Windows上很棒,但我需要一个用于linux的分析器。

NUMA内存页面迁移开销

我不得不在Linux下find与NUMA内存页面迁移相关的开销。 你能告诉我哪些工具可以使用吗? 如果可能的话,你可以举个例子。