2012-04-11 31 views
6

如何確認主機是否支持NUMA? Oracle doc表示,NUMA感知從2.6.19開始,但NUMA man page說它是在2.6.14中引入的。我想確保以-XX:+UseNUMA開始的Java進程實際上正在利用某些東西。如何確認NUMA?

檢查的numa_maps,我知道我讓他們:

# 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 

雖然我的內核是什麼背後甲骨文指出:

# uname -sr 
Linux 2.6.18-92.el5 

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

+0

您是否考慮將內核升級到更新的內核? – 2012-04-11 16:17:35

+0

RHEL 5.1(2007-11-07)已經很老了,可能是它的升級時間。 – 2012-04-11 16:23:58

+0

@Peter根據我的經驗,使用NUMA處理器的人通常不是負責更新軟件的人,必須經歷相當多的官僚主義才能更新它。剛剛看到一個* python 2.4 *安裝在一臺超級計算機上有2k內核.. – Voo 2012-04-11 16:34:46

回答

8

這些/ proc文件的存在表明你的linux內核是numa-aware的。不要過多關注版本號的比較,特別是在Oracle/RHEL內核中,供應商端口/回送許多功能,而不會將版本字符串保持爲「最新」。

$ 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 
+0

rhel的支持也是我的想法。使用/ boot/config良好的調用 – 2012-04-11 17:28:40

+2

但這是否意味着JVM使用它?是否有任何記錄表明numa正在使用? – easytiger 2013-06-05 10:52:24

1

Oracle的文檔還指出:

測試同樣的事情的其他方式

注:有在Linux內核中的已知漏洞,可能導致JVM是時崩潰t與-XX:UseNUMA。該錯誤在2012年得到修復,因此這不應該影響最新版本的Linux內核。要查看你的內核是否有這個bug,你可以運行native reproducer

這是我在這裏轉載證明它的簡單:

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

要構建再生器中,您可能需要安裝numactl的numactl的-devel的包根據您的分佈。詳情請參閱man numa_maps

#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是第安全版本。

+0

你如何編譯這個? numa標題在哪裏? – sloven 2015-02-05 18:27:40

+0

@Nik您可能需要根據man numa_maps'Library support'安裝numactl或numactl-devel, – 2015-02-06 22:42:01