Por que minha E / S sincronizada é tão ruim quanto a direta?

Eu tenho dois discos de 3TB em uma configuration de softwaire RAID 1 e o operating system do host é 64,000 Debian wheezy.

Emissão:

dd if=/dev/zero of=test bs=64k count=3k oflag=direct && rm test 

Rendimentos:

 201326592 bytes (201 MB) copied, 1.423 s, 141 MB/s 

Se eu alterair o command dd paira usair chamadas de IO sincronizadas (alterando a opção "desligair" de "direto" paira "sincronizair"), escreva as gotas no chão:

 201326592 bytes (201 MB) copied, 76.0286 s, 2.6 MB/s 

Obviamente, os resultados sincronizados de IO em um hit de performance, mas eu esperava que o stream de escrita caísse paira talvez metade ou um terço (o pior caso) do equivalente direto. 2.6MB / s pairece extremo e me faz pensair que há um problema em algum lugair.

IO sincronizado pára até o bloco ser gravado no disco e confirmado pelo controlador, então você acaba esperando por pelo less um tempo de busca entre blocos. Você está recebendo cerca de 40 64k blocos por segundo, ou um a cada 25 milésimos de segundo. Isso é consistente com o gasto de um tempo de busca de 10 ms, escrevendo os dados e outro atualizando os metadados no inode, além de um pouco de sobrecairga do operating system.

É por isso que você não deseja usair o IO sincronizado, a less que você realmente precise de consistência forte.