Eu estava classificando alguns arquivos grandes (91GB em 27 arquivos) com o GNU sort
quando notei que iostat -dxk 3
mostrava velocidades de leitura muito lentas, entre 5 MB / se 10 MB / s, com 100% de utilização de disco. Eu tentei cat large-file > /dev/null
e obtive desempenho similar, apenas um pouco mais alto. O mesmo para cp large-file /tmp/
, com /tmp
em um disco separado. vim
tem o mesmo, assim como os scripts que escrevo em arquivos de leitura do Ruby, se isso ajudar. A velocidade de gravação é boa e rápida.
EDIT: Parece que essas operações são lentas apenas em arquivos em um determinado diretório. As mesmas operações em outros arquivos em um diretório irmão (mesma partição de disco), acabam sendo rápidas, com velocidade de leitura acima de 90 MBPS. Isso não faz sentido para mim. Poderia ser possivelmente devido à maneira em que esses arquivos foram construídos? Eu os criei lendo muitos outros arquivos e escrevendo cada linha em um "arquivo de intervalo" apropriado, dependendo do primeiro caractere na linha (assim, a-z e um único arquivo para os outros). Então eu estava praticamente anexando linhas a 27 arquivos, um de cada vez, através de 8 processos, enquanto lia alguns milhares de arquivos. Isso poderia causar a ordem sequencial em que os blocos que representam um arquivo estivessem fora de ordem? Daí a leitura sequencial lenta depois?
No entanto, tentei usar fio
para medir o desempenho de leitura sequencial e ele atingiu 73 MB / s. Também é notável que meu chefe obteve velocidades de leitura adequadas ao baixar alguns arquivos via FTP da mesma máquina.
Então, acho que isso é algum problema de configuração em algum lugar, mas não tenho ideia de onde. Qual poderia ser o motivo e como posso tentar corrigi-lo?
Editar: esta máquina está executando sob a virtualização do Citrix Xen.
Edit: Saída de iostat -dxk
enquanto sort
está carregando um arquivo grande em seu buffer (obtenha saída semelhante para cat / cp):
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
xvdb 0.00 0.00 1000.00 0.00 6138.61 0.00 12.28 24.66 24.10 0.99 99.41
xvdb1 0.00 0.00 1000.00 0.00 6138.61 0.00 12.28 24.66 24.10 0.99 99.41
xvda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
xvda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Editar: Mais degradação do desempenho após algumas horas (com quebras para o disco quando sort
estava sendo processado). Quase parece um IO aleatório, mas há apenas uma única operação de classificação acontecendo, sem nenhum outro processo fazendo qualquer IO, portanto, as leituras devem ser sequenciais = /:
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
xvdb 0.00 0.00 638.00 0.00 2966.67 0.00 9.30 25.89 40.62 1.57 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
xvdb 0.33 0.00 574.67 0.00 2613.33 0.00 9.10 27.82 47.55 1.74 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
xvdb 0.00 0.00 444.33 0.00 1801.33 0.00 8.11 28.41 65.27 2.25 100.00