Desempenho de gravação da placa Alix

2

Eu tenho uma placa alix na qual eu instalei debian4alix (sqeeze). Depois de usá-lo por um tempo, notei que o desempenho de gravação da placa era muito baixo.

Eu fiz o seguinte teste:

dd count=100 bs=1M if=/dev/urandom of=/var/www/cgrid/test

Isso gerou o seguinte:

100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 328.903 s, 319 kB/s

Esta é a mesma velocidade que recebo ao executar o teste no cartão compact flash que o sistema operacional está instalado ou em um disco flash. Eu tinha testado o desempenho do disco flash em um PC desktop Linux e consegui velocidades de cerca de 15,3 MB / s usando os mesmos testes.

Minha velocidade de leitura na placa alix é de cerca de 9MB / s (testado com hdparm -t )

Eu gostaria de saber se as velocidades de gravação lenta que estou recebendo são resultado do sistema operacional (já que ele não está sendo executado diretamente do cartão compact flash, mas de um ramdisk) ou da solução de hardware incorporada sendo muito lenta.

    
por tensai 05.01.2013 / 15:53

1 resposta

1

Tenho certeza de que o quadro é mais lento que o desktop em termos de hardware. Mas a urandom piora.

A placa está usando uma CPU de 500MHz contra uma CPU de desktop de 2-3GHz. Com if=/dev/urandom , seu teste é mais sobre a rapidez com que o sistema pode lidar com urandom . Você está comparando o desempenho da CPU, não a E / S.

Além disso, se a placa tiver apenas 256M de RAM, o SO poderá começar a trocar ao criar o arquivo de disco de 100M. Se isso acontecer, terá um grande impacto no resultado do teste. Talvez teste com arquivo 50M.

Use if = / dev / zero

Não use if=/dev/urandom . É uma chamada muito cara para este teste. Em vez disso, use if=/dev/zero .

Teste 1 - Escreva 100M no disco

A seguir está o resultado do meu teste de uma máquina virtual, também escrevendo 100M.

if = / dev / zero

john@U64D211:~$ time dd count=100 bs=1M if=/dev/zero of=test
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.493612 s, 212 MB/s

real    0m0.540s
user    0m0.020s
sys 0m0.516s

if = / dev / urandom

john@U64D211:~$ rm test
john@U64D211:~$ time dd count=100 bs=1M if=/dev/urandom of=test
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 10.8723 s, 9.6 MB/s

real    0m10.909s
user    0m0.004s
sys 0m10.893s
john@U64D211:~$ 

Teste 2 - Escreva 100M para / dev / null

Para mostrar como é caro o urandom, vamos escrever para / dev / null, portanto, não é necessário gravar no disco.

if = / dev / zero

john@U64D211:~$ time dd count=100 bs=1M if=/dev/zero of=/dev/null
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.0240906 s, 4.4 GB/s

real    0m0.061s
user    0m0.012s
sys 0m0.052s

if = / dev / urandom

john@U64D211:~$ time dd count=100 bs=1M if=/dev/urandom of=/dev/null
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 10.4979 s, 10.0 MB/s

real    0m10.555s
user    0m0.024s
sys 0m10.513s

Portanto, ao gravar em /dev/null , quase 99% do tempo é gasto por urandom de chamada do sistema.

PS1 : a VM tem 4G de RAM.

PS2 : O armazenamento em cache do arquivo pode afetar o resultado do teste, mas a diferença entre a opção if é tão grande que é seguro ignorar o fator de armazenamento em cache. E o efeito deve se aplicar a ambos os casos de qualquer maneira.

PS3 : não calculei a média dos resultados do teste. Mas eu corri cada várias vezes com resultados muito semelhantes.

    
por 06.01.2013 / 06:19