O que são 'segmentos' versus 'páginas' da memória compartilhada do Linux?

2

Os documentos do kernel Linux dizem:

shmall:

This parameter sets the total amount of shared memory pages that can be used system wide. Hence, SHMALL should always be at least ceil(shmmax/PAGE_SIZE).

Mas não consigo encontrar uma definição para page . shmmax , por sua vez, define o tamanho máximo de um segmento de memória compartilhada. Então eu não entendo este parágrafo nem a parte ceil(shmmax/PAGE_SIZE) .

(Estou pesquisando isso para determinar como configurar meu servidor para postgres.)

    
por Dogweather 15.11.2013 / 00:28

1 resposta

1

Página: Um comprimento fixo de bloco contíguo de memória virtual .

Segmento: um segmento é sua interface na memória compartilhada. Um segmento é composto de uma ou mais páginas. Se você (ou seu processo) não criou um segmento, não está usando memória compartilhada.

ceil: AKA 'teto'. Uma função matemática bem definida que retorna o próximo inteiro mais alto (também conhecido como arredondamento). Veja Wikipedia: Funções de piso e teto

PAGE_SIZE é o número de bytes que o SO está usando para dividir seus 'pedaços de memória'. Você pode encontrar o tamanho com o getconf:

# getconf PAGE_SIZE
PAGE_SIZE                          4096

shmmax é o tamanho máximo de qualquer segmento individual em bytes (não em páginas).

O shmall precisa ser pelo menos 'ceil (shmmax / PAGE_SIZE)' porque se fosse menos você não poderia criar um segmento com tamanho shmmax. Você ficaria sem páginas para usar.

Digamos que você queira usar no máximo 8MiB (sendo o MB base 10, o MiB - mebibytes sendo a base 2, o que seu computador realmente usa ao calcular os tamanhos) para a memória compartilhada no sistema.

Para encontrar o número de páginas 8MiB você simplesmente divide por PAGE_SIZE.

8MiB / 4096 bytes = 2048 .

Defina shmall para 2048.

Agora, digamos que você saiba que precisa apenas de um único segmento com 512K (KiB, não KB) de tamanho para postgres. Você tem todos os dados para calcular o número mínimo para o qual você deve configurar o shmall.

ceil (512KiB / 4096 bytes) = 128

O menor que você deve definir shmall seria 128 páginas. Não há nada que o impeça de configurá-lo mais alto. Shmall é simplesmente um limite que especifica que você não usará mais do que essa quantidade de memória para memória compartilhada, haja um segmento ou dez.

    
por 15.11.2013 / 03:37