Uma das respostas para Preciso de espaço de troca se tiver uma quantidade de RAM suficiente? me fez pensar se existe alguma relação entre a fragmentação da memória medida por cat /proc/buddyinfo
e se a troca está ou não em uso. Para ser mais específico, gostaria de saber se a utilização de swap pode reduzir a fragmentação da memória. Durante um dia normal de trabalho com troca no meu sistema, tenho o seguinte:
tvbox@tvbox-G31M-ES2L:~$ cat /proc/buddyinfo
Node 0, zone DMA 3 3 4 14 16 6 2 0 0 1 0
Node 0, zone Normal 1564 1052 462 356 240 109 33 21 6 1 0
Node 0, zone HighMem 43 1972 839 285 183 109 98 34 16 0 0
tvbox@tvbox-G31M-ES2L:~$ free
total used free shared buffers cached
Mem: 2053888 1821904 231984 171376 299908 812940
-/+ buffers/cache: 709056 1344832
Swap: 0 0 0
Nota: este sistema possui um tempo de atividade que nunca excede 18 horas.
Em um sistema mais utilizado, tenho o seguinte:
me@me-zippy:~$ cat /proc/buddyinfo
Node 0, zone DMA 149 106 70 26 15 5 4 0 0 2 0
Node 0, zone Normal 2455 3527 4651 1421 367 157 61 19 14 3 0
Node 0, zone HighMem 7 43 75 266 166 162 91 43 27 0 0
me@me-zippy:~$ free -h
total used free shared buffers cached
Mem: 7.4G 7.0G 351M 281M 116M 6.0G
-/+ buffers/cache: 967M 6.4G
Swap: 0B 0B 0B
me@me-zippy:~$ uptime
12:01:49 up 3 days, 3:20, 2 users, load average: 0.52, 0.23, 0.17
Você notará que nenhum desses sistemas tem a troca ativada.
Respostas:
A troca permite que as páginas físicas sejam movidas, no sentido de que uma página usada para uma finalidade pode ter seu conteúdo trocado e usado para outra finalidade.
Sob um sistema de gerenciamento de memória virtual de grande variedade, não existe fragmentação da memória física no que diz respeito aos aplicativos. Cada página alocada por um aplicativo pode ser acessada em qualquer lugar da memória física; não há motivo para que duas páginas consecutivas na memória virtual precisem ter uma proximidade específica na memória física.
Há muitos casos em que a fragmentação da memória é uma preocupação: quaisquer circunstâncias em que a localização da memória física seja importante. Isso inclui:
Na ausência de cenários "complexos", a fragmentação da memória física pode causar problemas na conexão de um novo dispositivo que requer um pool de memória contígua (o kernel mantém esses pools para isso, mas eles podem precisar ser aumentados se um driver repentinamente fizer uma grande solicitação). Se o uso do dispositivo for constante, a fragmentação física não importaria e, em particular, não faria com que um aplicativo fosse executado mais lentamente ou sem espaço.
É possível que a fragmentação do espaço de endereço físico possa levar ao uso de mais memória no kernel para representar a lista livre. Não acredito que seja esse o caso do Linux, mas estou longe de ser um especialista em gerenciamento de memória.
Resumindo, permitir a troca de parte de um aplicativo não permite que esse aplicativo aloque mais memória, mas pode permitir que alguns drivers de hardware aloquem a memória necessária.
A adição de troca não tem efeito no espaço de memória virtual do aplicativo. Afinal, esse é o ponto de troca - é transparente para os aplicativos.
No entanto, é possível que adicionar swap a uma máquina tenha uma influência indireta na fragmentação dentro do espaço de memória virtual de um aplicativo. Se o sistema ficar sem memória virtual, o aplicativo terá que se contentar com o que possui. Se o aplicativo estiver usando a maior parte da memória alocada no sistema operacional, isso com o tempo causará fragmentação dentro desse espaço, à medida que pequenos blocos são liberados aqui e ali. Se o aplicativo tiver mais memória virtual (algumas das quais trocadas), isso dará ao gerenciador de memória mais espaço de manobra e reduzirá o risco de que o aplicativo fique sem memória, com três blocos separados de 2kB disponíveis quando ele deseja um único Objeto de 4kB.
fonte