首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确认NUMA?

如何确认NUMA?
EN

Stack Overflow用户
提问于 2012-04-12 00:10:31
回答 2查看 7.8K关注 0票数 8

如何确认主机支持NUMA?Oracle doc说NUMA意识始于内核2.6.19,但NUMA man page说它是从2.6.14引入的。我希望确保以-XX:+UseNUMA启动的Java进程确实在利用某些东西。

检查numa_maps,我发现我有它们:

代码语言:javascript
复制
# find /proc -name numa_maps
/proc/1/task/1/numa_maps
/proc/1/numa_maps
/proc/2/task/2/numa_maps
/proc/2/numa_maps
/proc/3/task/3/numa_maps

虽然我的内核落后于Oracle所说的:

代码语言:javascript
复制
# uname -sr
Linux 2.6.18-92.el5

我目前在RHEL5.1上使用64位jdk1.6.0_29。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-12 00:31:18

这些/proc文件的存在表明您的linux内核是numa感知的。不要过多地比较版本号,因为,特别是对于Oracle / RHEL内核,供应商移植/向后移植了许多功能,而不会使版本字符串保持“最新”。

测试同一事物的其他方法:

代码语言:javascript
复制
$ grep NUMA=y /boot/config-`uname -r`
CONFIG_NUMA=y
CONFIG_K8_NUMA=y
CONFIG_X86_64_ACPI_NUMA=y
CONFIG_ACPI_NUMA=y

$ numactl --hardware
available: 2 nodes (0-1)
node 0 size: 18156 MB
node 0 free: 9053 MB
node 1 size: 18180 MB
node 1 free: 6853 MB
node distances:
node   0   1
  0:  10  20
  1:  20  10
票数 8
EN

Stack Overflow用户

发布于 2015-01-22 05:26:48

Oracle文档还指出:

注意: Linux内核中有一个已知的bug,它可能导致在使用-XX:UseNUMA进行测试时JVM崩溃。该错误已在2012年修复,因此这不会影响最新版本的Linux内核。要查看您的内核是否有此错误,可以运行。

我在这里复制了它,以演示它的简单性:

http://docs.oracle.com/javase/7/docs/technotes/guides/vm/reproducer.c

要构建复制器,您可能需要安装numactlnumactl-devel包,具体取决于您的发行版。详情请参见man numa_maps

代码语言:javascript
复制
#include <numaif.h>
#include <numa.h>
#include <stddef.h>
#include <sys/mman.h>
#include <stdint.h>

int main(void) {
   if (numa_all_nodes_ptr == (void*)0) {
     return -1;
   }

   size_t pagesize = getpagesize();

   void* mapped_memory = mmap(NULL, 3 * pagesize, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
   if (mapped_memory == MAP_FAILED) {
     return -2;
   }

   void* page0 = mapped_memory;
   void* page1 = (void*)((uintptr_t)page0 + pagesize);
   void* page2 = (void*)((uintptr_t)page1 + pagesize); 

 // Set up the last page as interleaved.
   mbind(page2, pagesize, MPOL_INTERLEAVE, numa_all_nodes_ptr->maskp,
numa_all_nodes_ptr->size, 0);

   // Setup the last two pages as interleaved.
   mbind(page1, 2 * pagesize, MPOL_INTERLEAVE,
numa_all_nodes_ptr->maskp, numa_all_nodes_ptr->size, 0);

   *((char*)page2) = 2;
   *((char*)page1) = 1;
   *((char*)page0) = 0; // Crash here, when mbind_merge was broken.

   return 0;
}

因此,我认为2.6.19是第一个安全版本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10109783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档