2012-04-11 12 views
6

मैं कैसे पुष्टि कर सकता हूं कि एक होस्ट NUMA-aware है? Oracle doc कहता है कि NUMA- जागरूकता कर्नेल 2.6.1 9 पर शुरू होती है, लेकिन NUMA man page कहती है कि इसे 2.6.14 के साथ पेश किया गया था। मैं यह सुनिश्चित करना चाहता हूं कि -XX:+UseNUMA के साथ शुरू की गई जावा प्रक्रिया वास्तव में कुछ का लाभ उठा रही है।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

क्या आपने अपने कर्नेल को हाल ही में कुछ और अपग्रेड करने पर विचार किया था? –

+0

आरएचईएल 5.1 (2007-11-07) बहुत पुराना है, शायद इसे अपग्रेड करने का समय है। –

+0

@ पीटर मेरे अनुभव में NUMA प्रोसेसर के साथ काम करने वाले लोग आमतौर पर सॉफ़्टवेयर को अपडेट करने के प्रभारी नहीं होते हैं और इसे अद्यतन करने के लिए बहुत सारी नौकरशाही से गुज़रना पड़ता है। 2k कोर के साथ एक सुपरकंप्यूटर पर पिछले सप्ताह एक * पायथन 2.4 * इंस्टॉल किया गया .. – Voo

उत्तर

8

उन/proc फ़ाइलों की उपस्थिति इंगित करती है कि आपका लिनक्स कर्नेल संख्या-जागरूक है। अपने आप को संस्करण संख्याओं की तुलना में बहुत अधिक चिंता न करें, विशेष रूप से ओरेकल/आरएचईएल कर्नेल के साथ, विक्रेता पोर्ट/बैकपोर्ट कई संस्करणों को संस्करण स्ट्रिंग को "अद्यतित" रखने के बिना।

$ 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

रेल का बैकपोर्टिंग मेरे दिमाग में भी था। अच्छी कॉल/boot/config –

+2

के साथ अच्छा कॉल है, लेकिन क्या इसका अर्थ यह है कि JVM इसका उपयोग करता है? क्या अंक का उपयोग करने के लिए कोई लॉगिंग है? – easytiger

1

ओरेकल दस्तावेज़ भी कहा गया है:

एक ही बात का परीक्षण करने के अन्य तरीके

नोट: वहाँ यह है कि जब जा रहा है JVM दुर्घटना का कारण हो सकता लिनक्स कर्नेल में एक ज्ञात बग था टी के साथ -XX :NUMA का उपयोग करें। बग 2012 में तय किया गया था, इसलिए यह लिनक्स कर्नेल के नवीनतम संस्करणों को प्रभावित नहीं करेगा। यह देखने के लिए कि क्या आपके कर्नेल में यह बग है, आप native reproducer चला सकते हैं।

कौन सा मैं यहाँ reproduced है अपनी सादगी प्रदर्शित करने के लिए:

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

आप इसे कैसे संकलित करते हैं? नोमा हेडर कहां हैं? – sloven

+0

@Nik आपको num numl_maps 'लाइब्रेरी सपोर्ट' के अनुसार numactl या numactl-devel इंस्टॉल करने की आवश्यकता हो सकती है –

संबंधित मुद्दे