DTrace en Windows recibe sus actualizaciones 20H1 con soporte ARM64
DTrace es la popular herramienta de depuración y diagnóstico de código abierto. Originalmente se creó para Solaris y estuvo disponible para Linux, FreeBSD, NetBSD y macOS. Microsoft lo ha portado a Windows y le agrega una parte de las actualizaciones con la actualización de funciones 20H1.
Anuncio publicitario
DTrace es un marco de seguimiento dinámico que permite a un administrador o desarrollador obtener una vista en tiempo real de un sistema, ya sea en modo de usuario o de kernel. DTrace tiene un lenguaje de programación potente y de alto nivel estilo C que le permite insertar puntos de seguimiento de forma dinámica. Con estos puntos de seguimiento insertados dinámicamente, puede filtrar por condiciones o errores, escribir código para analizar patrones de bloqueo, detectar puntos muertos, etc.
En Windows, DTrace amplía el seguimiento de eventos para Windows (ETW), que es estático y no ofrece la capacidad de insertar puntos de seguimiento mediante programación en tiempo de ejecución.
Todas las API y las funciones utilizadas por dtrace.sys son llamadas documentadas.
Microsoft ha implementado un controlador especial para Windows 10 que permite realizar una serie de funciones de supervisión del sistema. El controlador está integrado en Windows 10 a partir de la versión 1903.
A partir de Windows 10 insider build 19041.21, DTrace incluye las siguientes mejoras.
Vista previa de ARM64
¡Sí, eso es correcto! DTrace ahora es compatible con ARM64 en modo de vista previa. El ARM64 MSI está disponible en el enlace de descarga que se menciona arriba.
Puedes usarlo en tu Surface Pro X ejecutando la última compilación de Windows 10 Insider Preview (20H1), comenzando con 19041.21.
DTrace en Surface Pro X
Modo de usuario Stackwalk
En la vista previa, la función stackwalk en DTrace estaba limitada al modo Kernel (pila). Esta actualización agrega soporte para la instalación de stackwalk en modo de usuario (ustack). Al igual que la pila, la función ustack es totalmente compatible con la especificación DTrace de código abierto. Se puede invocar de tres formas especificando fotogramas (profundidad) y tamaño (ignorados por ahora) o vacío.
- Ustack (nframes, tamaño)
- Ustack (nframes)
- Ustack ()
Si bien ustack () puede determinar la dirección del marco de llamada cuando se activa la sonda, los marcos de pila no se traducirá en símbolos hasta que el consumidor de DTrace procese la acción ustack () en modo de usuario. La descarga de símbolos puede ralentizar la salida. Por lo tanto, es mejor utilizar esta función con símbolos almacenados en caché local como se muestra a continuación.
dtrace -n "perfil-1ms / arg1 / {ustack (50, 0); exit (0);} "-y C: \ símbolos. dtrace: la descripción 'profile-1ms' coincidió con 1 sonda. FUNCIÓN DE ID DE CPU: NOMBRE 0 3802: profile-1ms ntdll`ZwAllocateVirtualMemory + 0x14 ntdll`RtlAllocateHeap + 0x3ded ntdll`RtlAllocateHeap + 0x763 ucrtbase`malloc_base + 0x44
Soporte de volcado en vivo
Windows comúnmente usa algo llamado Volcado en vivo para ayudar a diagnosticar problemas rápidamente. Los volcados en vivo ayudan con la resolución de problemas que involucran múltiples procesos o problemas en todo el sistema sin tiempo de inactividad. En 20H1, DTrace en Windows se puede usar para capturar un volcado en vivo desde dentro de un D-script usando el lkd () Instalación de DTrace. Un caso de uso común de esta función es instrumentar la ruta de error (como el código de retorno indica una falla) y capturar un volcado en vivo justo en el punto de falla para diagnósticos avanzados. Para obtener más información sobre el soporte de volcado en vivo, consulte DTrace Live Dump.
dtrace -wn "syscallreturn {if (arg0! = 0xc0000001UL) {lkd (0); printf (\ "Activando el volcado en vivo \ n \"); exit (0); }}" dtrace: la descripción 'syscallreturn' coincidió con 1411 sondas. dtrace: permitir acciones destructivas. FUNCIÓN DE ID DE CPU: NOMBRE 0 181 NtDeviceIoControlFile: return Triggering Live dump dir c: \ Windows \ LiveKernelReports El volumen en la unidad C no tiene etiqueta. El número de serie del volumen es 70F4-B9F6 Directorio de c: \ Windows \ LiveKernelReports 11/05/2019 05:20 p.m.<DIR>. 05/11/2019 05:20 p.m. <DIR>.. 05/11/2019 05:19 p.m. <DIR> DTRACE. 05/11/2019 05:20 p.m. 53,395,456 DTRACE-20191105-1720.dmp.
Seguimiento ETW
Rastreo de ETW es la herramienta de depuración más utilizada en Windows. En la vista previa de DTrace en Windows 19H1, agregamos soporte para instrumentar eventos registrados y manifestados usando el Proveedor de ETW.
En 20H1, mejoramos aún más esta función para crear nuevos eventos ETW sobre la marcha desde dentro de un D-script utilizando el ETW_Trace () instalaciones. Esto ayuda en situaciones en las que los eventos ETW existentes son insuficientes y le gustaría agregar puntos de seguimiento ETW adicionales sin modificar el código de producción.
Para obtener más información sobre ETW_Trace instalación y Proveedor de ETW, ver DTrace ETW.
/ * Ejecución de la muestra del proveedor de ETW de GitHub (enlace a continuación) para imprimir el evento de información de memoria del nodo. https://github.com/microsoft/DTrace-on-Windows/blob/master/samples/windows/etw/numamemstats.d. * / dtrace -qs numamemstats.d ID de partición: 0. Cuenta: 1. Número de nodo: 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. }
Si está interesado en instalar DTrace, consulte cómo se puede hacer aquí.
Puede descargar el paquete MSI de DTrace actualizado de aquí.
Aquí es código fuente y guiones avanzados.
Fuente