DTrace на Windows отримує оновлення 20H1 з підтримкою ARM64
DTrace — популярний інструмент для налагодження та діагностики з відкритим кодом. Спочатку він був створений для Solaris і став доступним для Linux, FreeBSD, NetBSD і macOS. Корпорація Майкрософт перенесла його на Windows і додає до нього частину оновлень за допомогою оновлення функцій 20H1.
DTrace — це динамічна структура відстеження, яка дозволяє адміністратору або розробнику отримувати огляд системи в режимі реального часу в режимі користувача або ядра. DTrace має високий рівень і потужну мову програмування в стилі C, що дозволяє динамічно вставляти точки трасування. Використовуючи ці динамічно вставлені точки трасування, ви можете фільтрувати умови або помилки, писати код для аналізу шаблонів блокування, виявляти тупики тощо.
У Windows DTrace розширює функцію відстеження подій для Windows (ETW), яка є статичною і не надає можливості програмно вставляти точки трасування під час виконання.
Усі API та функції, які використовує dtrace.sys, є задокументованими викликами.
Microsoft реалізувала спеціальний драйвер для Windows 10, який дозволяє виконувати ряд ролей системного моніторингу. Драйвер вбудований у Windows 10, починаючи з версії 1903.
Починаючи з інсайдерської збірки Windows 10 19041.21, DTrace має такі покращення.
Попередній перегляд ARM64
Так, правильно! DTrace тепер підтримує ARM64 в режимі попереднього перегляду. ARM64 MSI доступний за посиланням для завантаження, наведеним вище.
Ви можете використовувати його на своєму Surface Pro X запуск останньої збірки Windows 10 Insider Preview (20H1), починаючи з 19041.21.
Режим користувача Stackwalk
У попередньому перегляді функція стека в DTrace була обмежена режимом ядра (стеком). Це оновлення додає підтримку функції Stackwalk в режимі користувача (ustack). Як і стек, засіб ustack повністю сумісний зі специфікацією DTrace з відкритим кодом. Його можна викликати трьома способами, вказавши рамки (глибину) і розмір (наразі ігнорувати) або void.
- Ustack (nframes, розмір)
- Ustack (nframes)
- Ustack()
У той час як ustack () може визначати адресу викликаючого кадру, коли спрацьовує зонд, фрейми стека будуть не буде перекладено на символи, доки дія ustack () не буде оброблено в режимі користувача споживачем DTrace. Завантаження символу може уповільнити вихід. Отже, краще використовувати цей засіб із локально кешованими символами, як показано нижче.
dtrace -n "profile-1ms /arg1/ {ustack (50, 0); вихід (0);} " -y C:\symbols. dtrace: опис 'profile-1ms' відповідає 1 пробі. ІД ЦП ФУНКЦІЯ: НАЗВА 0 3802 :profile-1ms ntdll`ZwAllocateVirtualMemory+0x14 ntdll`RtlAllocateHeap+0x3ded ntdll`RtlAllocateHeap+0x763 ucrtbase`malloc44
Жива підтримка дампів
Windows зазвичай використовує те, що називається Живий смітник щоб допомогти швидко діагностувати проблеми. Живі дампи допомагають усунути проблеми, пов’язані з кількома процесами, або проблемами в системі без простоїв. У 20H1 DTrace у Windows можна використовувати для захоплення дампу в реальному часі зсередини D-скрипту за допомогою lkd() Засіб DTrace. Поширеним випадком використання цього засобу є інструментування шляху помилки (наприклад, код повернення вказує на збій) і захоплення живого дампу прямо в точці відмови для розширеної діагностики. Додаткову інформацію про підтримку дампу в реальному часі див DTrace Live Dump.
dtrace -wn "syscallreturn { якщо (arg0 != 0xc0000001UL) { lkd (0); printf(\" Запуск дампу в реальному часі \n \");exit (0); }}" dtrace: опис 'syscallreturn' відповідає 1411 пробам. dtrace: дозволяє виконувати деструктивні дії. ІД ЦП ФУНКЦІЯ: НАЗВА 0 181 NtDeviceIoControlFile: повернення Запуск Live dump dir c:\Windows\LiveKernelReports Том на диску C не має мітки. Серійний номер тому: 70F4-B9F6 Каталог c:\Windows\LiveKernelReports 05.11.2019 17:20<DIR>. 05.11.2019 17:20 <DIR>.. 05.11.2019 17:19 <DIR> DTRACE. 05.11.2019 17:20 53 395 456 DTRACE-20191105-1720.dmp.
Трасування ETW
Трасування ETW є найбільш часто використовуваним інструментом для налагодження в Windows. У попередньому перегляді DTrace у Windows 19H1 ми додали підтримку інструментування відстежених і виявлених подій за допомогою Постачальник ETW.
У 20H1 ми ще більше вдосконалили цю можливість для створення нових подій ETW на льоту з D-скрипту за допомогою ETW_Trace() об'єкта. Це допомагає в ситуаціях, коли наявних подій ETW недостатньо, і ви хочете додати додаткові точки трасування ETW, не змінюючи виробничий код.
Для отримання додаткової інформації про ETW_Trace заклад і постачальник ETW, побачити DTrace ETW.
/* Запуск зразка постачальника GitHub ETW (посилання нижче) для друку події інформації про пам'ять вузла. https://github.com/microsoft/DTrace-on-Windows/blob/master/samples/windows/etw/numamemstats.d. */ dtrace -qs numamemstats.d Ідентифікатор розділу: 0. Рахувати: 1. Номер вузла: 1. m_nodeinfo { uint64_t TotalPageCount = 0x1fb558 uint64_t SmallFreePageCount = 0x41 uint64_t SmallZeroPageCount = 0 uint64_t MediumFreePageCount = 0 uint64_t MediumZeroPageCount = 0 uint64_t LargeFreePageCount = 0 uint64_t LargeZeroPageCount = 0 uint64_t HugeFreePageCount = 0 uint64_t HugeZeroPageCount = 0. }
Якщо ви зацікавлені в установці DTrace, подивіться, як це можна зробити тут.
Ви можете завантажити оновлений пакет DTrace MSI звідси.
Ось воно вихідний код і розширені скрипти.
Джерело