[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: inode_cache / dentry_cache not being reclaimed aggressivelyenough on low-memory PCs


On Sat, 3 Jan 2004, John Lash wrote:

> Check on your system, /proc/sys/fs/dentry-state, first two values appear
> to be nr_dentry and nr_unused. Plug those values into the above code and
> if you get something around zero, that's why the memory is stuck.

Right, I put together this simple C program as follows:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
        int dentries_used, dentries_unused;
        int inodes_used, inodes_unused;
        int ratio = 1, used;
        char entries[80];
        FILE *fh;

        fh = fopen("/proc/sys/fs/dentry-state", "r");
        fgets(entries, 4096, fh);
        fclose(fh);

        dentries_used = atoi(entries);
        dentries_unused = atoi(&entries[6]);

        printf("nr_dentry: %d\nnr_unused: %d\n\n", dentries_used, dentries_unused);

        used = dentries_used - dentries_unused;
        printf("%d < %d * %d = %d\n", dentries_unused, used, ratio, (dentries_unused < used * ratio));

        return 0;
}

This gives me interesting results:

1) On a box with humuguous dentries:
./fs_cache 
nr_dentry: 76637
nr_unused: 67869

67869 < 8768 * 1 = 0

2) On a box with not so many:
./fs_cache
nr_dentry: 7950
nr_unused: 572

572 < 7378 * 1 = 1

So it seems you're quite right.

> A couple of solutions come to mind. The one I like best would be to
> adjust the above code to make it conscious of the total memory in the
> system and keep nr_unused to a reasonable percentage. Another is to
> allow unused_ratio to be less than 1, Possibly some/proc entry to lower
> it (.5, .25, whatever), or to avoid the float, provide another parameter
> to do an integer divisor for unused_ratio. Something like:
> 
> 	nr_unused - nr_used * unused_ratio / ratio_fraction

That solution does seem be the best answer.

-- 
http://www.munted.org.uk

Your mother cooks socks in hell
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo _at_ vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
Follow-Ups: References: