Mejora de IO con FlashCache

14

Tengo un servidor con 2 HDD (2x 1 TB), que se ejecuta en RAID 1 (SW-RAID). Quiero mejorar el rendimiento de IO mediante el uso flashcache. Hay máquinas virtuales KVM en él, usando LVM.

Con respecto a esto, tengo las siguientes preguntas:

  • ¿Funcionará esto? flashcachefunciona para dispositivos de bloque, sin embargo, todas estas son máquinas virtuales con su propia configuración.
  • ¿Cuánto esperaría aumentar el rendimiento? La mayoría de las máquinas virtuales ejecutan sitios web y algunos juegos de host.
  • ¿Qué tan grande debe ser el SSD? ¿Tener un SSD más grande aumentaría el rendimiento ya que es capaz de almacenar en caché más archivos?
  • ¿Qué pasa si el SSD muere? ¿ flashcacheRecuperaría archivos del HDD tradicional y podría simplemente reemplazar el SSD?
  • ¿Cuánto más rápido sería writebacken comparación con writethroughy writearound?

Lamentablemente, no tengo acceso a un sistema de prueba, ¿podría instalarlo flashcacheen un servidor en vivo sin desmontar los discos? Encontré un gran tutorial aquí que estaría usando.

Devator
fuente
Creo que disfrutarías de un rendimiento más consistente si pudieras usar SSD como tus unidades principales.
ewwhite
¿Sin acceso a un sistema de prueba? Todo lo que necesita es una estación de trabajo con un HDD, un SSD y una máquina virtual con dos discos virtuales (uno en cada dispositivo). Los sistemas de producción no están destinados a ser utilizados como laboratorios de aprendizaje.
Skyhawk
Link está muerto en ese tutorial que mencionaste. ¿Algún otro lugar donde pueda encontrar esa información?
Thaeli

Respuestas:

18

Flashcache, para aquellos que no lo han visto antes, es un método para extender el bloque de caché de Linux con una unidad SSD. Es más barato que ejecutar un servidor con media TB de RAM solo para el almacenamiento en caché.

¿Funcionará esto?

Debería. El bloque de caché de Linux funciona almacenando en caché los bloques a los que se accede , no los archivos . Mientras no le esté dando a las máquinas KVM acceso directo a los dispositivos de bloque (no lo está), la Caché de bloques de Linux estará en juego. Sin embargo, si usted está dando a las máquinas KVM-bloquean el acceso directo dispositivo de la respuesta no es tan clara.

Si está utilizando discos virtuales respaldados por archivos, definitivamente funcionará.

Si está utilizando discos virtuales respaldados por LV, no lo sé.

¿Cuánto esperaría aumentar el rendimiento?

Eso es algo que no podemos responder. Depende de una variedad de cosas. En resumen, obtendrá el mejor rendimiento para dimensionar su SSD para que sea más grande que el conjunto activo de bloques. Si obtiene un almacenamiento en caché perfecto, su rendimiento será similar al de ejecutar todo su sistema en SSD. Lo que efectivamente harás.

¿Qué tan grande debe ser el SSD?

Encontrar el tamaño exacto que necesita es algo con lo que no podemos ayudar. Más es mejor, obviamente, pero encontrar la relación exacta entre el caché SSD y el almacenamiento primario no es una cuestión simple.

Para complicar esto, las escrituras se configuran para vaciar inmediatamente, como ciertas operaciones del sistema de archivos y algunas configuraciones de bases de datos. Esas escrituras solo se almacenarán en caché brevemente, y su rendimiento no se verá afectado de ninguna manera por la presencia o ausencia de flashcache.

¿Qué pasa si el SSD muere?

Lo mismo sucede cuando le dice a Linux que deje caer los cachés pero con un giro. Con las memorias caché, cualquier escritura no vaciada que esté en la memoria caché de bloques se vaciará en el disco. Lo que sucede cuando desaparece la SSD depende del modo de almacenamiento en caché :

Escritura : todas las escrituras se escriben en el caché y el almacenamiento primario en paralelo, por lo que las posibilidades de que una pérdida repentina de SSD provoque errores en las máquinas virtuales son muy pequeñas.

Redacción : todas las escrituras se escriben en el almacenamiento primario y solo se almacenan en caché cuando se leen. No hay posibilidad de errores en las máquinas virtuales.

Reescritura : todas las escrituras van primero a la caché y se escriben en el almacenamiento primario en segundo plano. Es más probable que cause errores en sus máquinas virtuales en caso de que falle el SSD, y no usaría este modo en producción.

¿Cuánto más rápido sería la reescritura en comparación con la reescritura y la reescritura?

Depende de cuánto escribas. Si sus escrituras saturan periódicamente su almacenamiento primario, el aumento del rendimiento podría ser bastante significativo. Si lees principalmente con algo de escritura, es probable que no notes mejoras.

Además, la reescritura es una mala política para lo que está haciendo, así que no la use.

sysadmin1138
fuente
1
Hola administrador de sistemas, gracias por su respuesta integral. No lo usaré, writebackya que podría corromper todo sin algo de BBU. No usaré el almacenamiento en caché SSD en absoluto, después de todo, sino solo un SSD normal. ¡Gracias de nuevo!
Devator
4

Sí, funcionará bien siempre que use los dispositivos de bloqueo correctos. Y hay un truco.

Cuando LVM escanea en busca de PV, debería ver la partición a través del disco duro real, y también a través del dispositivo "virtual" flashcache.

Un síntoma obvio debería ser que las herramientas LVM se quejan de PV duplicados.

La solución, para evitar esas advertencias y, lo que es más importante, asegurarse de que el dispositivo flashcache sea utilizado por LVM2, es adaptar el filtro /etc/lvm/lvm.conf.

La página de LVM.CONF(5)manual lo explicará mejor que yo, pero lo dejaré con un ejemplo, si todos los volúmenes físicos están respaldados por flashcache:

filter = [ "a/.*dm.*/" ]
Pierre Carrier
fuente
1

Algunas aplicaciones abren archivos de forma no almacenada.

http://man7.org/linux/man-pages/man2/open.2.html

O_DIRECT (desde Linux 2.4.10) Intente minimizar los efectos de caché de las E / S desde y hacia este archivo. En general, esto degradará el rendimiento, pero es útil en situaciones especiales, como cuando las aplicaciones hacen su propio almacenamiento en caché. La E / S de archivos se realiza directamente a / desde los búferes de espacio de usuario. El indicador O_DIRECT por sí solo hace un esfuerzo para transferir datos sincrónicamente, pero no ofrece las garantías del indicador O_SYNC de que los datos y los metadatos necesarios se transfieren. Para garantizar E / S síncrona, se debe utilizar O_SYNC además de O_DIRECT. Vea las NOTAS a continuación para una discusión más detallada.

Por ejemplo, esto es muy común para las bases de datos. Por lo tanto, verifique si flashcache funciona con este conjunto de aplicaciones.

Tagar
fuente