Kernel Linux: Maiores pedaços de swap-in

3

Eu fiquei muito feliz com a suspensão para o disco. Mas ficando mais e mais RAM, isso não está realmente funcionando tão bem quanto costumava.

Suspender para o disco funciona bem: leva um minuto ou 2, que é o que eu esperaria, dado o desempenho de meus discos.

O problema é acordar após a suspensão: o disco demora uma eternidade para procurar, e ele lê apenas uma única página, resultando em uma taxa de entrada de menos de 1 MB / s.

Existe alguma maneira de eu pedir ao kernel para ler o próximo, digamos, 10 MB e oportunistamente trocar isso - em vez de apenas ler uma única página?

Se apenas uma única página dos 10 MB fosse necessária em breve, então não seria desperdiçada. E mesmo que a maioria dos 10 MB não seja necessária, as páginas continuarão limpas e podem ser simplesmente recuperadas como páginas livres - a cópia trocada não é tocada.

Exemplo

Isso ocupa 6,5G de RAM, usa essa memória ativamente e usa um núcleo completo em 100%:

perl -e 'while(1){for(1..25000000){$t{$_}++}}'

Antes de suspender para o disco:

             total       used       free     shared    buffers     cached
Mem:       8074280    7876864     197416      93460     169524     625912
-/+ buffers/cache:    7081428     992852
Swap:      8282108          8    8282100

A suspensão para o disco leva: 7m10s

O desempenho bruto do disco é de 50 MB / s.

Continuando do disco para quando a exibição está em execução, leva: 0m32s

Mas antes que o sistema reaja às teclas pressionadas, ele tem que trocar por um adicional: 2m02s

Neste momento, o uso da memória é assim:

             total       used       free     shared    buffers     cached
Mem:       8074280    2846392    5227888      74232       8312     157588
-/+ buffers/cache:    2680492    5393788
Swap:      8282108    5103264    3178844

Observe que o 6.5G completo que o programa perl usa não é trocado. Ele precisa de 4 a 5 GB a mais.

vmstat 1 informa que o sistema está trocando a uma taxa de 600 KB / s:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 0  2 3506124 1525652  27732 274036  632    0   632     0  228  740  6  1 50 44  0

iostats informa que o disco está a 100% de utilização de E / S (provavelmente devido a procurar o tempo todo).

O programa perl usa em torno de 0,3% da CPU, porque toda vez que faz alguma coisa, causa uma falha na página.

Continua a trocar por outro: 1h15m12s

E, finalmente, o programa perl é completamente trocado e pode ser executado 100% novamente.

Então, o que eu gostaria, em vez disso, é que o swap em muito seja menor. E uma das maneiras de fazer isso é aumentar os 600 K / s trocando 10 MB de cada vez, em vez de apenas um único quadro de página.

Mas talvez haja outros parâmetros de ajuste, que farão a troca acontecer mais rapidamente.

( swapoff -a seria uma opção no meu caso - troca 10 MB / s, mas não funciona, se houver mais de 8 GB trocados e, portanto, não é uma solução geral). / p>     

por Ole Tange 12.10.2016 / 01:38

0 respostas