FIO reportando velocidades de gravação lentas, enquanto o DD reporta velocidades rápidas

1

De acordo com a maioria dos benchmarks de disco, as velocidades de gravação sequenciais são tipicamente muito próximas das velocidades de leitura. Os meus estão na faixa de ~ 500MB / s.

$ dd if=/dev/zero of=tempfile bs=1M count=5120 conv=notrunc oflag=direct status=progress
5291114496 bytes (5,3 GB, 4,9 GiB) copied, 11 s, 481 MB/s
5120+0 records in
5120+0 records out
5368709120 bytes (5,4 GB, 5,0 GiB) copied, 11,1929 s, 480 MB/s

$ dd if=/dev/zero of=tempfile bs=1024M count=5 conv=notrunc oflag=direct status=progress
5368709120 bytes (5,4 GB, 5,0 GiB) copied, 11 s, 490 MB/s
5+0 records in
5+0 records out
5368709120 bytes (5,4 GB, 5,0 GiB) copied, 10,9524 s, 490 MB/s

Como você pode ver, o dd informa uma média de 480MB / s com bs = 1M e 490MB / s com bs = 1024M. (Além disso, o report reporta as velocidades de leitura como superiores a dd em 20-30MB / s, o que é interessante, mas não é um problema para mim)

$ fio --ioengine=libaio --size=1024m --filename=$HOME/tempfile --direct=1 --loops=5 --name=test --bs=1m --rw=write
....
    write: IOPS=146, BW=147MiB/s (154MB/s)(5120MiB/34894msec); 0 zone resets

$ fio --ioengine=libaio --size=1024m --filename=$HOME/tempfile --direct=1 --loops=5 --name=test --bs=1024m --rw=write
....
    write: IOPS=0, BW=144MiB/s (151MB/s)(5120MiB/35458msec); 0 zone resets

Como você pode ver, o report reporta ~ 154MB / s em vez de bs = 1m e 151MB / s com bs = 1024m. (um valor surpreendentemente ainda menor ...)

O que está causando fio para transferir arquivos tão lento e como posso configurá-lo para escrever mais perto da velocidade do dd?

(Como uma nota lateral, notei que, ao procurar por soluções para isso, muitos usuários realmente acham que suas velocidades de gravação são tão lentas quanto as reportam, e fazem perguntas para entender por que suas gravações são tão lentas que eu até mesmo vi testes de unidade NVME onde vi velocidades de gravação em metade do que as leituras eram, e ninguém parecia notar que algo estava errado ... então esse problema tem mais alguns efeitos colaterais indesejados, do que apenas eu não obter benchmarks consistentes) / p>     

por Cestarian 06.11.2018 / 17:37

1 resposta

1

O motivo da diferença foi explicado pelo autor do fio: o comando dd I usado foi escrever zeros enquanto fio estava usando dados aleatórios por padrão. Definir - zero_buffers = 1 resolve o problema.

fio --ioengine=libaio --size=1024m --filename=$HOME/tempfile --direct=1 --loops=5 --name=test --bs=1024m --rw=write --zero_buffers=1
....
  write: IOPS=0, BW=495MiB/s (519MB/s)(5120MiB/10339msec); 0 zone resets

e

fio --ioengine=libaio --size=1024m --filename=$HOME/tempfile --direct=1 --loops=5 --name=test --bs=1m --rw=write --zero_buffers=1
....
  write: IOPS=474, BW=474MiB/s (497MB/s)(5120MiB/10798msec); 0 zone resets

Agora tem resultados muito mais próximos. (Deve-se observar que, embora esses resultados realmente mostrem uma aproximação das velocidades máximas teóricas de gravação do drive, o teste sem essa opção (usando buffers randomizados) fornecerá resultados mais indicativos do desempenho de E / S do mundo real.)

    
por 11.11.2018 / 17:48