Por que os sistemas ficam lentos ao fazer gravações em massa no disco?


8

Quero saber por que os sistemas ficam lentos ao gravar dados em massa no disco.

Eu acho que para o sistema ficar lento, deve haver algum problema com a CPU. Mas a gravação é apenas ligada à E / S.

As interrupções de hardware ocorrem ao gravar dados? Nesse caso, pode ser por causa das interrupções que a CPU está sempre alternando o contexto.


1
Acho que quase todos os aplicativos lêem / gravam dados do disco, não é?
— jilen

1
Talvez esteja trocando de memória e, portanto, diminuindo a velocidade, quando o disco estiver sob uso intenso. Um plugin do systemload pode informar se você está usando o swap de maneira gráfica. Para a linha de comando, use free.
— usuário desconhecido

1
Se você tem o sysstat configurado / em execução, pode ver os relatórios de SAR referentes aos tempos lentos e mostrar o que está acontecendo nesse período (comutadores de contexto, E / S de disco, carga da CPU, tráfego de rede, etc.).
— Bratchley

Observe também suas $PATHconfigurações se você usar a conclusão de comandos ou cometer muitos erros de ortografia. Examinar muitos diretórios, especialmente aqueles com muitas entradas de diretório, pode levar um tempo notável quando os recursos são escassos.
— Matt Bianco

Respostas:


3

A principal razão por trás disso é que o habitual: a E / S é muito mais lenta que a CPU / RAM. Mesmo que os processos que executam operações de E / S usem DMA (que descarrega a CPU), em algum momento eles provavelmente precisarão aguardar a conclusão de suas solicitações.

No caso mais comum de um disco rígido, basta adicionar vários aplicativos que tentam acessar arquivos espalhados pela unidade e você pode tomar um café (chá, qualquer que seja). Com os SSDs, a situação melhora, mas mesmo um SSD - com taxa de transferência medida em centenas de MB / s no SATA (em comparação com dezenas de MB / s de um disco rígido giratório) e tempos de busca realmente insignificantes (comparado a milissegundos para um prato giratório) - pode se tornar um gargalo.

O problema que eu entendo não está apenas nas transferências de dados, mas na sobrecarga necessária - a E / S é controlada pelo kernel, mas raramente acontece sem o espaço do usuário. Portanto, pode haver muitas opções de contexto, apenas a partir das aplicações que aguardam a E / S, verificando se algo está acontecendo (depende da implementação, é claro). No caso de transferências de disco, pode haver vários threads do kernel competindo por recursos ou aguardando ocupado (o que às vezes é a estratégia apropriada). Lembre-se, por exemplo, copiar dados de uma partição para outra requer um sistema de arquivos moderno para: descobrir onde estão os dados de origem, ler, alocar espaço no sistema de arquivos de destino, gravar metadados, gravar dados e repetir até terminar.

E se, em algum momento, seu sistema começar a trocar (que geralmente tem prioridade mais alta que a E / S comum), o desastre será finalizado.

EDIT : Depois de conversar com alguns desenvolvedores de kernel do Linux, a situação ficou um pouco mais clara. O principal problema é o planejador de E / S, que não tem muita idéia sobre qual E / S priorizar. Portanto, qualquer entrada do usuário e a seguinte saída gráfica está compartilhando a fila com a atividade do disco / rede. Como conseqüência disso, também pode acontecer que ele jogue fora os dados do processo em cache do cache da página (por exemplo, bibliotecas carregadas) quando concluir que pode usar o cache da página com mais eficiência em outras E / S. É claro que isso significa que, uma vez que esse código precise ser executado novamente, ele precisará ser buscado novamente - forme o disco que já pode estar sob carga pesada.

Dito isto, no que diz respeito ao kernel do Linux, muitos desses problemas foram corrigidos recentemente (o problema é conhecido), por exemplo, o 4.4.x ou 4.5.x deve se comportar melhor do que costumava e os problemas devem ser relatados (geralmente as pessoas do kernel ficam felizes quando alguém quer ajudar com relatórios e testes de bugs).


Você poderia explicar um pouco por que o atraso geral do sistema quando o IO está muito ocupado? Por exemplo, eu não vejo nenhuma conexão entre o Windows Manager e o IO - obviamente, o WM não faz nenhum IO, então por que começar a ficar atrasado (pelo menos quando não é trocado) ?
— Hi-Angel

WM pode realmente estar fazendo um monte de I / O via X server / Wayland compositor (não tanto como copiar quatro fluxos de dados entre 2 HDDs, mas ele não tem que ser totalmente insignificante - que é provavelmente uma das razões awesomeparece estar trabalhando um pouco melhor do que kwinnesse sentido).
— precisa saber é

Mas que tipo de IO faz? É simplesmente por causa do login em xsession-errors/ Xorg.ₙ.log? O registro não é apenas armazenado em buffer, sem interromper o trabalho do WM? Algo mais? UPD: Eu apenas procurei no /proc/AwesomePID/fd- o único arquivo que meu WM abriu é xsession-errors. Tudo o resto não é realmente um arquivo - soquetes /dev/null, /proc/stat...
— Hi-Angel

1
Mas você disse que o WM pode realmente fazer muitas E / S via servidor X / compositor Wayland . Mas seja como for, por que você acha que ele não tem CPU suficiente? Quando isso acontece, a CPU geralmente é bastante gratuita - posso ver a carga no widget da CPU no meu painel e descompactar um arquivo não exige muito disso.
— Hi-Angel

1
@ Hi-Angel check update update se esclarece um pouco as coisas.
— Peterph 17/03/16

2

Minha experiência é que a atividade de E / S por si só não diminui a velocidade do sistema. Esse efeito ocorre quando outras tarefas também precisam de E / S. A situação se tornará realmente ruim se o sistema estiver trocando (forçado a) e você causar uma carga pesada de E / S.

Você pode influenciar o impacto da I tarefas de E / S pesadas por ionice. Se você os idlepriorizar, a latência para outras tarefas ainda poderá aumentar, mas não além do mínimo. A tarefa de E / S é interrompida imediatamente se outra tarefa (não ociosa) tiver E / S para executar. Se você estiver usando um agendador que suporte essas configurações.

Consulte Selecionando um agendador de E / S do Linux


1
Minha experiência é o oposto: ou seja, posso começar a descompactar um grande arquivo morto - causando carga de E / S - e, neste momento, tentar mudar para outra "área de trabalho", sinto falta da troca. Como o gerenciador de janelas é relevante para o IO? E sim, eu tenho uma RAM livre, então ela não é trocada (e mesmo que eu não tenha - a WM não trocou no último turno?) . FWIW, estou usando um Awesome WM leve, e anteriormente com o kwin as coisas eram ainda piores.
— Hi-Angel
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.