Chamadas para sincronizar / fsync abrandam após 30 minutos de funcionamento

7

Após 30 minutos de atividade usando o Ubuntu 14.04 com um SSD híbrido , vejo muitos processos bloqueando IO usando iotop . Isso ocorre durante gravações em disco, por exemplo, se eu abrir e fechar um arquivo vazio no gedit, pode levar 2 segundos para fechar devido às configurações de gravação do dconf, isso afeta outros aplicativos de maneira semelhante; desacelerando todo o sistema severamente.

Usando strace consegui rastrear isso de volta para uma chamada fsync e a partir daí consegui reproduzi-lo usando o comando sync.

Então, para recapitular, simplesmente executar sync do terminal repetidamente pode levar na ordem de 1 a 2 segundos, mas SOMENTE após 30 minutos de atividade.

Para provar isso, criei um script que gera tempo de atividade em segundos em relação ao tempo necessário para executar a sincronização, e o executa a cada segundo:

while true;
do
cat /proc/uptime | awk '{printf "%f ",$1}'; /usr/bin/time -f '%e' sync;
sleep 1;
done;

Corri o script acima, esperei cerca de uma hora (o sistema ficou inativo) e, em seguida, plotei os resultados no gnuplot (y = tempo em segundos para executar a sincronização, x = tempo de atividade em segundos):

Opontonotempoemqueográficoficaemtornode1780(1780/60=aproximadamente30minutos).

Nadadevesergravadonodisconestemomento,excetooscript,portanto,nãodevehaverquasenadanocachedapáginaapósaprimeirasincronização.Cadasincronizaçãosubseqüentegravaráexatamenteoqueestásendogravadonoscript,queseráaproximadamente100bytesoumais.

Esseproblemapersisteapósasreinicializações;porexemplo-seeuesperar30minutosparaadesaceleração,entãoreinicie,alentidãoaindaestarálá.Seeudesligar,reinicieoproblemaaté30minutosdepois.

Outracuriosidadeéquequandoexamineiográficoacimaeaumenteiozoomemumaáreaondealentidãoestáocorrendo,percebiisso:

Os picos e as quedas se repetem - isso ocorre quase exatamente a cada 10 segundos, do vale ao vale, e também ao pico quando ele desce.

Eu também testei o hdparm ( hdparm -t /dev/sda e hdparm -T /dev/sda ) antes da lentidão:

/dev/sda:
Timing cached reads:   23778 MB in  2.00 seconds = 11900.64 MB/sec
/dev/sda:
Timing buffered disk reads: 318 MB in  3.01 seconds = 105.63 MB/sec

e durante a desaceleração:

/dev/sda:
 Timing cached reads:     2 MB in  2.24 seconds = 915.50 kB/sec
/dev/sda:
Timing buffered disk reads: 300 MB in  3.01 seconds =  99.54 MB/sec

Mostrando que as leituras de disco reais não estão sendo afetadas, mas as leituras em cache são, isso poderia significar que isso tem a ver com o barramento do sistema e não com o HD, afinal?

Aqui estão as soluções que tentei:

  • Altere as configurações do spindown do HD, talvez o HD esteja entrando no modo de economia de energia:

    hdparm /dev/sda -S252 #(set it to 5 hours before spindown)
    
  • Altere o tipo de journalling do sistema de arquivos para writeback em vez de ordenado para que possamos obter melhorias de desempenho - isso não resolve o problema, pois não explica o tempo de atividade livre de lentidão de 30 minutos.

  • CRON desativado, como parece ocorrer após 30 minutos.

  • O uso da CPU é bom e está completamente ocioso, portanto nenhum processo pode ser responsabilizado. No entanto, tentei desligar todos os serviços, incluindo o gerenciador de sessões (lightdm), isso não faz nada, pois acredito que o problema seja de nível inferior.

  • A análise de qualquer novo processo que chegue em 30 minutos indica que não houve alterações - eu diferenciei a saída do PS antes e depois e não há diferença.

Isso só começou cerca de duas semanas atrás, nada foi instalado e nenhuma atualização foi feita nesse período. Eu estou pensando que este problema é de nível muito mais baixo, então realmente apreciaria alguma ajuda aqui, já que eu estou sem noção, até mesmo me apontando na direção certa seria útil - por exemplo, existe uma maneira de examinar o que está sendo descartado do cache de páginas?

O cache de gravação está ativado no disco em questão. Também tentei desativar as barreiras de gravação. Dados SMART no HD indicam que não há problemas com o HD em si, mas tenho minhas suspeitas de que é o HD fazendo algo misterioso, pois ele persiste após as reinicializações.

EDITAR:

Eu fiz:

watch -n 1 cat /proc/meminfo

... para ver como a memória muda particularmente olhando para a linha suja e a linha de write-back, que acredito ser o buffer de disco do HD. Todos eles ficam em zero na maior parte, sendo provavelmente 300kb. A sincronização de chamada libera isso como esperado de volta para 0, mas durante a desaceleração, a chamada de sincronização quando há zero páginas sujas e zero kb no buffer de disco ainda bloqueia IO. O que mais poderia ser feito se não houvesse nada para limpar o cache de páginas e gravar o cache?

    
por alex.p 01.11.2014 / 23:29

1 resposta

3

Os sintomas são muito consistentes com um sistema de E / S saturado, mas a maior parte descartou a carga de IO do lado do OS / userspace, outra possibilidade é a execução de auto-testes, que pode incluir a leitura de todos os setores. Isso deve ser consultável / sintonizável de smartctl (pelo menos um lugar sendo smartctl -c para consulta).

Por que está indo e vindo e começou de repente agora:

  • O disco passou por um certo estágio em sua vida (número de setores gravados, tempo girado etc.) e o firmware do disco acionou uma dessas verificações
  • Acredito que isso também pode ser acionado por meio do smartctl, por isso, é possível que algum processo automatizado tenha acionado
  • Ter uma dessas verificações acionadas e sinalizadas como em andamento ou iniciadas, quando a unidade passou um determinado período de tempo ativada, ela é disparada novamente desde o início ou para continuar de onde parou
por 05.11.2014 / 18:01