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.
linux
kernel
performance
io
tshepang
fonte
fonte
Respostas:
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.
fonte
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.
fonte