Barreras de memoria y el TLB


Las barreras de memoria garantizan que la caché de datos será consistente. Sin embargo, ¿garantiza que el TLB será consistente?

Estoy viendo un problema donde la JVM (java 7 update 1) a veces se bloquea con errores de memoria (SIGBUS, SIGSEG) al pasar un MappedByteBuffer entre hilos.

Por ejemplo

final AtomicReference<MappedByteBuffer> mbbQueue = new AtomicReference<>();

// in a background thread.
MappedByteBuffer map = raf.map(MapMode.READ_WRITE, offset, allocationSize);
Thread.yield();
while (!inQueue.compareAndSet(null, map));


// the main thread. (more than 10x faster than using map() in the same thread)
MappedByteBuffer mbb = inQueue.getAndSet(null);

Sin el Hilo.yield () Ocasionalmente recibo bloqueos en force (), put() y memcpy () de C, todo lo cual indica que estoy tratando de acceder a la memoria ilegalmente. Con el Hilo.yield () No he tenido ningún problema, pero eso no suena como una solución confiable.

¿Alguien se ha encontrado con este problema? ¿Hay alguna garantía sobre TLB y barreras de memoria?


EDITAR: El sistema operativo es Centos 5.7, he visto el comportamiento en máquinas i7 y una Doble Xeon.

¿por Qué hago esto? Porque el tiempo promedio para escribir un mensaje es de 35-100 ns dependiendo de la longitud y usar un write () no es tan rápido. Si mapeo la memoria y limpio en el hilo actual esto toma 50-130 microsegundos, usando un hilo de fondo para hacerlo, toma alrededor de 3-5 microsegundos para que el hilo principal intercambie búferes. ¿Por qué necesito intercambiar búferes? Porque estoy escribiendo muchos GB de datos y ByteBuffer no puede ser de 2 + GB de tamaño.

Author: Rob Kielty, 2011-11-30

1 answers

La asignación se realiza a través de mmap64 (FileChannel.asignar). Cuando se accede a la dirección, habrá un error de página y el núcleo leerá/escribirá allí por usted. TLB no necesita ser actualizado durante mmap.

TLB (de todas las cpu) no se valida durante munmap que se maneja mediante la finalización del MappedByteBuffer, por lo tanto munmap es costoso.

La asignación implica una gran sincronización para que el valor de la dirección no se corrompa.

Cualquier posibilidad de probar cosas de lujo a través de Inseguro?

 12
Author: bestsss,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-30 17:00:42