Отслеживание того, какие блоки проходят через 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?

1 ответ

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

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

Другие вопросы по тегам