OpenVZ Forum


Home » International » Russian » Странный рост показаний счётчика dcachesize
Re: Странный рост показаний счётчика dcachesize [message #48517 is a reply to message #48488] Fri, 19 October 2012 13:38 Go to previous messageGo to previous message
kir is currently offline  kir
Messages: 1645
Registered: August 2005
Location: Moscow, Russia
Senior Member

Я наконец разобрался в этом вопросе и смогу популярно объяснить, что это и зачем и почему.

dcachesize контролирует размер dentry и inode кешей.

Про dentry кеш. Когда кто-то открывает какой-нибудь файл, скажем, /var/log/httpd/access_log, в dentry кеше появляются объекты для /, var, log, httpd и для access_log, то есть пять штук (впрочем, / там уже скорее всего есть). Соответственно, когда в следующий раз кто-то будет смотреть в /var/log/httpd/access/log (или просто в /var) -- ядро будет использовать этот кеш. Второе открытие (или stat, например) того же самого файла не будет приводить к увеличению кеша -- там все эти объекты уже есть.

К примеру, можно «вырастить» размер dcache командой ls -lR /, которая по-stat()-ает все имеющиеся файлы. Если запустить ls -lR / сразу ещё раз, dcache уже не подрастёт. Для обычного контейнера значение будет несколько десятков мегабайт.

Отсюда у юношей, обдумывающих житьё, возникает справедливый и каверзный вопрос -- а как тогда удаётся подрастить dcache до ужасающих значений в 12 гигабайта, если в системе нет такого количества файлов? Ага! Бага!! БАГА!!!

Нет, не бага. Дело в том, что от файла, которого НЕТ, dentry тоже кешируется (чтобы в следующий раз быстрее ответить на вопрос, есть ли такой файл). Теперь, если создавать и удалять много временных файлов (впрочем, достаточно просто генерировать рандомное имя файла и делать на него stat() или access() или open()), то можно вырастить dcache до упора.

«Упором» в данном случае может являться
-- barrier/limit бинкаунтера dcachesize в конкретном контейнере
-- barrier/limit бинкаунтера kmemsize (в него включается dcachesize)
-- limit бинкаунтера physpages (на 042stab ядре в него включается kmemsize)
-- объём свободной памяти в системе

Обычно на vswap-enabled конфигах упором является physpages или объём свободной памяти. В вашем случае, судя по всему, памяти в системе много, и кто-то делает что-то вроде создания/удаления временных файлов, вот кеш и вырастает до максимально возможного размера. Это абсолютно нормальное, правильное и разумное поведение системы.

Дальше, если памяти хватать не будет, кеш уменьшится в объёме, ядро само подропает наиболее редко используемые объекты кеша.

Это такая теория. Практика чуть позже.


Kir Kolyshkin
http://static.openvz.org/userbars/openvz-developer.png
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: После сбоя питания не поднимается контейнер KVM
Next Topic: Проблемы с пробросом сетевых карт intel pro 100
Goto Forum:
  


Current Time: Thu Jul 03 22:06:04 GMT 2025

Total time taken to generate the page: 0.02464 seconds