Отслеживание блоков пройти через L2ARC в ZFS на Solaris с помощью dtrace

Мы с коллегой пытаемся отследить чтение / запись в L2ARC в OpenZFS. Нам нужны смещения блоков, тип ввода-вывода (чтение / запись) и идентификаторы устройств запросов. Обратите внимание, что нам не нужно смещение в устройстве L2ARC, но нам нужно смещение / идентификатор устройства от исходного устройства хранения, чтобы смоделировать, какие блоки хранения проходят через кеш L2ARC.

Просмотр исходного кода OpenZFS (github.com/openzfs/openzfs/blob/master/usr/src/uts/common/fs/zfs/arc.c) и использование учебника Брендана по dtrace (dtrace.org/blogs/brendan / 2012/01/09 / activity-of-the-zfs-arc)

Мы полагаем, что структура arc_buf_hdr_t содержит информацию, которую мы ищем. Точнее, поле dva_t b_dva; содержит смещение и идентификатор устройства нижележащего запоминающего устройства, и мы можем получить доступ к экземпляру arc_buf_hdr_t (имя переменной hdr ) через событие зондирования arc__miss dtrace. Это дает нам чтение L2ARC, но записи труднее получить. А именно, событие зондирования l2arc__write dtrace не имеет доступа к этому hdr , он должен быть в поле io_private в zio_t , который передается в l2arc__write , но на нашем стенде он всегда равен NULL, что не соответствует Это имеет для нас смысл.

Есть ли какой-нибудь чистый способ получить DVA на l2arc__write dtrace probe event?

3
задан 15 March 2017 в 17:48
1 ответ

Оказывается, мы использовали версию 2015 года. OpenIndiana и в этой конкретной версии hdr не были установлены на zio-> io_private .

Эта фиксация от 2016 года решает проблему, и, используя версию OpenIndiana 2016 года, мы можем получить доступ к hdr через zio-> io_private .

1
ответ дан 3 December 2019 в 07:23

Теги

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