Как я могу измерить отток кэша диска в Linux? [дубликат]

Можно ли увидеть в Linux, сколько запросов на чтение и запись из пользовательского пространства в конечном итоге вызывают попадания в кеш и пропуски блочных устройств?

20
задан 5 July 2010 в 18:43
2 ответа

Теперь есть утилита cachestat из пакета perf-tools.

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

A) Изучите скорость пропуска страниц в кэше с помощью iostat(1) для мониторинга чтения с диска, и предположим, что это пропуски в кэше, а не, например, O_DIRECT. Скорость промахов обычно более важная метрика, чем соотношение, так как промахи пропорциональны боли приложения. Также используйте free(1), чтобы увидеть размеры кэша.

B) Бросьте кэш страниц (echo 1 > /proc/sys/vm/drop_cache), и измерьте, насколько производительность ухудшается! Мне нравится использовать отрицательный эксперимент, но это, конечно, болезненный способ пролить свет на использование кэша.

C) Используйте sar(1) и изучайте мелкие и крупные неисправности. Не думаю, что это сработает (например, обычный ввод/вывод).

D) Используйте скрипт cache-hit-rate.stp SystemTap, который является вторым номером в Интернет-поиске по соотношению хитов кэша страниц Linux. Он утилизирует доступ к кэшу высоко в стеке, в VFS-интерфейсе, так что чтение на любую файловую систему или устройство хранения может быть просмотрено. Пропуски в кэше измеряются через дисковый ввод/вывод. Это также пропускает некоторые типы рабочих нагрузок (некоторые из них упоминаются в "Уроках" на этой странице), и соотношение вызовов "скорость".

2
ответ дан 4 January 2021 в 07:37

Если вас интересует соотношение хит/мисс ввода-вывода конкретного процесса, простым, но очень эффективным подходом является чтение файла /proc//io.

Здесь вы найдете 4 ключевых значения:

  • rchar: общее количество прочитанных байтов с точки зрения применения (т.е. без разницы между прочтением, выполненным из физического хранилища, а не из кэша)
  • wchar: как было сказано выше, но о байтах
  • read_bytes: байты действительно считываются из подсистемы хранения
  • write_bytes: байты really записанные в подсистему хранения

скажем, процесс имеет следующие значения:

rchar: 1000000
read_bytes: 200000

Коэффициент пропуска прочитанного кэша (в байтах) равен 100*200000/1000000 = 20%, а коэффициент попадания равен 100-20 = 80%

Тем не менее, есть улов: значение rchar включает вещь как tty IO, так что для процессов, которые много читают/записывают из/в трубу, вычисление, приведенное выше, будет искажено, сообщая о более высоком коэффициенте попадания, чем эффективный.

1
ответ дан 4 January 2021 в 07:37

Теги

Похожие вопросы