Velocidade de gravação em disco muito mais lenta que a velocidade de leitura

4

Eu tenho um servidor VPS (WiredTree), rodando o CentOS.

Depois de experimentar alguns problemas de desempenho, criei uma referência simples para a velocidade de leitura / gravação de disco usando o seguinte script:

echo Write to disk
dd if=/dev/zero of=test1 bs=1048576 count=2048
echo Read from disk
dd if=test1 of=/dev/null bs=1048576

Aqui está um exemplo de saída:

[bizwayz@host perf]./benchmark
Write to disk
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 11.2601 seconds, 191 MB/s
Read from disk
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 0.789302 seconds, 2.7 GB/s
[bizwayz@host perf]./benchmark
Write to disk
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 3.69129 seconds, 582 MB/s
Read from disk
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 0.789897 seconds, 2.7 GB/s
[bizwayz@host perf]./benchmark
Write to disk
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 9.56615 seconds, 224 MB/s
Read from disk
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 0.882664 seconds, 2.4 GB/s
[bizwayz@host perf]./benchmark
Write to disk
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 3.52512 seconds, 609 MB/s
Read from disk
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 0.784007 seconds, 2.7 GB/s

Minha pergunta é se é normal que a velocidade de gravação seja muito mais lenta que a leitura.

    
por yby 20.12.2012 / 21:16

3 respostas

4

Você está executando um servidor VPS. Isso significa que há outros clientes em sua máquina física e como eles usam os impactos do disco, como você verá o desempenho de leitura e gravação.

Normalmente, no RAID10, você terá cerca de metade da taxa de gravação como a taxa de leitura. Mas, como há muitas variáveis desconhecidas, pode haver outro cliente fazendo muitas gravações no disco e é por isso que você está vendo piores velocidades de gravação.

Não custa nada abrir um ticket com eles, mas com um VPS, é o que você normalmente vê. Os VPSs são por conveniência e valor, não por desempenho.

Edit: Para ter certeza, o cache é um problema aqui, mas meu ponto ainda se aplica.

Certifique-se de executar o comando dd com o comando fdatasync para garantir que esteja realmente liberando os dados do arquivo para o disco, em vez de apenas a memória, que o kernel faz por padrão. ou seja:

dd bs=1M count=512 if=/dev/zero of=test conv=fdatasync
    
por 20.12.2012 / 21:24
2

Sim, é normal. Seu arquivo é apenas cerca de 2GB e encaixa completamente no cache. Na verdade, nunca é lido do disco, apenas do cache. Torne o tamanho do arquivo pelo menos 10 vezes maior para obter resultados significativos ou até mais, dependendo do tamanho de sua RAM (2x a RAM é um bom ponto de partida).

Eu realmente gostaria de ter um disco com 2,7 GB / s de velocidade de leitura:)

    
por 20.12.2012 / 21:19
1

Um problema em sua técnica de teste é o buffer interno do sistema no Linux que está sendo aproveitado, o que distorce muito seus resultados.

Em geral, as gravações em disco são mais lentas que as leituras de disco, é claro. Em um nível de arquivo lógico, as gravações podem ser muito mais lentas, pois há (1) processos de alocação de disco, (2) atualização das informações do diretório ... etc. Portanto, há mais operações quando ocorre uma gravação em nível de arquivo, não é uma operação atômica simples facilmente comparável com operações de leitura em nível de arquivo.

No benchmark, você precisa limpar o cache do buffer entre cada dd do seu teste ... ou reiniciar a sua máquina entre cada passo :-). BTW, acredito que há uma maneira simples de fazer isso escrevendo algo em uma área aplicável / proc.

EDIT: O processo de limpeza do cache:

 sync && echo 3 > /proc/sys/vm/drop_caches

Você deve fazer isso ANTES de cada comando dd.

    
por 20.12.2012 / 21:27