DTrace di Windows
DTrace (DTrace.exe) adalah alat baris perintah yang menampilkan informasi dan peristiwa sistem. DTrace adalah platform pelacakan sumber terbuka yang di-port ke jendela. DTrace awalnya dikembangkan untuk sistem operasi Solaris. Ini menyediakan instrumentasi dinamis dari kedua fungsi pengguna/kernel, kemampuan untuk membuat skrip menggunakan bahasa D, pelacakan spekulatif. Selain itu, DTrace memiliki ekstensi khusus OS Windows seperti instrumentasi ETW, pembuatan peristiwa ETW, pemeriksaan panggilan sistem, dan kemampuan pengambilan cadangan langsung.
Catatan
DTrace didukung di build Insider Windows setelah versi 18980 dan Windows Server Build 18975.
Situs DTrace di Windows GitHub terletak di sini:
https://github.com/microsoft/DTrace-on-Windows
Buka Informasi DTrace
Untuk informasi terperinci tentang DTrace, lihat Spesifikasi OpenDTrace versi 1.0 di University Of Cambridge.
Situs GitHub utama terletak di https://github.com/opendtrace/.
Satu set skrip yang berguna tersedia di https://github.com/opendtrace/toolkit.
Sejumlah buku DTrace tersedia, seperti:
DTrace: Pelacakan Dinamis di Oracle Solaris, Mac OS X dan FreeBSD oleh Brendan Gregg dan Jim Mauro
Performa dan Alat Solaris: Teknik DTrace dan MDB untuk Solaris 10 dan OpenSolaris oleh Richard McDougall, Jim Mauro dan Brendan Gregg
Memberikan umpan balik tentang Windows DTrace
Gunakan hub umpan balik untuk meminta fitur baru atau untuk melaporkan masalah atau bug dengan Windows DTrace.
- Luncurkan hub umpan balik. Buka pencarian, masukkan umpan balik kata, lalu pilih Hub Umpan Balik.
- Pilih Sarankan fitur atau Laporkan masalah.
- Berikan deskripsi terperinci dan spesifik tentang masalah atau saran.
Ekstensi DTrace Windows
Berikut ini adalah beberapa penyedia yang tersedia di Windows dan instrumennya.
syscall – Panggilan sistem NTOS
fbt (Pelacakan Batas Fungsi) – Entri fungsi Kernel dan mengembalikan
pid (ID Proses) – Pelacakan proses mode pengguna. Seperti FBT mode kernel, tetapi juga memungkinkan instrumentasi offset fungsi arbitrer.
etw (Pelacakan Peristiwa untuk Windows) – Memungkinkan pemeriksaan didefinisikan untuk ETW Penyedia ini membantu memanfaatkan instrumentasi sistem operasi yang ada di DTrace.
SYSCALL
SYSCALL menyediakan sepasang pemeriksaan untuk setiap panggilan sistem: pemeriksaan entri yang diaktifkan sebelum panggilan sistem dimasukkan, dan pemeriksaan pengembalian yang diaktifkan setelah panggilan sistem selesai tetapi sebelum kontrol ditransfer kembali ke tingkat pengguna. Untuk semua pemeriksaan SYSCALL, nama fungsi diatur menjadi nama panggilan sistem berinstrumentasi dan nama modul adalah modul tempat fungsi berada. Nama panggilan sistem seperti yang disediakan oleh penyedia SYSCALL dapat ditemukan dengan mengetik perintah dtrace.exe -l -P syscall
dari prompt perintah. Perhatikan bahwa nama probe adalah huruf kecil syscall. Perintah dtrace -ln syscall:::
juga akan mencantumkan semua pemeriksaan dan parameternya yang tersedia dari penyedia syscall.
C:\> dtrace -ln syscall:::
ID PROVIDER MODULE FUNCTION NAME
6 syscall NtWaitHighEventPair entry
7 syscall NtWaitHighEventPair return
8 syscall NtRegisterThreadTerminatePort entry
9 syscall NtRegisterThreadTerminatePort return
...
Perhatikan bahwa tidak semua output layar ditampilkan dalam contoh ini. "..." digunakan untuk mewakili output terpotong.
Untuk menggulir output, pipa ke perintah lainnya seperti ini:
dtrace -ln syscall:::|more
Tambahkan opsi v untuk menampilkan informasi selengkapnya tentang pemeriksaan syscall yang tersedia.
C:\> dtrace -lvn syscall:::
...
942 syscall NtSaveMergedKeys entry
Probe Description Attributes
Identifier Names: Private
Data Semantics: Private
Dependency Class: ISA
Argument Attributes
Identifier Names: Private
Data Semantics: Private
Dependency Class: ISA
Argument Types
args[0]: HANDLE
args[1]: HANDLE
args[2]: HANDLE
...
ETW
DTrace mencakup dukungan untuk pemeriksaan ETW yang dimanifestasikan/dilacak yang ada. Anda dapat melengkapi, memfilter, dan mengurai peristiwa ETW secara sinkron pada saat peristiwa menembak. Selain itu, DTrace dapat digunakan untuk menggabungkan berbagai peristiwa/status sistem untuk menyediakan aliran output terkonsolidasi untuk membantu men-debug situasi kesalahan yang kompleks.
Perintah dtrace -ln etw:::
akan mencantumkan semua pemeriksaan dan parameternya yang tersedia dari penyedia syscall.
C:\> dtrace -ln etw:::
ID PROVIDER MODULE FUNCTION NAME
944 etw 048dc470-37c1-52a8-565a-54cb27be37ec 0xff_0xffffffffffffffff generic_event
945 etw aab97afe-deaf-5882-1e3b-d7210f059dc1 0xff_0xffffffffffffffff generic_event
946 etw b0f40491-9ea6-5fd5-ccb1-0ec63be8b674 0xff_0xffffffffffffffff generic_event
947 etw 4ee869fa-9954-4b90-9a62-308c74f99d32 0xff_0xffffffffffffffff generic_event
...
Untuk informasi selengkapnya, lihat DTrace ETW.
Pelacakan Batas Fungsi (FBT)
Penyedia Pelacakan Batas Fungsi (FBT) menyediakan pemeriksaan yang terkait dengan entri ke dan kembali dari sebagian besar fungsi di kernel Windows. Fungsi ini adalah unit dasar teks program. Mirip dengan penyedia DTrace lainnya, FBT tidak memiliki efek pemeriksaan ketika tidak diaktifkan secara eksplisit. Saat diaktifkan, FBT hanya menginduksi efek pemeriksaan dalam fungsi yang diselimuti. FBT telah diterapkan pada platform x86 dan x64.
Untuk setiap set instruksi, ada sejumlah kecil fungsi yang tidak memanggil fungsi lain dan sangat dioptimalkan oleh pengkompilasi (disebut fungsi daun) yang tidak dapat diinstrumentasikan oleh FBT. Pemeriksaan untuk fungsi-fungsi ini tidak ada di DTrace.
Perintah dtrace -ln fbt:nt::
akan mencantumkan semua pemeriksaan dan parameternya yang tersedia untuk modul nt. Gunakan perintah debugger lm (List Loaded Modules) untuk mencantumkan semua modul yang tersedia.
C:\>dtrace -ln "fbt:nt::"
ID PROVIDER MODULE FUNCTION NAME
3336 fbt nt PiDqActionDataFree entry
3337 fbt nt PiDqActionDataFree return
3338 fbt nt PiDqActionDataGetRequestedProperties entry
3339 fbt nt PiDqActionDataGetRequestedProperties return
3340 fbt nt _CmGetMatchingFilteredDeviceInterfaceList entry
...
Catatan
Karena ada ribuan panggilan yang tersedia dalam nt, tidak ada baiknya untuk membiarkan nama fungsi kosong saat menjalankan perintah DTrace yang mencatat data. Pendekatan yang direkomendasikan untuk menghindari kemungkinan dampak performa adalah menentukan setidaknya bagian dari nama fungsi, seperti fbt:nt:*Timer*:entry
.
PID
Penyedia DTrace PID memungkinkan Anda melacak eksekusi internal proses mode pengguna seperti browser web atau database. Anda juga dapat melampirkan DTrace pada saat peluncuran proses sehingga dapat men-debug masalah start-up proses. Sebagai bagian dari definisi PID, Anda menentukan fungsi yang ditentukan dalam proses dan offset tertentu (atau semua offset menggunakan wildcard *) dalam fungsi . Penyedia PID mengharuskan biner diluncurkan atau dijalankan pada saat eksekusi skrip.
Contoh perintah ini menampilkan informasi tentang panggilan tertentu di PID yang terkait dengan notepad.exe. Gunakan perintah debugger lm (List Loaded Modules) untuk mencantumkan semua modul yang tersedia.
C:\Windows\system32>dtrace -ln "pid$target:ntdll:RtlAllocateHeap:entry" -c notepad.exe
ID PROVIDER MODULE FUNCTION NAME
5102 pid6100 ntdll RtlAllocateHeap entry
Catatan
Saat melacak fungsi yang ditulis dalam C++, nama fungsi mungkin terlalu panjang atau didekorasi untuk ditentukan sebagai pemeriksaan dengan bentuk lengkapnya. Solusi umumnya adalah menggunakan ekspresi yang secara unik cocok dengan fungsi target Anda. Misalnya, gunakan 'String?? Salin' sebagai bagian 'probefunc' dari nama probe agar sesuai dengan 'String::Copy()', atau '*GetPinnableReference' agar sesuai dengan 'String::GetPinnableReference()'.
Arsitektur DTrace Windows
Pengguna berinteraksi dengan DTrace melalui perintah DTrace, yang berfungsi sebagai front-end ke mesin DTrace. Skrip D dikompilasi ke format menengah (DIF) di ruang pengguna dan dikirim ke komponen kernel DTrace untuk dieksekusi, kadang-kadang disebut sebagai Komputer Virtual DIF. Ini berjalan di driver dtrace.sys.
Traceext.sys (ekstensi pelacakan) adalah driver ekstensi kernel Windows, yang memungkinkan Windows mengekspos fungsionalitas yang diandalkan DTrace untuk menyediakan pelacakan. Kernel Windows menyediakan callout selama akses stackwalk atau memori yang kemudian diimplementasikan oleh ekstensi pelacakan.
Menginstal DTrace di bawah Windows
Periksa apakah Anda menjalankan versi Windows yang didukung. Unduhan DTrace saat ini didukung di build Insider 20H1 Windows setelah versi 18980 dan Windows Server Build 18975. Menginstal versi DTrace ini pada versi Windows yang lebih lama dapat menyebabkan ketidakstabilan sistem dan tidak disarankan. (Versi DTrace yang diarsipkan untuk 19H1 tidak lagi tersedia dan tidak lagi didukung.)
Unduh file penginstalan MSI (Unduh DTrace di Windows) dari Pusat Unduhan Microsoft.
Pilih Penginstalan lengkap.
Penting
Sebelum menggunakan bcdedit untuk mengubah informasi boot, Anda mungkin perlu menangguhkan sementara fitur keamanan Windows seperti Patchguard, BitLocker, dan Secure Boot pada PC pengujian. Aktifkan kembali fitur keamanan ini saat pengujian selesai dan kelola PC pengujian dengan tepat, saat fitur keamanan dinonaktifkan.
Perbarui variabel lingkungan PATH untuk menyertakan C:\Program Files\DTrace
set PATH=%PATH%;"C:\Program Files\DTrace"
- Aktifkan DTrace pada komputer menggunakan perintah bcdedit.
bcdedit /set dtrace ON
Ketika Anda memperbarui ke build Windows Insider baru, Anda harus mengatur opsi dtrace bcdedit lagi.
Catatan
Jika Anda menggunakan BitLocker, nonaktifkan saat membuat perubahan pada nilai boot. Jika Anda tidak melakukan ini, Anda mungkin diminta untuk kunci pemulihan BitLocker. Salah satu cara untuk pulih dari situasi ini adalah dengan boot ke konsol pemulihan dan memulihkan nilai bcdedit, bcdedit /set {default} dtrace on
. Jika pembaruan OS telah menghapus nilai dan Anda menambahkannya, untuk memulihkan OS, gunakan bcdedit untuk menghapus nilai , bcdedit /deletevalue {default} dtrace
. Kemudian nonaktifkan BitLocker dan aktifkan kembali dtrace, bcdedit /set dtrace ON
.
Konfigurasikan VSM (Mode Aman Virtual) pada komputer untuk mengaktifkan pelacakan batas fungsi kernel (FBT) dengan mengatur "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\EnableVirtualizationBasedSecurity" diatur ke 1 untuk mengaktifkan VSM dan Kernel Aman.
Untuk melakukan ini, gunakan perintah Tambahkan REG, seperti ini:
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\ /v EnableVirtualizationBasedSecurity /t REG_DWORD /d 1
Beberapa perintah DTrace menggunakan simbol Windows. Untuk menggunakan simbol Windows, buat direktori simbol dan atur jalur simbol:
mkdir c:\symbols
set _NT_SYMBOL_PATH=srv*C:\symbols*https://msdl.microsoft.com/download/symbols
Untuk informasi selengkapnya tentang jalur simbol, lihat Jalur simbol untuk debugger Windows.
Menggunakan DTrace di dalam Komputer Virtual
Jika menjalankan DTrace pada VM, aktifkan Virtualisasi berlapis pada komputer yang mendukung VM, saat VM dihentikan, menggunakan perintah PowerShell berikut. <VMName>
Berikan untuk VM tempat Anda menjalankan DTrace. Buka PowerShell Windows sebagai Administrator.
Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true
Reboot PC yang mendukung VM.
Memvalidasi penginstalan DTrace
Gunakan opsi -l untuk mencantumkan pemeriksaan aktif. Jika DTrace aktif banyak pemeriksaan harus dicantumkan untuk peristiwa etw dan sistem.
Buka perintah Windows sebagai administrator untuk memasukkan perintah DTrace.
C:\> dtrace -l
...
179 syscall NtLockVirtualMemory return
180 syscall NtDeviceIoControlFile entry
181 syscall NtDeviceIoControlFile return
182 syscall NtCreateUserProcess entry
183 syscall NtCreateUserProcess return
184 syscall NtQuerySection entry
185 syscall NtQuerySection return
...
3161 etw 222962ab-6180-4b88-a825-346b75f2a24a 0xff_0xffffffffffffffff generic_event
3162 etw 3ac66736-cc59-4cff-8115-8df50e39816b 0xff_0xffffffffffffffff generic_event
3163 etw 42695762-ea50-497a-9068-5cbbb35e0b95 0xff_0xffffffffffffffff generic_event
3164 etw 3beef58a-6e0f-445d-b2a4-37ab737bd47e 0xff_0xffffffffffffffff generic_event
...
Jika hanya ketiga pemeriksaan ini yang tercantum, ada masalah dengan driver DTrace.sys yang dimuat.
C:\> dtrace -l
ID PROVIDER MODULE FUNCTION NAME
1 dtrace BEGIN
2 dtrace END
3 dtrace ERROR
Mulai menggunakan DTrace - Satu perintah baris
Mulailah dengan menjalankan perintah ini dari prompt perintah administrator.
Perintah ini menampilkan ringkasan syscall menurut program selama 5 detik. Parameter tick-5sec menentukan periode waktu. Pintu keluar(0); menyebabkan perintah keluar setelah selesai kembali ke prompt perintah. Output ditentukan menggunakan [pid,execname] = count();
Ini menampilkan ID Proses (PID), nama yang dapat dieksekusi dan hitungan selama 5 detik terakhir.
C:\> dtrace -Fn "tick-5sec {exit(0);} syscall:::entry{ @num[pid,execname] = count();} "
dtrace: description 'tick-5sec ' matched 471 probes
CPU FUNCTION
0 | :tick-5sec
1792 svchost.exe 4
4684 explorer.exe 4
4916 dllhost.exe 4
6192 svchost.exe 4
6644 SecurityHealth 4
92 TrustedInstall 5
504 csrss.exe 5
696 svchost.exe 6
...
Perintah ini meringkas panggilan set/batal timer selama 3 detik:
C:\> dtrace -Fn "tick-3sec {exit(0);} syscall::Nt*Timer*:entry { @[probefunc, execname, pid] = count();}"
dtrace: description 'tick-3sec ' matched 14 probes
CPU FUNCTION
0 | :tick-3sec
NtCreateTimer WmiPrvSE.exe 948 1
NtCreateTimer svchost.exe 564 1
NtCreateTimer svchost.exe 1276 1
NtSetTimer2 svchost.exe 1076 1
NtSetTimer2 svchost.exe 7080 1
NtSetTimerEx WmiPrvSE.exe 948 1
...
Satu perintah baris yang menggunakan simbol
Perintah ini memanfaatkan simbol Windows dan mengharuskan jalur simbol diatur seperti yang dibahas di bagian penginstalan. Seperti disebutkan sebelumnya dalam penginstalan, buat direktori dan atur jalur simbol menggunakan perintah ini.
C:\> mkdir c:\symbols
C:\> set _NT_SYMBOL_PATH=srv*C:\symbols*https://msdl.microsoft.com/download/symbols
Contoh perintah ini menampilkan fungsi NT teratas.
C:\> dtrace -n "fbt:nt:*Timer*:entry { @k[probefunc] = count(); } tick-5s { trunc(@k, 10);printa(@k); exit(0); }"
dtrace: description 'fbt:nt:*Timer*:entry ' matched 340 probes
CPU ID FUNCTION:NAME
0 22362 :tick-5s
KeCancelTimer 712
KeSetTimer2 714
HalpTimerClearProblem 908
ExpSetTimerObject 935
NtSetTimerEx 935
KeSetTimer 1139
KeSetCoalescableTimer 3159
KeResumeClockTimerFromIdle 11767
xHalTimerOnlyClockInterruptPending 22819
xHalTimerQueryAndResetRtcErrors 22819
Perintah ini mencadangkan struktur kernel SystemProcess.
C:\> dtrace -n "BEGIN {print(*(struct nt`_EPROCESS *) nt`PsInitialSystemProcess);exit(0);}"
...
uint64_t ParentSecurityDomain = 0
void *CoverageSamplerContext = 0
void *MmHotPatchContext = 0
union _PS_PROCESS_CONCURRENCY_COUNT ExpectedConcurrencyCount = {
Fraction :20 = 0
Count :12 = 0
uint32_t AllFields = 0
}
struct _KAFFINITY_EX IdealProcessorSets = {
uint16_t Count = 0x1
uint16_t Size = 0x20
uint32_t Reserved = 0
uint64_t [32] Bitmap = [ 0x1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
}
}
Perintah ini menampilkan tumpukan kernel teratas selama 10 detik terakhir.
C:\> dtrace -qn "profile-997hz { @[stack()] = count(); } tick-10sec { trunc(@,5); printa(@); exit(0);}"
nt`KiDispatchInterruptContinue
nt`KiDpcInterrupt+0x318
nt`KiSwapThread+0x1054
nt`KiCommitThreadWait+0x153
nt`KeRemoveQueueEx+0x263
nt`IoRemoveIoCompletion+0x54
nt`NtWaitForWorkViaWorkerFactory+0x284
nt`KiSystemServiceCopyEnd+0x35
14
nt`KiDispatchInterruptContinue
nt`KiDpcInterrupt+0x318
...
Perintah ini menampilkan modul teratas yang dipanggil oleh notepad.exe selama peluncuran. Opsi -c menjalankan perintah yang ditentukan (notepad.exe) dan keluar setelah selesai.
C:\> dtrace -qn "pid$target:::entry { @k[probemod] = count();} tick-10s{printa(@k); exit(0);}" -c notepad.exe
gdi32full 5
msvcp_win 6
combase 7
notepad 9
ADVAPI32 10
GDI32 11
SHELL32 11
USER32 21
win32u 345
KERNELBASE 3727
msvcrt 7749
KERNEL32 9883
RPCRT4 11710
ntdll 383445
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk