Tenemos varios servidores en cluster y queremos saber en general, ¿en qué casos necesitamos configurar páginas enormes?
También tengo algunas preguntas.
- ¿La dosis de "tamaño de página de memoria" es igual a páginas enormes?
en mi servidor Linux ingresé el siguiente comando para verificar el tamaño de página de memoria predeterminado
grep Hugepagesize /proc/meminfo
Hugepagesize: 2048 kB
getconf PAGESIZE
4096
pero como todos ven aquí, obtenemos resultados diferentes, ¿por qué?
¿Cuáles son los riesgos al utilizar páginas enormes?
dosis Desactivar página enorme transparente: ¿significa desactivar la opción PÁGINAS ENORMES?
Respuesta1
Las páginas enormes son interesantes cuando las aplicaciones necesitan asignaciones grandes a las que realizarán accesos aleatorios, porque ese es el peor caso posible para el Translation Lookaside Buffer (TLB). Se compensa la granularidad del mapeo por las entradas TLB.
Las páginas, incluidas las páginas enormes, sólo pueden asignarse a un bloque de memoria física del mismo tamaño y alinearse con ese tamaño. Por lo tanto, una página enorme de 2 MB debe asignarse a un límite de 2 MB en RAM física, y una página enorme de 1 GB debe asignarse a un límite de 1 GB, porque los bits inferiores dirigen los datos dentro de la página y no se puede agregar ningún desplazamiento aquí.
Esto significa que las páginas enormes generalmente se reservan al iniciar el sistema, cuando la memoria física aún no está fragmentada. Las aplicaciones que reconocen páginas enormes pueden usarse hugetlbfs
para asignarlas.
Tienes que decidir con un parámetro del kernel si las páginas enormes deben tener un tamaño de 2 MB o 1 GB; no puedes mezclarlos. Las páginas normales de 4kB siempre están disponibles.
El caso de uso más común son las máquinas virtuales (qemu/kvm puede usar páginas enormes), donde esto permite mantener toda la asignación de memoria de la VM en una pequeña cantidad de entradas TLB, que por lo tanto nunca se desalojan, por lo que los accesos a la memoria dentro de la VM requieren una página. búsqueda de tabla solo dentro del contexto del invitado.
Algunos sistemas de bases de datos también admiten páginas enormes, pero esto generalmente solo es útil si trabaja con índices y conjuntos de datos grandes.
Las preguntas:
Hay páginas normales (4kB) y páginas enormes (2MB o 1GB). Cuando consulta el tamaño de la página, obtiene el tamaño de las páginas normales, cuando consulta el tamaño de la página enorme, obtiene la configuración para las páginas grandes. Se pueden utilizar páginas normales y grandes en paralelo, pero no se pueden mezclar diferentes tamaños de páginas grandes.
Obtienes resultados diferentes porque son dos cosas diferentes. El tamaño de las páginas normales está fijado en el hardware, por lo que no es una configuración.
Las páginas grandes deben asignarse con anticipación y, si bien la memoria es técnicamente "libre", no se puede utilizar para nada más que aplicaciones que reconocen páginas grandes, por lo que todas, excepto estas aplicaciones, tendrán menos memoria disponible. Por lo general, eso no es un problema, porque usaría páginas enormes en máquinas dedicadas a aplicaciones que consumen mucha memoria, como máquinas virtuales o bases de datos.
Las páginas enormes transparentes intentan hacer que la memoria esté disponible como buffers y cachés (al contrario del n.° 3), e intentan dar páginas enormes a las aplicaciones que asignan grandes bloques de memoria, de modo que las aplicaciones que no son conscientes de las páginas enormes aún puedan beneficiarse de ellas; básicamente, una aplicación que solicita un bloque de memoria de 2 MB/1 GB, si es posible se le dará una página enorme. Si esto ayuda o perjudica el rendimiento depende de sus aplicaciones. Si tiene una aplicación que reconoce páginas enormes y desea asignar la memoria manualmente, debe desactivar THP, mientras que un sistema que tiene una aplicación de base de datos que no comprende páginas enormes probablemente se beneficiaría.
Respuesta2
Los casos de uso obvios para páginas grandes es cuando las PageTables (visibles en /proc/meminfo) alcanzan decenas de GB. Esto significa grandes gastos generales de memoria y CPU simplemente rastreando su memoria. Sucede con grandes cantidades de memoria, una gran cantidad de procesos o ambas cosas. A menudo en aplicaciones de bases de datos.
Las páginas grandes reducen significativamente esa sobrecarga porque una sola entrada de la tabla de páginas ahora ocupa mucha más memoria, digamos 2048 KB en lugar de 4 KB. (Hay diferentes tamaños en otras plataformas; AIX en POWER admite páginas grandes de 16 MB, por ejemplo).
Es posible que las páginas enormes en Linux no se utilicen para el almacenamiento en caché de archivos y son molestas e ineficientes para un par de MB en malloc() para memoria no compartida. Por lo tanto, el administrador tiene que asignar grupos de páginas enormes que sólo pueden usarse para algunos propósitos. Esta es una desventaja de usar páginas enormes.
Las páginas grandes transparentes (THP) intentan hacer que la administración sea menos molesta "desfragmentando" automáticamente la memoria contigua en páginas grandes. La idea era que esto hiciera que las páginas grandes preasignadas fueran opcionales. Los beneficios son muy específicos de la carga de trabajo; es posible que gaste demasiada CPU como para que valga la pena. Deshabilitar THP significa que aún puedes asignar páginas grandes manualmente. A veces vale la pena desactivar THP y simplemente colocar los segmentos de memoria compartida de la base de datos en páginas enormes.
Una última queja sobre las páginas enormes de Linux: me resulta molesto administrarlas.
- La memoria compartida usa una interfaz, pero para las demás se usa una biblioteca y un sistema de archivos enorme.
- Puede "desperdiciar" memoria asignando páginas demasiado grandes y no configurando su aplicación para usarlas.
- Ese número de páginas debe ampliarse según el tamaño de cada host, porque es un recuento de páginas y no un porcentaje de memoria.
- A menudo, la capacidad de asignar páginas grandes se limita a estar en un grupo; cambiar de usuario de la base de datos puede provocar un desperdicio de memoria sorprendente.