inode/dentry cache - как управлять размером?
А вот не подскажет ли глубокоуважаемая общественность как управлять
размерами кэша inode/dentry?
Задача у меня такая - есть средних размеров дерево (137424 файлов в
11953 каталогах) и нужно суметь быстро его обойти и вызвать stat для
каждого файла. Если подробнее, то это будет делать это будет rsync и
время этого обхода - суть время нашего даунтайма, так что хочется
побыстрее.
Данные меняются редко, памяти много, так что кэш inode/dentry
замечательно работает на приблизительно четверти этого дерева (то есть
первый обход занимает ~15 минут, а второй и последующие - около
секунды). Увы, с полным деревом такой трюк уже не проходит: не
помещаемся в кэш.
Обыск гугля подсказал, что
1. размеры ядерных кешей в можно посмотреть в /proc/slabinfo.
там же можно подкрутить некие не сильно внятные tunable parameters
<limit>, <batchcount> и <sharedfactor>
2. сбросить интересующие меня кеши можно командой "echo 2 >
/proc/sys/vm/drop_caches" (это
работает, последующие проходы занимают час снова).
3. есть slabtop, который показывает информацио о slab-ах чуть-чуть
поудобнее.
4. есть /proc/sys/vm/vfs_cache_pressure, с помощью которого можно
сказать что в случае выбрасывания кэшей сначала надо выбросить page
cache, а потом inode/dentry cache - или наоборот.
В общем, я могу смотреть на состояние кэшей, сбрасывать их и
подкручивать параметры сбрасывания. Не могу только сказать "ребята, у
меня 4G памяти - и вот сейчас мне не жалко 1G на этот кэш".
Отсюда вопрос: не подскажет ли глубокоуважаемая общественность как управлять
размерами кэша inode/dentry?
Ядро 2.6.18.
Reply to: