Назад | Перейти на главную страницу

Определение производительности дискового кеша в Linux 2.6.32+

Я надеюсь найти хорошие методы (просмотрев / proc) или хорошие инструменты, которые я могу использовать для определения эффективности дискового кеша. Я хотел бы иметь возможность определить, какая часть оперативной памяти, используемой в дисковом кэше, активно используется. Я надеюсь получить лучшее представление об использовании дискового кеша, чтобы более точно приобрести оперативную память для будущих серверов.

В идеале, что-то, что я хотел бы увидеть (хотя я не ожидаю такого уровня детализации), это какой-нибудь отчет вроде этого (или способ составить этот отчет сам):

1.4GB of RAM is used in the disk cache which is used for 10 IO requests per second
2.3GB of RAM "" "" for 2 requests per second
5.3GB of RAM "" "" is basically never used

Я не думаю, что можно собрать такую ​​информацию. Память на самом деле не используется для обработки запросов. Может быть только один запрос на отображение страницы в памяти, а затем она может использоваться в течение долгого времени, при этом система не знает, сколько она используется, за исключением периодического зондирования для поиска устаревшей памяти.

Кроме того, обоснование запроса ошибочно. Даже если большая часть кеша никогда не используется, скорость попадания в используемую часть все равно определяется объемом имеющегося кеша.

Приведу аналогию. Допустим, существует 20 различных видов мячей, и вы можете иметь 18 из них на складе. Если вы кешируете случайным образом, есть вероятность 18/20, что у вас будет мяч, который кому-то нужен. Так что, если кто-то попросит у вас конкретный мяч, а он у вас есть, будет использована только 1/18 ваших мячей. Но у вас будет 18/20 шансов получить этот мяч, потому что остальные 17 мячей остаются неиспользованными.

Таким образом, количество, используемое для обслуживания запросов, на самом деле не является правильным измерением.

На самом деле система не хранит достаточно информации, чтобы вы могли понять, насколько хорошо работал бы кеш, будь он другого размера.

Обновить: Позвольте мне еще раз попытаться объяснить, почему это не сработает. Вы пытаетесь сделать вывод из того факта, что 5 ГБ ОЗУ использовалось для кеша, к которому не было доступа, что система работала бы примерно так же, если бы у нее было на 5 ГБ меньше ОЗУ. Но это совершенно неверно.

Скажем, у вас книжный магазин. Вы замечаете, что в конкретный месяц вы продаете только 10% своего инвентаря. Вы думаете: «Какая трата. 90% моих книг просто лежат неиспользованными. Мне не нужно держать такой большой инвентарь». Так вы уменьшите свои запасы на 90%. Как ты думаешь, что произойдет?

Да, после тот факт, что вы видите, что многие из ваших запасов не были проданы. Но с гораздо меньшими запасами большинство ваших клиентов не нашли бы нужную книгу в инвентаре. Знание постфактум, какие книги не продаются, не означает, что вы могли обойтись меньшими запасами до того, как вы узнали, какие книги люди захотят, а какие нет.

Таким образом, даже если бы желаемая информация была доступна, она не позволила бы вам сделать вывод, который вы хотите сделать. Вам нужно будет сохранить достаточно информации, чтобы запустить симуляцию и сказать - если бы я сохранил в памяти меньше вещей, что бы я сохранил? И, таким образом, была бы у меня информация, которой позже воспользовались?

Таким образом, даже если в конечном итоге используется только небольшой объем данных в кеше, если вы не могли предсказать который информация, вы не можете сделать вывод, что остальная часть кеша не оказала существенного влияния на производительность, позволяя вам хранить в памяти данные, которые был используемый.