Pregunta ¿Este rendimiento de eliminación de instantáneas BTRFS es normal?


Tengo varias cajas ejecutando Debian 8, dovecot y btrfs. Estoy usando instantáneas de btrfs para copias de seguridad a corto plazo. Para este propósito guardo 14 instantáneas del subvolumen de correo.

El rendimiento está bien hasta que se trata de la eliminación de instantáneas: tan pronto como se activa Btrfs-cleaner, todo está casi detenido. Esto sube a drbd perdiendo conectividad al nodo secundario debido al tiempo de espera. Esto sucede en varios cuadros, por lo que es poco probable que se trate de un problema relacionado con el hardware.

Spike es donde tiene lugar la eliminación de instantáneas: collectd load stats

No puedo creer que este sea un comportamiento normal. Entonces, mi pregunta es: ¿alguien tiene experiencia con este problema, alguna idea sobre cómo resolverlo o solucionarlo, o como último recurso cómo evitarlo haciendo las cosas de manera diferente?

Los sistemas son Dell R710, Debian 8, Kernel 3.16, Opciones de montaje: rw, noatime, nossd, space_cache

Edición: Más información del sistema

Doble R710, 24 GB de RAM, H700 con writecache, 8x1TB 7.2k discos Sata como RAID6, DRBD protocolo B, enlace dedicado de 1 Gb / s para DRBD

Edición: Eliminar el contenido de instantáneas a través de rm -rf. Estrangulado para IO, de lo contrario se habría escapado como lo hizo btrfs-cleaner:

collectd load stats

Llego a la conclusión de que esto es mucho peor. La única ventaja es que puedo controlar la carga de E / S del espacio de usuario rm.

Y otra edición: Iops massacree.

collectd iops stats


5
2018-03-18 16:07


origen




Respuestas:


En el mundo de CoW (BTRFS y ZFS, básicamente), la eliminación de una instantánea / subvolumen requiere muchas operaciones de metadatos "pesadas", lo que implica muchas búsquedas principales. Esto se debe a que el sistema de archivos analiza sus propias estructuras para determinar el bloque utilizado exclusivamente por la instantánea infractora. Esto, a su vez, puede traer un sistema a sus rodillas.

Para confirmar que este es el problema, haz eso:

  • abrir dos terminales con screen
  • en la primera terminal, ejecute iostat -x -k 1
  • En la segunda terminal, retire la instantánea.
  • durante la eliminación, verifique el primer terminal: probablemente encontrará sus discos con una ocupación del 100%, leyendo muchos, muchos bloques de datos pequeños.

Si el problema está confirmado, puede intentar primero borrar el contenido de la instantánea (con un simple rm) entonces eliminar la instantánea en sí.

Como nota al margen: si bien los sistemas de archivos CoW son extremadamente flexibles, no están diseñados para un rendimiento puro. Y mientras ZFS sigue siendo bastante rápido, Lo mismo no se puede decir de BTRFS.

De todos modos, la eliminación de subvolúmenes grandes también fue problemática para ZFS (hasta que se implementó un proceso de eliminación en ejecución en segundo plano ...)


5
2018-03-18 20:26



Hice lo que sugeriste. Ver mi edición por favor. - tim
Veo. Desafortunadamente, parece que la eliminación de instantáneas, aunque bastante rápida, básicamente detiene cualquier otra actividad del disco. Solo puedo sugerirle que haga la misma pregunta en la lista de correo de BTRFS. - shodanshok
Gracias. Es fascinante y triste que esto parezca tener un gran y misterioso efecto después de un docker rmi <images> comando, cuando btrfs es el controlador de almacenamiento. Después de que eliminé aproximadamente 20 GB de imágenes, tardé más de media hora en recuperar el espacio, por btrfs-cleaner, supongo. - nealmcb
@nealmcb Por lo que sé, este es el comportamiento esperado: la recuperación de espacio en btrfs es una operación algo compleja. ¿Ha intentado montar su sistema de archivos btrfs con el space_cache ¿opción? - shodanshok
No he jugado con las opciones de montaje. Busqué space_cache en la página del manual en btrfs.wiki.kernel.org/index.php/Mount_options pero todavía no tengo claro por qué eso podría ayudar, o cuáles podrían ser las desventajas. Ahora que entiendo el retraso, no estoy muy preocupado ya que hago esto muy raramente. Principalmente pensé que proporcionaría algunas palabras clave docker aquí para ayudar a otros a encontrar esta página y entender los problemas. - nealmcb


Se ve como un Error poco conocido en la función de cuota btrfs.
Simplemente deshabilite las cuotas btrfs con el siguiente comando.
btrfs quota disable /

UPD: Encontré detallada análisis del problema. No es un error, sino una característica.


1
2018-06-26 01:01