it-swarm-pt.com

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

Nunca entendi muito bem por que a alta E/S de disco tornava o sistema tão lento. É estranho para mim porque eu esperaria que a desaceleração afetasse apenas os processos dependentes dos dados do disco rígido/óptico, mas a desaceleração afeta até mesmo o material carregado na RAM. Estou aqui me referindo a 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 algum kernel que não tenha este problema?

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

19
tshepang

Os sistemas operacionais usam memória virtual para que mais memória possa ser usada do que a física RAM disponível. Quando o kernel decide que tem um melhor uso para um físico página de memória, seu conteúdo pode ser "paginado" para armazenamento em disco. Quando tal página de memória virtual é acessada enquanto paginada, ela gera uma falha de página e é movido 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 RAM a latência é 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 é 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 de disco está disponível para mover páginas de memória de e para o disco. Como resultado, os processos podem parar.

9
Wim Coenen

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

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

5
xenoterracide