Por que a alta E / S de disco reduz a capacidade de resposta / desempenho do sistema?

19

Eu nunca entendi direito por que a E / S de disco alta atrasava tanto o sistema. É estranho para mim, porque eu esperaria que a desaceleração afetasse apenas os processos dependentes dos dados da unidade de disco rígido / óptico, mas a desaceleração afeta até mesmo as coisas carregadas na RAM. Estou aqui me referindo ao iowait .

Por que o processador espera, em vez de fazer outro trabalho? Alguém pode explicar essa limitação e por que ela não foi resolvida no kernel do Linux? Existe um kernel por aí que não tem esse problema?

[ nota ] Houve algum progresso nessa área de desempenho. Por um lado, os kernels posteriores (2.6.37 no meu caso) são muito mais responsivos.

tshepang
fonte
O xeno não explicou exatamente como isso foi resolvido no kernel do Linux da última vez que você perguntou?
Michael Mrozek
2
Dadas as edições, acho que a intenção é fazer com que a pergunta anterior seja sobre o progresso que está sendo feito para corrigir o problema, enquanto essa pergunta é sobre por que o problema existe.
Steven D
@mic Steven está certo. Tivemos uma longa discussão sobre o que eu quis dizer com a pergunta anterior. A resposta de xeno foi tão boa que editei a pergunta para ajustá-la e refiz a pergunta original aqui.
tshepang
Eu entendo, mas sua pergunta parece contradizer a outra; aqui você diz "Alguém pode explicar essa limitação e por que ela não foi resolvida no kernel do Linux? Existe um kernel por aí que não tem esse problema?", mas a resposta do xeno começa com "Eu acho que, na maior parte, foi resolvido."
Michael Mrozek
@mic Na verdade não. O kernel ainda faz o iowait , o que significa que ainda espera. Eu vejo a resposta do xeno à medida que mais capacidade de resposta do sistema foi aprimorada . E que eu concordo, como observei na pergunta.
tshepang

Respostas:

9

Os sistemas operacionais usam memória virtual para que mais memória possa ser usada do que a RAM física disponível. Quando o kernel decide que tem um uso melhor para uma página de memória física, seu conteúdo pode ser "paginado" para armazenamento em disco. Quando uma página de memória virtual desse tipo é acessada enquanto é paginada, ela gera uma falha de página e é movida de volta do disco para a RAM.

As falhas de página são um desastre para o desempenho, porque a latência do disco é medida em milissegundos, enquanto a latência da RAM é medida em nanossegundos. (1 milissegundo = um milhão de nanossegundos!)

A memória não é usada apenas pelos processos do usuário, mas também pelo kernel para coisas como o cache do sistema de arquivos. Durante a atividade do sistema de arquivos, o kernel armazenará em cache os dados usados ​​recentemente. A suposição é de que há uma boa chance de que os mesmos dados sejam usados ​​novamente em breve, portanto, o armazenamento em cache deve melhorar o desempenho de E / S.

A memória física usada para o cache do sistema de arquivos não pode ser usada para processos; portanto, durante a atividade do sistema de arquivos, mais memória do processo será paginada e as falhas de página aumentarão. Além disso, menos largura de banda de E / S do disco está disponível para mover as páginas de memória de e para o disco. Como resultado, os processos podem parar.

Wim Coenen
fonte
Eu sei que isso é tão antigo quanto a sujeira, mas, dependendo de como está chegando, grandes quantidades de E / S podem resultar em muitas interrupções sendo geradas e o contexto resultante muda o desperdício de tempo da CPU.
Bratchley
5

Pelo que entendi, IOwait significa que um processo, não o processador, está aguardando a disponibilização do IO. Os processadores ganharam muito mais velocidade que os discos rígidos, o que significa que mais código terminará mais rapidamente e, em seguida, o disco precisará ser lido. Quando vários mais precisam ser lidos do que a unidade pode fazer com rapidez suficiente, você acaba com a espera do processador. A maneira como é decidido quem começa a ler / gravar no disco é determinada pelo agendador de blocos, na maioria dos casos agora no CFQ. Se você estiver usando o CFQ e precisar de um processo para usar menos o tempo total de IO para aumentar a capacidade de resposta do sistema, poderá usá-lo ionice -c3 <processid>. Isso diz ao sistema para fornecer apenas E / S a esse processo apenas quando nada mais precisar.

Isso ainda é interessante e explica melhor o problema do iowait.

xenoterracida
fonte