Existe alguma relação entre fragmentação de memória e se a troca está ativada ou não em um sistema?

8

Uma das respostas a Preciso de espaço de troca se eu tiver uma quantidade de memória RAM suficiente? me perguntando se existe alguma relação entre fragmentação de memória medida por cat /proc/buddyinfo e se ou não swap está em uso. Para ser mais específico, estou me perguntando se a utilização de swap pode reduzir a fragmentação da memória. Durante um dia normal de trabalho com swap off no meu sistema eu tenho isso:

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 tem um tempo de atividade que nunca excede as 18 horas.

Em um sistema mais utilizado, tenho isto:

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.

    
por Elder Geek 20.03.2015 / 02:57

1 resposta

3

A troca permite que as páginas físicas sejam movidas, no sentido de que uma página usada para uma finalidade poderia ter seu conteúdo trocado e usado para outra finalidade.

Em um sistema de gerenciamento de memória virtual com variedade de jardins, não há fragmentação de memória física no que diz respeito a aplicativos. Cada página alocada por um aplicativo pode ser levada para qualquer lugar na memória física, não há razão para que duas páginas consecutivas na memória virtual precisem ter alguma proximidade particular na memória física.

Existem muitos casos em que a fragmentação da memória é uma preocupação: quaisquer circunstâncias nas quais a localização da memória física é importante. Isso inclui:

  • Paravirtualização , em que as máquinas virtuais decidem quem é o proprietário da página física com granularidade mais grosseira do que uma página.
  • Da mesma forma, clusters , onde vários nós compartilham o mesmo pool de RAM.
  • Memória usada pelos periféricos, o que geralmente requer grandes buffers contíguos.
  • Otimizações como páginas enormes .

Na ausência de cenários “complexos”, a fragmentação da memória física pode causar problemas ao conectar um novo dispositivo que requer um pool de memória contígua (o kernel mantém esses pools para isso, mas eles precisam ser ampliados se um driver repentinamente faz um grande pedido). 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 seja executado mais lentamente ou fique sem espaço.

É possível que a fragmentação do espaço de endereço físico possa levar a mais memória sendo usada no kernel para representar a lista livre. Eu não acredito que este seja o caso no Linux, mas estou longe de ser um especialista em seu gerenciamento de memória.

Para resumir, permitir que parte de um aplicativo seja permutado não permite que esse aplicativo aloque mais memória, mas pode permitir que alguns drivers de hardware aloquem a memória de que precisam.

Adicionar swap não tem efeito no espaço da memória virtual do aplicativo. Esse é o ponto de troca, afinal de contas - é transparente para aplicativos.

No entanto, é possível que a adição de swap a uma máquina teria 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 que alocou do sistema operacional, isso causará fragmentação dentro do espaço, à medida que pequenos blocos forem liberados aqui e ali. Se o aplicativo tiver mais memória virtual (algumas das quais são trocadas), isso dará ao gerenciador de memória mais espaço para manobrar e reduzirá o risco de que o aplicativo fique sem memória, com três blocos separados de 2kB disponíveis quando quiser um único. Objeto de 4kB.

    
por 21.03.2015 / 00:17

Tags