Пример использования dtrace для вычисления средней и максимальной очереди чтения / записи на диске за время
Мне нужно прочитать длину очереди диска (отдельно для операций чтения и записи) в Mac OSX. Я уже пришел к выводу, что это может быть сделано только через dtrace (я был бы рад ошибиться здесь, однако я не нашел никакого способа сделать это по-другому). Единственным способом, который предоставил эту информацию, является сценарий dtrace. Мне нужно иметь доступ к информации, которую он предоставляет (или, скорее, уметь реализовывать ее логику) в моей C-программе. Использование libdtrace очень загадочно (учитывая частный API), как и общий бизнес dtrace. Есть ли какой-нибудь пример (кроме нескольких найденных мной, которые не отвечают на мой вопрос - буферизованный вывод libdtrace и http://www.osdevcon.org/2008/files/osdevcon2008-petr.pdf), который может мне помочь?
1 ответ
Непосредственное использование libdtrace может быть немного проблематично, поскольку технически это частный API, но вы можете найти примеры и у других потребителей DTrace. libdtrace в основном одинаков на всех платформах, которые его поддерживают (Mac OS, Solaris, FreeBSD), и в результате API очень стабилен. Однако Solaris получает еще несколько обновлений, и IIRC Mac OS не поддерживает все функции, доступные на других платформах. Тем не менее, это дает вам больше примеров для работы.
Вы можете посмотреть исходный код dtrace
команду на одной из этих платформ, или вы можете посмотреть исходный код какой-нибудь оболочки библиотеки, такой как node-libdtrace. Я бы порекомендовал последнее, так как это просто оболочка, которая обеспечивает важные высокоуровневые операции, которые должны упростить выяснение того, какой код делает что.