Esto me deja perplejo y no sé cómo profundizar en lo que realmente está haciendo ZFS.
Estoy usando una instalación limpia de FreeNAS 11.1 con un grupo ZFS rápido (espejos importados en 7200 rápidos) más un SSD UFS solitario para realizar pruebas. La configuración está prácticamente "lista para usar".
El SSD contiene 4 archivos de tamaños de 16 a 120 GB, copiados mediante la consola al grupo. El grupo está deduplicado (vale la pena: ahorro 4 veces mayor, tamaño de 12 TB en disco) y el sistema tiene mucha RAM (128 GB ECC) y Xeon rápido. La memoria es bastante adecuada: zdb
muestra que el grupo tiene un total de 121 MB de bloques (544 bytes cada uno en el disco, 175 bytes cada uno en RAM), por lo que el DDT completo tiene solo aproximadamente 20,3 GB (aproximadamente 1,7 GB por TB de datos).
Pero cuando copio los archivos al grupo, veo esto en zpool iostat
:
Está realizando un ciclo de hasta un minuto de lecturas de bajo nivel y una breve ráfaga de escrituras. La parte leída se muestra en la imagen. La velocidad de escritura general para la tarea tampoco es excelente: el grupo está vacío en un 45 %/10 TB y de forma nativa puede escribir a entre 300 y 500 MB/s.
Sin saber cómo comprobarlo, sospecho que las lecturas de bajo nivel se deben a la lectura del DDT y otros metadatos, ya que no están precargados en ARC (o se eliminan continuamente de ARC mediante la escritura de datos de archivos). Tal vez.
Tal vez esté encontrando resultados de desduplicación, por lo que no hay mucho escrito, solo que no recuerdo ninguna versión dup de estos archivos y, según recuerdo, hace lo mismo desde /dev/random (lo comprobaré y lo actualizaré en breve). Tal vez. Ninguna idea real.
¿Qué puedo hacer para profundizar más exactamente en lo que está sucediendo con miras a optimizarlo?
Actualización sobre RAM y deduplicación:
Actualicé la Q para mostrar el tamaño del DDT después del comentario inicial. La RAM con deduplicación a menudo se cita como 5 GB por TB x 4, pero eso se basa en un ejemplo que en realidad no es muy adecuado para la deduplicación. Debe calcular el recuento de bloques multiplicado por bytes por entrada. El "x 4" que se cita a menudo es sólo un límite predeterminado "suave" (de forma predeterminada, ZFS limita los metadatos al 25% de ARC a menos que se le indique que use más; este sistema está especificado para deduplicación y agregué 64 GB, que estodoutilizable para acelerar el almacenamiento en caché de metadatos).
Entonces, en este grupo zdb
se confirma que todo el DDT debería necesitar solo 1,7 GB por TB, no 5 GB por TB (20 G en total), y estoy feliz de proporcionar metadatos el 70 % de ARC, no el 25 % (80 G de 123 G).
En ese tamaño no debería ser necesario expulsarcualquier cosaque no sean contenidos de archivos "muertos" de ARC. Así que estoy buscando probar ZFS para encontrar lo que cree que está sucediendo y así poder ver el efecto de cualquier cambio que haga, porque realmente estoy muy sorprendido por su enorme cantidad de "lecturas de bajo nivel", y estoy buscando una forma de sondear y confirmar la realidad de lo que cree que está haciendo.