Подтвердить что ты не робот

DTrace на Ubuntu, как?

Я хотел бы использовать DTrace на Ubuntu.

https://github.com/dtrace4linux/linux

Есть один для Linux выше, github.

  • Интересно, подходит ли dtrace для linux для dtrace для других ОС (Solaris, FreeBSD, OSX).
  • Я хотел бы найти учебник для использования этого (dtraceforlinux).
  • Интересно, подходит ли мне учебник для dtrace для Solaris ниже.

http://www.oracle.com/technetwork/server-storage/solaris/dtrace-tutorial-142317.html

Спасибо заранее. Journeyer

4b9b3361

Ответ 1

Как автор dtrace4linux, позвольте мне ответить.

В сущности, dtrace для Linux/MacOS/FreeBSD/Solaris одинаково - мы все основываемся на том же исходном коде с теми же целями. Поскольку нет центрального помощника, коды эффективно вилки, а Solaris считается мастером. Основной отличием исходного кода является клей для каждой платформы.

DTrace - это комбинация нескольких вещей:

  • драйвер ядра
  • пользовательское пространство Команда "dtrace"
  • механизмы функции зонда (например, syscall, fbt)
  • язык сценариев

Посмотрите на syscall, проследив его довольно просто:

$ dtrace -n syscall::open:
.....

Это ловушки для каждого открытого системного вызова, независимо от того, кто его выполнил. Если вы знаете Unix, вы знаете, что syscall примерно:

open(char *filename, int flags, [int perms])

Итак, arg0 - это строка "filename". Но здесь все меняется. Функция C lib такая же, как и выше, но это отображает системный вызов, что-то вроде:

open(int someflags, char *filename, int userflags, int perms)

Итак, имя файла не указано в arg0, но arg1. (Извините, если это неверно - я думаю, что open() в ядре и пользовательском пространстве одинаково, но это неверно, например, для семейства функций stat()).

Здесь возникают некоторые проблемы "переносимости" DTrace - если вы используете руководство Solaris для dtrace и пытаетесь запустить некоторые из сценариев или примеров, вы можете обнаружить, что они не работают одинаково. Теоретически это ошибка Linux (мой), и dtrace4linux следует изменить, чтобы скрыть это.

Что касается всех системных вызовов.

Теперь посмотрим на fbt. Fbt - это просто функция отслеживания - любая функция - с любыми параметрами. Вы можете проследить функцию linux, которая реализует syscall open() (ее называют sys_open [возможно]). Если вы улавливаете эту функцию:

$ dtrace -n fbt::sys_open:

тогда вам нужно посмотреть исходный код ядра, чтобы узнать, что такое arg0, arg1, arg2 и т.д. И почти наверняка это отличается от Solaris или MacOS - подробности его реализации Linux.

Но вам может потребоваться доступ к некоторому аргументу, например. для получения некоторой внутренней структуры данных ядра (TCP, драйвер диска, драйвер USB и т.д.). Solaris предоставляет "провайдеры", которые представляют собой способы более высокого уровня доступа к структурам данных, чем знание "arg3 является" структурой foo * ". Без этих поставщиков скрипты были бы полностью зависимыми от opsys и без переносимости. Большинство людей не заботятся о структуре" tcp", но хотят получить доступ к ключевым полям, таким как pktin, pktout, rcvbytes, sndbytes.

В заключение dtrace4linux и Solaris dtrace предоставляет уровень переносимости, чтобы разрешить доступ к этим функциям или структурам, но ни dtrace4linux, ни Solaris не пытаются выполнить полную работу, чтобы обеспечить переносимость по тысячам структур в каждом ядре.

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

Я считаю dtrace4linux "неплохим" и "недостаточно хорошим", чтобы скрыть эти различия. (dtrace4linux примерно соответствует MacOS - если вы используете учебные пособия Solaris, некоторые могут не работать на Mac или FreeBSD).