O que heurística em Overcommit_memory = 0 significa?

1

Eu li os documentos do man proc. Quando se trata do overcommit_memory, a heurística em overcommit_memory = 0 não é bem entendida. O que as heurísticas realmente significam?

faz "chamadas de mmap (2) com MAP_NORESERVE não estão marcadas" significa que o Kernel apenas aloca memória virtual sem estar ciente da existência de espaço de troca?

 This file contains the kernel virtual memory accounting mode.  Values are:

                     0: heuristic overcommit (this is the default)
                     1: always overcommit, never check
                     2: always check, never overcommit

              In mode 0, calls of mmap(2) with MAP_NORESERVE are not checked, and the default check is very weak, leading to the  risk
              of getting a process "OOM-killed".

Além das perguntas anteriores, o esgotamento do espaço de endereço virtual causa o OOM, independentemente da memória física restante suficiente.

Obrigado.

    
por Jepsenwan 13.07.2017 / 11:06

1 resposta

4

A configuração overcommit_memory é levada em conta em três locais no subsistema de gerenciamento de memória.

  1. O principal deles é __vm_enough_memory em mm/util.c , que decide se há memória suficiente disponível para permitir que uma alocação de memória continue (observe que essa é uma função de utilidade que não é necessariamente invocada). Se overcommit_memory for 1, essa função sempre será bem-sucedida. Se é 2, verifica a memória disponível real. Se é 0, usa a famosa heurística que você menciona; que procede da seguinte forma:

    • conta o número de páginas gratuitas
    • adiciona o número de páginas lastreadas em arquivos (elas podem ser recuperadas)
    • remover páginas usadas para memória compartilhada
    • adicionar páginas de troca
    • adicionar páginas recuperáveis
    • conta para páginas reservadas
    • deixe alguma memória para o root (se a alocação não estiver sendo feita por um processo cap_sys_admin )

    O total resultante é usado como o limite para alocações de memória.

  2. mmap também verifica a configuração: MAP_NORESERVE é honrado se permissão excessiva for permitida (modos 0 e 1) e resultar em alocações sem troca de apoio ( VM_NORESERVE ). Neste caso particular, o modo 0 é efetivamente equivalente ao modo 1; isso é o que “chamadas de mmap(2) com MAP_NORESERVE não são verificadas” está se referindo a: significa que MAP_NORESERVE mmap chamadas sempre serão bem-sucedidas e a superalocação resultará na invasão de OOM-killer após o fato, ou uma violação de segmento quando uma gravação é tentada.

  3. shmem tem um comportamento semelhante ao mmap .

A falta de espaço de endereço deve causar falhas de alocação, não as mortes por OOM, pois a alocação não pode continuar.

    
por 13.07.2017 / 11:56