2012-04-11 5 views
6

¿Cómo puedo confirmar que un host es compatible con NUMA? El Oracle doc dice que NUMA-awareness comienza en kernel 2.6.19, pero el NUMA man page dice que fue introducido con 2.6.14. Me gustaría asegurarme de que un proceso de Java que se inició con -XX:+UseNUMA está aprovechando algo.¿Cómo confirmar NUMA?

Comprobación de los numa_maps, veo que las tengo:

# 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 

Aunque mi kernel está detrás de lo que Oracle afirma:

# uname -sr 
Linux 2.6.18-92.el5 

actualmente estoy usando jdk1.6.0 de 64 bits _29 en RHEL5.1.

+0

¿Consideró actualizar su kernel a algo más reciente? –

+0

RHEL 5.1 (2007-11-07) es bastante viejo, tal vez es hora de actualizar. –

+0

@Peter En mi experiencia, las personas que trabajan con procesadores NUMA generalmente no son los encargados de actualizar el software y deben pasar por una gran cantidad de burocracia para actualizarlo. Acabo de ver un * python 2.4 * instalar la semana pasada en una supercomputadora con 2k núcleos .. – Voo

Respuesta

8

La presencia de esos/proc archivos indica que su núcleo de Linux es numa-aware. No se preocupe demasiado por la comparación de los números de versión, ya que, en particular con los kernels de Oracle/RHEL, los proveedores portan/respaldan muchas características sin mantener la cadena de versión "actualizada".

Otras formas de probar lo mismo:

$ 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

El respaldo de rhel también estaba en mi mente. una buena llamada con/boot/config –

+2

, pero ¿eso implica que la JVM lo usa? ¿hay algún registro para indicar que Numa está en uso? – easytiger

1

El doc Oracle también afirma:

Nota: Hubo un error conocido en el kernel de Linux que puede hacer que el bloqueo de JVM al estar t con -XX: UseNUMA. El error se corrigió en 2012, por lo que esto no debería afectar las últimas versiones del Kernel de Linux. Para ver si su Kernel tiene este error, puede ejecutar el native reproducer.

Qué he reproducido aquí para demostrar su simplicidad:

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

Para construir el reproductor, puede que tenga que instalar el numactl o numactl-devel paquetes dependiendo de su distribución. Vea man numa_maps para más detalles.

#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; 
} 

Entonces, tomé la ambigüedad en el sentido de que 2.6.19 fue la primera versión segura .

+0

¿cómo compilas esto? ¿dónde están los encabezados numa? – sloven

+0

@Nik Puede necesitar instalar numactl o numactl-devel según man numa_maps 'Soporte de biblioteca' –

Cuestiones relacionadas