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 .
¿Consideró actualizar su kernel a algo más reciente? –
RHEL 5.1 (2007-11-07) es bastante viejo, tal vez es hora de actualizar. –
@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