Dúvida sobre o mmap

3

Estou tentando construir um pacote de cache para o golang que depende do mmap para armazenar grandes quantidades de conteúdo na memória, até mais do que o sistema. O cache não precisa ser persistente; toda vez que o aplicativo é executado, ele carrega o cache de redis.

Mas o que acontece quando o programa ultrapassa o limite máximo de memória física? As próximas alocações acontecem do disco? Se o kernel recuperar a memória do mamp, o que acontece com o conteúdo? Vai embora? Preciso fsync o mmap para o disco para evitar esse tipo de coisa? Ou o kernel faz isso automaticamente?

    
por Diego Bernardes 08.08.2016 / 02:44

1 resposta

2

Quando você ficar sem memória física, o sistema iniciará a remoção de algumas páginas de memória acessadas menos recentemente para a partição de troca. Normalmente, cabe ao kernel selecionar quais páginas são essas. Eles podem não ser suas páginas, mas sim pertencer a outro processo que não é usado há algum tempo.

Se você quiser se intrometer, pode usar o madvise (2) syscall para informar seu kernel sobre o seu estratégias de uso de memória para que possa se adaptar adequadamente.

    
por 08.08.2016 / 03:13