Linux: disco RAM como parte de un volumen lógico reflejado

Linux: disco RAM como parte de un volumen lógico reflejado

Tenemos un servidor con 64 GB de RAM total, las aplicaciones suelen utilizar un máximo de 30 GB de esa RAM disponible. Una de esas aplicaciones maneja muchos archivos planos y tenemos problemas de rendimiento, es decir, esperando en la E/S del disco. Mientras exploraba posibles soluciones surgió la idea de un disco RAM. El problema que tengo con un disco RAM es la volatilidad inherente.

Encontré documentación separada sobre discos RAM, configuración RAID 1 y volúmenes reflejados lógicos para agruparfísicodiscos, pero parece que no puedo encontrar ninguna documentación que sugiera si alguna de estas soluciones de replicación de discos se puede usar con un disco RAM. Más importante aún, dado que la idea es que el disco RAM esté disponible para lectura/escritura y que el disco físico "siga" al disco RAM y se ponga al día con las escrituras, nos gustaría que el disco RAM fuera el disco "principal" para todos. lee/escribe.

Para tener en cuenta, quisiéramoscomopara evitar que la RAM almacene en caché los archivos con el sistema operativo, pero si podemos obtener el mismo rendimiento que un disco RAM independiente, eso podría funcionar. Inicialmente evitamos esto ya que muchas veces no se accederá a ciertos archivos durante largos períodos de tiempo, pero aún así necesitamos la velocidad de lectura/escritura bajo demanda.

Respuesta1

Cabe señalar que nos gustaría evitar que la RAM simplemente almacene en caché los archivos con el sistema operativo, pero si podemos obtener el mismo rendimiento que un disco RAM independiente, eso podría funcionar. Inicialmente evitamos esto ya que muchas veces no se accederá a ciertos archivos durante largos períodos de tiempo, pero aún así necesitamos la velocidad de lectura/escritura bajo demanda.

Podrías usarvmtouchpara resolver tu problema.Esta es una utilidad que le permite anclar ciertos archivos o incluso directorios completos y todo lo que hay debajo de ellos en el caché de la página para que no sean desalojados, incluso si no se accede a ellos durante largos períodos de tiempo (que fue su razón inicial para no simplemente dependiendo del caché de la página). Esto requiere como máximo la misma cantidad de memoria que su disco RAM, o menos en la práctica. Seguirá usando el caché de la página, pero obtendrá un rendimiento similar al uso de un disco RAM para todo (en realidad, un rendimiento superior ya que el controlador MD no estará involucrado).

Respuesta2

Esto podría piratearse en conjunto, pero es una mala idea y probablemente tenga múltiples problemas de confiabilidad y mantenibilidad.

Creo que un RAID1 de disco RAM y disco físico estaría limitado al rendimiento del disco físico, ya que parte de la funcionalidad RAID1 es garantizar que ambas copias estén sincronizadas.

Para las lecturas, podría haber algún beneficio, porque el controlador MD puede distribuir lecturas entre diferentes dispositivos.

Posibles pasos para crear esto:

  1. Cree un archivo vacío, que tenga el tamaño de la matriz que desea admitir
  2. Úselo losetuppara crear un dispositivo de bloque a partir del archivo.
  3. Úselo mdadmpara crear la matriz con el dispositivo de bloque recién creado y la partición del disco duro correspondiente.
  4. Cree un sistema de archivos en la nueva matriz MD.

No lo he probado yo mismo, por lo que es sólo un ejemplo teórico de cómo se podría hacer.

Respuesta3

En primer lugar, un disco RAM es casinuncala respuesta correcta en Linux. Debido a que es un dispositivo de bloque, al final cualquier lectura tiene que pasar por la capa de bloque, el sistema de archivos y la capa VFS normal.ylos datos terminarán almacenados en caché en la RAM además de almacenarse en el disco RAM. Esta duplicación de datos, así como la cantidad de capas adicionales involucradas, son la razón por la cual tmpfs existe en Linux; en lugar de involucrar la capa de bloque, un sistema de archivos tmpfs simplemente almacena los datos directamente en el caché de la página, omitiendo toda la complejidad adicional. También cambia el tamaño automáticamente según la cantidad de datos almacenados en él (en lugar de tener que tener el tamaño definido por adelantado), e incluso puede aprovechar el espacio de intercambio. Si cree que necesita un disco ram, entonces el 99% de las veces debería usar tmpfs.


Ahora, en cuanto a las soluciones reales...

Si todos sus datos realmente caben en la RAM, es mucho mejor que simplemente los fije todos en la RAM, ya sea usando una herramienta comovmtoque, o haciendo que la aplicación realice un mapeo de todos los archivos y luego llame a mlock en todas las regiones mapeadas.

Si no todos sus datos caben en la RAM, tiene dos opciones realistas:

  • Almacene los datos comprimidos en el disco, idealmente utilizando un sistema de archivos que proporcione compresión transparente, como BTRFS, F2FS o ZFS. Siempre que tenga una CPU razonablemente rápida, esto normalmentereducirel tiempo necesario para leer un archivo grande, a costa de requerir un poco más de tiempo de CPU. La mejora generalmente es proporcional a qué tan bien se comprimen los datos, pero en muchos casos puede traducirse fácilmente en una mejora del 30 % o más.
  • Considere invertir en un almacenamiento más rápido. Ya sea suficiente para reemplazar su almacenamiento existente, o una cantidad menor que luego pueda usar conbcachepara acelerar funcionalmente su almacenamiento existente.

Respuesta4

Si necesita persistencia, un RAMDISK no es la solución correcta.

Recomiendo encarecidamente invertir en un par de discos NVMe rápidos (léase: de nivel empresarial, con protección contra pérdida de energía) para colocarlos en una matriz RAID1 (espejada) clásica.

información relacionada