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

19

Eu nunca entendi muito bem por que a alta E / S de disco diminuiu muito o sistema. É estranho para mim, porque eu esperaria que o slow-down afetasse apenas os processos dependentes dos dados do disco rígido / óptico, mas o slow-down afeta até mesmo o material carregado na RAM. Estou aqui referindo-me a iowait .

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

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

    
por Tshepang 10.01.2011 / 18:15

2 respostas

9

Os sistemas operacionais fazem uso da 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 essa página de memória virtual é 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 armazenamento em cache do sistema de arquivos. Durante a atividade do sistema de arquivos, o kernel armazenará 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 da página aumentarão. Além disso, há menos largura de banda de E / S de disco disponível para mover páginas de memória de e para o disco. Como resultado, os processos podem parar.

    
por 10.01.2011 / 20:30
5

Tanto quanto eu entendo, IOwait significa que um processo, não o processador, está esperando que o IO fique 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, em seguida, o disco precisará ser lido. Quando vários outros precisam ser lidos do que o disco pode ser rápido o suficiente, você acaba esperando o processador. O modo como é decidido quem consegue ler / gravar no disco é determinado pelo agendador de blocos, na maioria dos casos agora CFQ. Se você estiver usando o CFQ e precisar de um processo para usar menos do tempo geral de IO para aumentar a capacidade de resposta do sistema, use ionice -c3 <processid> . Isto diz ao sistema para dar somente este processo IO somente quando nada mais precisar.

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

    
por 11.01.2011 / 11:23