Limita o cache de inode usado por um comando

6

Eu quero executar uma tarefa com limites nos objetos do kernel que eles irão disparar indiretamente. Note que isto não é sobre a memória, threads, etc. usados pelo aplicativo, mas sobre a memória usada pelo kernel. Especificamente, quero limitar a quantidade de cache de inode que a tarefa pode usar.

Meu exemplo motivador é updatedb . Ele pode usar uma quantidade considerável de cache de inode, para coisas que não serão mais necessárias depois. Especificamente, desejo limitar o valor indicado pela linha ext4_inode_cache em /proc/slabinfo . (Observe que isso não está incluído nas linhas “buffers” ou “cache” mostradas por free : isso é apenas cache de conteúdo de arquivo, o conteúdo da laje é memória do kernel e registrado na coluna “used”.)

echo 2 >/proc/sys/vm/drop_caches depois libera o cache, mas isso não me faz bem: as coisas inúteis deslocaram coisas que eu queria manter na memória, como a execução de aplicativos e seus arquivos usados com frequência.

O sistema é Linux com um kernel recente (≥ 3.8). Eu posso usar o acesso root para configurar as coisas.

Como posso executar um comando em um ambiente limitado (um contêiner?) de forma que a contribuição desse ambiente para o cache de inode (ext4) seja limitada a um valor que eu configure?

    
por Gilles 10.05.2015 / 22:37

1 resposta

2

Se você olhar o código fonte do inode do kernel , você pode ver que o ihash_entries é definido apenas no nível do kernel.

Não há considerações de nível de usuário ou processo. Adicioná-los pode reduzir drasticamente o desempenho, o que seria contraproducente.

Isso também implica manter um registro de todos os processos que usaram as entradas em cache, portanto, usar mais memória para fazer isso.

A conclusão é que simplesmente não é possível com o kernel atual, nem seria uma boa ideia implementá-lo.

    
por 28.04.2016 / 08:38