btrfs desempenho

1

Eu decidi mexer com btrfs e encontrei algumas anomalias de desempenho estranhas. Os testes que fiz estão com dois discos rígidos externos um formatado com ext4 o outro btrfs .

O resultado do desempenho

ext4 é o seguinte:

$ 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

Os 44.4MB / s são típicos para mim, mas agora btrfs (nota: eu sempre pareço ter esse IO alto de 3.1GB / s após excluir o arquivo):

$ 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

Minha pergunta é sobre o que está acontecendo aqui com btrfs ? Por que o desempenho IO é muito maior? Eu até corri um sync logo depois e ele completa instantaneamente.

Estou executando o último kernel estável.

    
por user1529891 02.01.2013 / 05:38

2 respostas

4

Eu também aconselho você a usar outras ferramentas para E / S de benchmarking do que dd . O Brtfs não é um sistema de arquivos tradicional e é um sistema de arquivos transacional e de copy-on-write, a maioria das operações é feita na memória e não diretamente nos hdds.

Então, quando você emite as exclusões e recria o arquivo, eu acredito que ele apenas irá reutilizar o que está na memória. Não vamos esquecer que você está criando um arquivo inicializado apenas com zeros. O BRTFS grava apenas no disco após um tempo limite ou quando páginas suficientes não foram atingidas.

Eu aconselho que você dê uma olhada em este documento (PDF). Ele fornece uma explicação mais profunda e com mais detalhes, o que pode ser a explicação para sua pergunta.

    
por 02.01.2013 / 09:36
2

Esse comportamento ocorre porque o BTRFS suporta arquivos esparsos . Basicamente, qualquer string suficientemente longa de "espaço vazio" (0 bits) será armazenada como metadados dizendo "deste ponto até este outro ponto é todo 0" ao invés de escrever os 0s no disco. Neste caso, como o seu fluxo de entrada é / dev / zero, o seu arquivo inteiro é 0s e, assim, seu tamanho real no disco é apenas um pouquinho de metadados, mais ou menos.

Não tenho certeza de por que você está vendo muito aumento aparente na taxa de transferência depois de excluir um arquivo primeiro.

    
por 30.01.2013 / 14:36