performance btrfs

Decidí perder el time con btrfs y encontré algunas btrfs performance extrañas. Las testings que he hecho son con dos discos duros externos formateados con ext4 los otros btrfs .

ext4 resultado de performance ext4 es el siguiente:

 $ sudo dd if=/dev/zero of=/media/Backup/out.img count=1024 bs=1024k 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB) copied, 24.1959 s, 44.4 MB/s $ sudo dd if=/dev/zero of=/media/Backup/out.img count=1024 bs=1024k 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB) copied, 24.1619 s, 44.4 MB/s 

Los 44.4MB / s son típicos para mí, pero ahora btrfs (nota: siempre parece get ese alto 3.1GB / s IO justo después de eliminar el file):

 $ sudo dd if=/dev/zero of=/tmp/test/out.img count=1024 bs=1024k 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB) copied, 0.347933 s, 3.1 GB/s $ sudo dd if=/dev/zero of=/tmp/test/out.img count=1024 bs=1024k 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB) copied, 1.1732 s, 915 MB/s $ sudo dd if=/dev/zero of=/tmp/test/out.img count=1024 bs=1024k 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB) copied, 1.21539 s, 883 MB/s $ sudo dd if=/dev/zero of=/tmp/test/out.img count=1024 bs=1024k 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB) copied, 1.25093 s, 858 MB/s 

Mi pregunta es qué está pasando aquí con btrfs ? ¿Por qué el performance IO es mucho más alto? Incluso corrí una sync justo después y se completa al instante.

Estoy ejecutando el último kernel estable.

También te aconsejo que uses otras herramientas para la evaluación comparativa de E / S que dd . Brtfs no es un sistema de files tradicional y, al ser un sistema de files transaccional y de copydo en escritura, la mayoría de las operaciones se realizan en memory y no directamente en los files hdds.

Entonces cuando emite las eliminaciones y recrea el file, creo que solo reutilizará lo que tiene en la memory. No olvidemos que está creando un file inicializado solo con ceros. BRTFS solo escribe en el disco después de un time de espera o cuando se han alcanzado suficientes páginas.

Le aconsejo que eche un vistazo a este documento (PDF). Proporciona una explicación más profunda y en más detalle cuál podría ser la explicación para su pregunta.

Este comportamiento se debe a que BTRFS admite files dispersos . Básicamente, cualquier cadena suficientemente larga de "espacio vacío" (0 bits) se almacenará como metadatos que dicen "de este punto a este otro punto son todos 0" en lugar de escribir realmente los 0 en el disco. En este caso, como su flujo de input es / dev / zero, su file completo es 0 y, por lo tanto, su tamaño real en el disco es solo un poco de metadatos, más o less.

Sin embargo, no estoy seguro de por qué está viendo ese aparente aumento en el performance después de eliminar un file primero.