Últimamente he sentido curiosidad por los diversos sistemas de archivos basados en la memoria del kernel de Linux.
Note:
En lo que a mí respecta, las preguntas a continuación deben considerarse más o menos opcionales en comparación con una mejor comprensión de lo planteado en el título. Les pregunto a continuación porque creo que responderlas puede ayudarme mejor a comprender las diferencias, pero como mi comprensión es ciertamente limitada, se deduce que otros pueden saberlo mejor. Estoy preparado para aceptar cualquier respuesta que enriquezca mi comprensión de las diferencias entre los tres sistemas de archivos mencionados en el título.
En última instancia, creo que me gustaría montar un sistema de archivos utilizable con un hugepages,
poco de investigación ligera (y aún más pequeños ajustes) me ha llevado a creer que a rewritable hugepage mount
no es una opción. ¿Estoy equivocado? ¿Cuáles son las mecánicas en juego aquí?
También con respecto a hugepages:
uname -a
3.13.3-1-MANJARO \
#1 SMP PREEMPT \
x86_64 GNU/Linux
tail -n8 /proc/meminfo
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 8223772 kB
DirectMap2M: 16924672 kB
DirectMap1G: 2097152 kB
(Aquí hay versiones de texto completo de / proc / meminfo y / proc / cpuinfo )
¿Qué está pasando en lo anterior? ¿Ya estoy asignando? hugepages?
¿Hay alguna diferencia entre las DirectMap
páginas de memoria yhugepages?
Actualización Después de un pequeño empujón de @Gilles, agregué 4 líneas más arriba y parece que debe haber una diferencia, aunque nunca había oído hablar DirectMap
antes de tirar eso tail
ayer ... ¿tal vez DMI
o algo así?
Solo un poco más ...
Al no tener éxito con el hugepages
esfuerzo, y suponiendo copias de seguridad de disco duro de cualquier archivo de imagen, ¿cuáles son los riesgos de montar bucles desde tmpfs?
mi sistema de archivos es swapped
el peor de los casos? Entiendo que tmpfs
es el caché del sistema de archivos montado: ¿se puede sacar de memoria mi archivo de bucle montado? ¿Existen medidas atenuantes que pueda tomar para evitar esto?
Por último, ¿qué es exactamente de shm,
todos modos? ¿Cómo difiere o incluye hugepages
otmpfs?
fuente
/proc/meminfo
que contienenHugePage
(o su versión del kernel no tiene estas)? ¿En qué arquitectura está esto (x86_64, supongo)?Respuestas:
No hay diferencia entre tmpfs y shm. tmpfs es el nuevo nombre para shm. shm significa SHaredMemory.
Ver: Linux tmpfs .
La razón principal por la que tmpfs se usa hoy en día es este comentario en mi / etc / fstab en mi cuadro gentoo. Por cierto, Chromium no se construirá con la línea que falta:
que salió de la documentación del kernel de Linux
Citando:
Del documento transparente del núcleo de Hugepage:
Nuevo comentario después de hacer algunos cálculos:
Tamaño de página enorme: 2MB
Página enorme utilizada: Ninguna / Desactivada, como lo demuestran todos los 0, pero habilitada según los 2Mb anteriores.
DirectMap4k: 8.03Gb
DirectMap2M: 16.5Gb
DirectMap1G: 2Gb
Usando el párrafo anterior con respecto a la optimización en THS, parece que las aplicaciones que funcionan con mallocs de 4k, 16.5Gb, han solicitado aplicaciones de mallocs de 2M. Las aplicaciones que usan mallocs de 2M están imitando el soporte de HugePage al descargar las secciones de 2M en el núcleo. Este es el método preferido, porque una vez que el kernel libera el malloc, la memoria se libera al sistema, mientras que el montaje de tmpfs usando la página enorme no daría lugar a una limpieza completa hasta que el sistema se reiniciara. Por último, el más fácil, tenía 2 programas abiertos / en ejecución que solicitaban un malloc de 1Gb
Para aquellos de ustedes que leen que no conocen un malloc, hay una Estructura estándar en C que significa Asignación de memoria. Estos cálculos sirven como prueba de que la correlación del OP entre DirectMapping y THS puede ser correcta. También tenga en cuenta que montar un HUGEPAGE SOLO fs solo generaría una ganancia en incrementos de 2 MB, mientras que permitir que el sistema administre la memoria utilizando THS se produce principalmente en bloques de 4k, lo que significa que, en términos de administración de memoria, cada llamada malloc ahorra el sistema 2044k (2048 - 4 ) para algún otro proceso a utilizar.
fuente
Para abordar el problema de "DirectMap": el núcleo tiene una asignación lineal ("directa") de memoria física , separada de las asignaciones virtuales asignadas a cada proceso de usuario.
El núcleo utiliza las páginas más grandes posibles para esta asignación para reducir la presión TLB.
DirectMap1G es visible si su CPU admite páginas de 1 Gb (Barcelona en adelante; algunos entornos virtuales las deshabilitan), y si está habilitado en el kernel, el valor predeterminado está activado para 2.6.29+.
fuente
No hay diferencia entre
shm
ytmpfs
(en realidad,tmpfs
es solo el nuevo nombre del anteriorshmfs
).hugetlbfs
es untmpfs
sistema de archivos basado en el que asigna su espacio de páginas enormes del núcleo y necesita una configuración adicional (la forma de usar esto se explica en Documentation / vm / hugetlbpage.txt ).fuente
DirectMap
en laprocfs man
página. ¿Cómo?