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

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: