Q1: On Linux, when I create a new file and open it, an entry about it is created in the dcache's hash table, right?
Correto.
Q2: How long does that entry stay there?
Até que o espaço que eles ocupam seja necessário para algum outro propósito.
Q3: If the latter is the case, how exactly does the kernel determine which entries to remove when the dcache is full?
A partir da documentação do kernel do Linux em memória virtual (VM) :
trecho
vfs_cache_pressure
Controls the tendency of the kernel to reclaim the memory which is used for caching of directory and inode objects.
At the default value of
vfs_cache_pressure=100
the kernel will attempt to reclaim dentries and inodes at a "fair" rate with respect to pagecache and swapcache reclaim. Decreasingvfs_cache_pressure
causes the kernel to prefer to retain dentry and inode caches. Whenvfs_cache_pressure=0
, the kernel will never reclaim dentries and inodes due to memory pressure and this can easily lead to out-of-memory conditions. Increasing vfs_cache_pressure beyond 100 causes the kernel to prefer to reclaim dentries and inodes.
Então, para responder à sua pergunta geral, dentries
permanecerá em cache até que o espaço ocupado por eles seja necessário por outra coisa
Notas adicionais
Essa filosofia é permeada por todo o kernel. Não há razão para liberar memória RAM, até que seja uma necessidade real de fazê-lo. Se você gostaria de analisar o conteúdo do cache ou soltar as dentries, dê uma olhada em seu Q & A intitulado: Existe alguma maneira ou ferramentas para despejar o cache de memória e buffer? .