Aplicación C++. ¿Con mmap mata el kernel? (pánico del kernel con mmap)

Aplicación C++. ¿Con mmap mata el kernel? (pánico del kernel con mmap)

En mi programa C++ donde se produce un uso intensivo de disco, E/S de red e incluso cálculo de CPU, estoy usando la región asignada de memoria como una matriz.

Con datos muy pequeños, funciona bien. Sin embargo, cuando ejecuté el programa con datos muy grandes, mi aplicación falla. (Entiendo absolutamente que el tamaño de la región mmap no debería ser una preocupación porque el sistema operativo se encargará de todas las E/S y el almacenamiento en búfer)

No quiero culpar a Linux por ello, pero me gustaría saber si hay algún caso en el que 'mmap' se vuelva inestable y pueda provocar que el sistema operativo falle.

Cuando el sistema operativo falla, en la pantalla puedo ver el mensaje de pánico del kernel relacionado con algún bla, bla, 'write_back'... (agregaré el mensaje aquí tan pronto como reproduzca el problema)

// El programa utiliza operaciones de red MPI en una región asignada de memoria (Intel MPI con RDMA de Infiniband habilitado) donde RDMA posiblemente omite el kernel del sistema operativo y escribe directamente algunos datos en la memoria.

Investigué la pila de llamadas y encontré algunos códigos del kernel: (http://lxr.free-electrons.com/source/fs/ext4/inode.c#L2313)

Supongo que los errores provienen de la trampa 'BUG_ON' en #L2386 BUG_ON(PageWriteback(page)); La versión del kernel es 3.19.0 (https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.19.tar.xz)

ingrese la descripción de la imagen aquí

Respuesta1

No puedescausammapincluido un pánico en el kernel por el uso inadecuado de cualquier llamada al sistema . La interfaz syscall no proporciona a la persona que llama los medios para corromper las estructuras de datos del kernel.

Buscaría un problema de hardware y prestaría especial atención a cualquier pista en los registros del sistema, por ejemplo /var/log/kernel.log. Como experimento, intentaría mapear un archivo del mismo tamaño en un sistema de archivos diferente, porque el disco es el componente con mayor probabilidad de fallar.

Esposiblele has hecho cosquillas a un error del kernel. Una búsqueda rápida derespóndemeypánicoaparece [este viejo error].1 Si está ejecutando un kernel muy antiguo, entonces probablemente sea hora de actualizarlo.

Respuesta2

Según la descripción en comentarios, se trata de una falla del kernel (pánico). Definitivamente deberíanuncasuceder.

¿Qué distribución es esta? ¿Qué versión del kernel? ¿Arquitectura?

Primero actualiza todo. Si su distribución está al final de su vida útil, actualice. Vuelva a intentarlo.

Si persiste, debería poder hacer que esto sea reproducible con un pequeño programa en C, que haga lo mismo mmap()que su programa en C++, y repetir en esa memoria un baile similar al de C++ (quizás simplemente intentando acceder "a lo más profundo de él"). " es suficiente). Reúna todo e infórmelo a través del canal de informes de errores de su distribución.

información relacionada