Estoy tratando de seguir las instrucciones de documentación de MongoDB para configurar LTH correctamente para una máquina ejecutando MongoDB.
Una de las instrucciones consiste en crear un script que se ejecuta en el arranque. Desafortunadamente, ni el script sugerido, ni el código similar reescrito como un systemd service funciona.
Al depurar el problema, encontré otro. Cuando ejecuto:
root@demo:/# echo never > /sys/kernel/mm/transparent_hugepage/enabled
el comando parece ejecutarse correctamente, pero el archivo permanece sin cambios, así que si luego ejecuto:
root@demo:/# cat /sys/kernel/mm/transparent_hugepage/enabled
devuelve el contenido original:
always madvise [never]
Intenté modificar el archivo con vim
; al intentar guardar el archivo, se queja de que Fsync falló . Si bien este error ha sido documentado , en mi caso, hay suficiente espacio en disco en /
(20% usado , 7 GB disponibles.)
Ejecuto el comando en sudo
modo, y los permisos de archivo parecen correctos:
-rw-r--r-- 1 root root 4096 ...
El /sys
el directorio tampoco está montado en modo de solo lectura , como se muestra en:
root@demo:/# grep sysfs /proc/mounts sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
¿Qué está pasando aquí?
Responder
sysfs
, el sistema de archivos normalmente montado en /sys
, es un sistema de archivos virtual especial para interactuar con el kernel de Linux.
Los archivos que contiene no» En archivos reales, representan estructuras de datos en el kernel y solo admiten métodos de acceso bastante simples. La lectura de un archivo de este tipo solicita información al núcleo. Escribir en un archivo de este tipo le indica al kernel que cambie una configuración o realice una acción.
Por eso vim
falla. Intenta acceder a los archivos virtuales en formas optimizadas para archivos reales y esto no es compatible con sysfs
.
Su primer comando
root@demo:/# echo never > /sys/kernel/mm/transparent_hugepage/enabled
¡ya fue exitoso!
Muchos «archivos» sysfs, incluido /sys/kernel/mm/transparent_hugepage/enabled
, no solo imprimen la configuración actual cuando se leen, sino que imprimen todo lo posible modos y use corchetes para describir cuál de los múltiples modos está activo en su lugar.
En su caso, never
está entre paréntesis, por lo que el modo que intentó activar con echo
ya está activo:
always madvise [never]
Si está interesado en cómo sysfs
funciona, puedes leer más sobre él en Wikipedia o en la documentación del kernel de Linux .