Por que a troca é usada quando muita memória ainda está livre? [duplicado]

7

No servidor Linux Kernel (Red Hat) abaixo, 2.6.18, há muita memória livre, mas vejo que alguma troca é usada. Eu sempre pensei em swap como um estouro quando a memória foi esgotada. Por que trocar com cerca de 7 GB (50%) de memória livre? Swappiness é 60 (padrão).

Saída do Meminfo:

MemTotal:     16436132 kB
MemFree:       7507008 kB
Buffers:        534804 kB
Cached:        2642652 kB
SwapCached:      39084 kB
Active:        6001828 kB
Inactive:      2532028 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:     16436132 kB
LowFree:       7507008 kB
SwapTotal:     2097144 kB
SwapFree:      1990096 kB
Dirty:             236 kB
Writeback:           0 kB
AnonPages:     5353644 kB
Mapped:          45764 kB
Slab:           330660 kB
PageTables:      34020 kB
NFS_Unstable:        0 kB
Bounce:              0 kB
CommitLimit:  10315208 kB
Committed_AS: 14836360 kB
VmallocTotal: 34359738367 kB
VmallocUsed:    264660 kB
VmallocChunk: 34359472735 kB
HugePages_Total:     0
HugePages_Free:      0
HugePages_Rsvd:      0
Hugepagesize:     2048 kB
    
por Gregg Leventhal 04.04.2014 / 19:29

1 resposta

12

Trocar somente quando não há memória livre é o caso apenas se você definir swappiness para 0. Caso contrário, durante o tempo ocioso, o kernel trocará a memória. Ao fazer isso, os dados não são removidos da memória, mas uma cópia é feita na partição swap.

Isso significa que, caso surja uma situação em que a memória esteja esgotada, ela não precisará gravar no disco ali e ali. Neste caso, o kernel pode simplesmente sobrescrever as páginas de memória que já foram trocadas, para as quais ele sabe que possui uma cópia dos dados.

O parâmetro swappiness basicamente controla o quanto isso é feito.

    
por 04.04.2014 / 20:01