O que são shmpages em termos leigos?

6

O que exatamente é shmpages no grande esquema da terminologia de kernel e memória. Se eu estou atingindo um shmpages limite, o que isso significa?

Também estou curioso para saber se isso se aplica a mais do que o linux

    
por xenoterracide 07.01.2011 / 05:58

1 resposta

10

Processos de modo de usuário podem usar comunicação entre processos (IPC) para se comunicar, o método mais rápido de conseguir isso é usando páginas de memória compartilhada ( shmpages ). Isto acontece por exemplo se banshee toca música e vlc reproduz um vídeo, ambos os processos têm que acessar pulseaudio para produzir algum som.

Tente descobrir mais sobre configuração e uso de memória compartilhada com alguns dos seguintes comandos:

Exibe a configuração da memória compartilhada:

sysctl kernel.shm{max,all,mni}

Por padrão (Linux 2.6), isso deve dar saída:

kernel.shmmax = 33554432
kernel.shmall = 2097152
kernel.shmmni = 4096

shmmni é o número máximo permitido de segmentos de memória compartilhada, shmmax é o tamanho permitido de um segmento de memória compartilhada (32 MB) e shmall é o tamanho total máximo de todos os segmentos (exibido como páginas, traduz para 8 GB)

A memória compartilhada usada atualmente:

grep Shmem /proc/meminfo

Se ativado pela distribuição:

ls -l /dev/shm

ipcs é uma ótima ferramenta para descobrir mais sobre o uso do IPC:

ipcs -m 

produzirá o uso da memória compartilhada, você poderá ver os segmentos alocados com os tamanhos correspondentes.

ipcs -m -i <shmid>

mostra mais informações sobre um segmento especificado, incluindo o PID da criação do processo (cpid) e o último (lpid) que o utiliza.

ipcrm pode remover segmentos de memória compartilhada (mas esteja ciente de que eles só serão removidos se nenhum outro processo estiver anexado a eles, consulte a coluna nattach em ipcs -m ).

ipcrm -m <shmid>

A falta de memória compartilhada pode ser um programa que utiliza muito memória compartilhada, um programa que não separa os segmentos alocados adequadamente, modificou sysctl valores, ...

Isso não é específico do Linux e também se aplica a sistemas UNIX (a maioria) (a memória compartilhada apareceu pela primeira vez em CB UNIX ) .

    
por 07.01.2011 / 15:25