Bagikan melalui


Menyiapkan Debugging Mode Kernel 2PF menggunakan KDNET

Alat Debugging untuk Windows mendukung penelusuran kesalahan kernel melalui kabel jaringan menggunakan beberapa Fungsi Fisik (PF) pada NIC yang didukung dengan mempartisi ruang konfigurasi PCI.

Dengan debugging 2PF, setiap PF dapat dihubungkan ke satu port jaringan, sehingga memungkinkan fungsionalitas debugging kernel terhubung ke satu PF saat tumpukan jaringan standar berbicara dengan PF lainnya. Karena itu, KDNIC tidak perlu merutekan lalu lintas jaringan Windows melalui KDNET, dan KDNET hanya akan bertanggung jawab untuk merutekan lalu lintas debugger kernel host. Hal ini menghasilkan peningkatan performa yang dramatis.

Topik ini menjelaskan cara menyiapkan penelusuran kesalahan 2PF menggunakan utilitas kdnet.exe.

Vendor kartu jaringan didorong untuk mengaktifkan dukungan untuk fitur ini. Untuk informasi selengkapnya, lihat Debugger 2PF KDNET Miniport Network Driver Support.

Dua driver akan berjalan di atas ruang konfigurasi PCI yang dipartisi

  • Driver kotak masuk Windows akan kehabisan port jaringan utama pada bus.dev.lokasi PCI fun0.0 .

  • The KDNET-Ext. modul akan kehabisan PF yang ditambahkan pada bus.dev.fun0.1, Teknik ini memastikan bahwa driver NIC kotak masuk Windows tidak terpengaruh dengan berbagi NIC dengan KDNET.

Komputer yang menjalankan debugger disebut komputer host, dan komputer yang sedang di-debug disebut komputer target.

Persyaratan perangkat 2PF Mode Kernel

Hal-hal berikut diperlukan:

  • Pada komputer target, kartu jaringan 2PF yang didukung.

  • Pada komputer host, kartu jaringan.

  • Koneksi jaringan antara target dan host.

  • Windows 10 Build 21313 dan yang lebih baru.

Kartu Jaringan 2PF yang Didukung

Vendor seperti NVIDIA Mellanox dan Cisco menyediakan NIC yang mendukung debugging jaringan 2PF. Tanyakan kepada vendor kartu jaringan untuk melihat model kartu jaringan mana yang didukung. Perhatikan bahwa beberapa vendor mendukung 2PF pada sub-set kartu jaringan yang memiliki ID PnP yang sama.

Gunakan kdnet.exe untuk mengonfirmasi dukungan perangkat dan melihat nilai busparams

Gunakan utilitas kdnet.exe untuk menampilkan informasi parameter untuk pengontrol yang mendukung penelusuran kesalahan transportasi KDNET 2PF.

  1. Konfirmasikan bahwa Windows Debugging Tools diinstal pada sistem host. Untuk informasi tentang mengunduh dan menginstal alat debugger, lihat Alat Debugging untuk Windows.

  2. Temukan file kdnet.exe dan VerifiedNICList.xml. Secara default, mereka terletak di sini.

    C:\Program Files (x86)\Windows Kits\10\Debuggers\x64

  3. Pada komputer host, salin dua file ke berbagi jaringan atau drive jempol, sehingga file tersebut akan tersedia di komputer target.

  4. Pada komputer target, buat C:\KDNET direktori dan salin file kdnet.exe dan VerifiedNICList.xml ke direktori tersebut.

  5. Pada komputer target, buka jendela Prompt Perintah sebagai Administrator. Masukkan perintah ini untuk memverifikasi bahwa komputer target memiliki adaptor jaringan yang didukung dan untuk melihat nilai busparams.

    
    C:\KDNET>kdnet.exe
    
    Network debugging is supported on the following NICs:
    busparams=141.0.0, Mellanox ConnectX-4 Lx Ethernet Adapter #2, Plugged in, Primary function, multiple physical functions are supported.
    
    Network debugging is supported on the following USB controllers:
    busparams=128.15.0, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
    busparams=0.15.0, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
    busparams=128.15.1, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
    busparams=0.15.1, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
    

    Karena output yang ditunjukkan di atas tidak termasuk "KDNET berjalan pada NIC ini.", ini menunjukkan bahwa penelusuran kesalahan KDNET tradisional tidak diaktifkan pada salah satu adaptor.

    Jika NIC tidak mendukung beberapa fitur PF, maka pemberitahuan status PF "beberapa fungsi fisik didukung" akan dihilangkan (kosong) dari informasi yang ditampilkan.

    Jika NIC mendukung beberapa PF, informasi aktual yang ditampilkan akan tergantung pada kombinasi port Jaringan (port akar/port yang ditambahkan PF), serta kabel yang terhubung/status terputus ke/dari port fisik NIC.

    Tabel ini meringkas pemberitahuan PF yang berbeda untuk NIC utama.

    Adaptor NIC bus.dev.fun sesuai dengan Status kabel PF Status
    asli (primer) Kabel PF tersambung Fungsi utama, beberapa fungsi fisik diaktifkan
    asli (primer) Kabel PF terputus Fungsi utama, beberapa fungsi fisik didukung

    Tabel ini meringkas pemberitahuan PF yang berbeda untuk NIC sekunder.

    Adaptor NIC bus.dev.fun sesuai dengan Status kabel PF Status
    port PF baru (sekunder) Kdnet sedang berjalan Fungsi sekunder
    port PF baru (sekunder) kabel terputus atau status tidak diketahui Fungsi utama, beberapa fungsi fisik diaktifkan, tetapi fungsi sekunder tidak digunakan
  6. Jika output dari kdnet.exe menunjukkan bahwa pengontrol NIC yang didukung tersedia, kita dapat melanjutkan.

Menyiapkan Komputer Target untuk 2PF

Gunakan utilitas kdnet.exe untuk mengonfigurasi pengaturan debugger pada PC target untuk 2PF, dengan mengikuti langkah-langkah ini.

Penting

Sebelum menggunakan bcdedit untuk mengubah informasi boot, Anda mungkin perlu menangguhkan sementara fitur keamanan Windows seperti BitLocker dan Secure Boot pada PC pengujian. Anda dapat mengaktifkan kembali Bit Locker dan Boot Aman setelah selesai menggunakan BCDEdit untuk memperbarui informasi boot. Kelola PC pengujian dengan tepat, ketika fitur keamanan dinonaktifkan.

Proses ini akan menambahkan fungsi fisik (PF) baru ke NIC, yang ditentukan oleh bus.device.function. PF baru hanya dapat digunakan oleh KDNET karena driver kotak masuk Windows disiapkan untuk tidak berjalan pada PF sekunder yang ditambahkan. Ikuti langkah-langkah ini untuk menambahkan PF baru yang akan digunakan oleh perangkat debug.

Konfirmasikan bahwa penelusuran kesalahan dinonaktifkan sebelum menambahkan fungsi fisik baru

  1. Gunakan perintah BCDEdit untuk mengonfirmasi bahwa KD dinonaktifkan pada target sebelum menambahkan PF baru pada NIC. Ini diperlukan untuk memastikan driver NIC vendor standar dimuat sehingga dapat digunakan untuk menambahkan PF baru.
C:\> bcdedit /enum 
...

debug           No

Sebagai alternatif, gunakan kdnet.exe tanpa parameter untuk melihat apakah penelusuran kesalahan diaktifkan. Output di bawah ini menunjukkan KDNET yang berjalan pada sistem dengan debugging diaktifkan pada satu NIC. Ini adalah pengaturan warisan berkinerja lebih rendah.


c:\Debuggers>kdnet

Network debugging is supported on the following NICs:
busparams=141.0.0, Mellanox ConnectX-4 Lx Ethernet Adapter #2, KDNET is running on this NIC.

Network debugging is supported on the following USB controllers:
busparams=128.15.0, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
busparams=0.15.0, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
busparams=128.15.1, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
busparams=0.15.1, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
  1. Jika nilai debug diatur ke Ya, gunakan perintah set untuk menonaktifkan penelusuran kesalahan.
C:\> bcdedit.exe /debug off
C:\> bcdedit.exe /set {default} bootdebug off
C:\> bcdedit.exe /set {bootmgr} bootdebug off
  1. shutdown -r -t 0 Gunakan perintah dari prompt perintah administrator untuk memulai ulang.

Setelah PC target dimulai ulang, dan penelusuran kesalahan dinonaktifkan, kita dapat menambahkan fungsi fisik baru.

Menambahkan fungsi fisik baru

  1. Buka prompt perintah yang ditingkatkan dan jalankan perintah berikut untuk menambahkan PF kedua. Semua nilai disediakan menggunakan nilai desimal.
C:\KDNET> kdnet -addpf 141.0.0 198.51.100.1 50001

Succeeded adding a Pci PF on :141.0.1. Please power off or reboot the machine.

Enabling network debugging on Mellanox ConnectX-4 Lx Ethernet Adapter #2.
Manage-bde.exe not present.  Bitlocker presumed disabled.

To debug this machine, run the following command on your debugger host machine.
windbg -k net:port=50001,key=2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p

Then reboot this machine by running shutdown -r -t 0 from this command prompt.

bus.dev.fun adalah port lokasi PCI adaptor NIC yang mendukung beberapa fitur PF, sehingga PF baru akan ditambahkan/dilampirkan ke perangkat jaringan ini.

-addpf opsi memungkinkan penelusuran kesalahan kernel secara otomatis melalui transportasi KDNET pada port PF yang ditambahkan.

[host name/host ip address] adalah alamat TCP/IP komputer host. ipconfig Gunakan perintah pada komputer host untuk menentukan alamat ini.

[port number] adalah nomor port TCP/IP. Anda dapat memilih nomor port apa pun dari 49152 hingga 65535. Rentang yang direkomendasikan adalah antara 50000 dan 50039. Port yang Anda pilih akan dibuka untuk akses eksklusif oleh debugger yang berjalan pada komputer host. Pilih alamat port unik untuk setiap pasangan target/host yang bekerja sama dengan Anda, dalam rentang 50000-50039 yang direkomendasikan. 50005 ditampilkan dalam contoh.

Perhatikan bahwa -addpf juga akan menambahkan NO_KDNIC atribut ke penginstalan OS {default} loadoptions. Ini karena KDNIC tidak lagi diperlukan untuk berjalan di atas KDNET.

Loadoptions = NO_KDNIC ditambahkan ke tag OS {default} untuk memastikan bahwa kdnic.sys tidak akan kehabisan pf yang baru ditambahkan (141.0.1)

Gunakan perintah bcdedit untuk mengonfirmasi bahwa NO_KDNIC telah ditetapkan.

C:\KDNET> bcdedit /enum {default}

Windows Boot Loader
-------------------
identifier              {current}
device                  partition=C:
path                    \Windows\system32\winload.efi
description             Windows Server
locale                  en-US
loadoptions             NO_KDNIC
inherit                 {bootloadersettings}
recoverysequence        {c23c4005d-12ae-11eb-9399-ac9840c152e7}
displaymessageoverride  Recovery
recoveryenabled         Yes
bootdebug               No
testsigning             Yes
isolatedcontext         Yes
flightsigning           Yes
allowedinmemorysettings 0x15000075
osdevice                partition=C:
systemroot              \Windows
resumeobject            {c23c4005d-12ae-11eb-9399-ac9840c152e7}
nx                      OptOut
debug                   Yes
hypervisordebug         No

2. Run the bcdedit /enum command to display the generated key.

```console
C:\KDNET> bcdedit /dbgsettings
busparams               141.0.1
key                     2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p
debugtype               NET
hostip                  198.51.100.1
port                    50001
dhcp                    Yes
The operation completed successfully.
   
  1. Salin kunci yang dikembalikan ke dalam file .txt notepad. Dalam contoh yang ditunjukkan, kunci yang dihasilkan memiliki nilai:

    2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p

  2. Secara opsional gunakan kdnet.exe untuk mengonfirmasi bahwa beberapa fungsi fisik diaktifkan.

C:\KDNET> kdnet.exe

Network debugging is supported on the following NICs:
busparams=141.0.0, Mellanox ConnectX-4 Lx Ethernet Adapter #2, Plugged in, Primary function, multiple physical functions are enabled.
busparams=141.0.1, Mellanox ConnectX-4 Lx Ethernet Adapter, KDNET is running on this NIC, Secondary function.

Network debugging is supported on the following USB controllers:
busparams=128.15.0, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
busparams=0.15.0, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
busparams=128.15.1, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
busparams=0.15.1, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)

Menonaktifkan firewall pada host

Pada host, nonaktifkan firewall untuk port debugger.

Koneksi WinDbg ke target untuk penelusuran kesalahan kernel

Di komputer host, buka WinDbg. Pada menu File , pilih Debug Kernel. Dalam kotak dialog Debugging Kernel, buka tab Net . Tempelkan nomor port dan kunci yang Anda simpan di notepad .txt file sebelumnya. Pilih OK.

Anda juga dapat memulai sesi WinDbg dengan membuka jendela Prompt Perintah dan memasukkan perintah berikut, di mana adalah port yang Anda pilih di atas, dan merupakan kunci yang dikembalikan oleh kdnet.exe di atas. Tempelkan kunci yang Anda simpan di file .txt notepad sebelumnya.

windbg -k -d net:port=<YourDebugPort>,key=<YourKey>

Reboot komputer target

Setelah debugger tersambung, boot ulang komputer target. Salah satu cara untuk melakukan boot ulang PC adalah dengan menggunakan shutdown -r -t 0 perintah dari prompt perintah administrator.

Setelah PC target dimulai ulang, debugger akan terhubung secara otomatis.

Setelah komputer dimulai ulang, maka firmware NIC akan menetapkan alamat MAC baru ke PF KDNET yang baru ditambahkan, dan dbgsettings::busparams akan menunjuk ke PF yang baru ditambahkan.

Menemukan alamat MAC untuk adaptor 2PF

Karena PF yang baru ditambahkan adalah port yang dikonfigurasi bus PCI, akan ada nilai alamat MAC baru yang ditetapkan ke PF yang baru ditambahkan oleh firmware NIC. Alat kdnet.exe saat ini tidak mendukung menampilkan alamat MAC untuk 2PF yang ditambahkan.

Ada dua cara untuk menemukan alamat MAC baru:

Menggunakan WinDbg/KD dengan sesi KD lokal

Jalankan debugger kernel lokal windbg.exe -kl pada target.

Pastikan Anda memiliki akses ke file simbol kdnet.pdb dengan menjalankan .reload /f kdnet.dll

Jalankan perintah .kdtargetmac untuk mendapatkan alamat MAC.

kd> .kdtargetmac
Force unload of kdnet.dll
ModLoad: fffff800`18510000 fffff800`18557000   kdnet.dll
Loading symbols for fffff800`18510000        kdnet.dll ->   kdnet.dll

The target machine MAC address in open-device format is: DC9840C151E8

Jalankan alat firmware yang disediakan vendor

Salah satu cara untuk menemukan alamat MAC adalah dengan menjalankan alat firmware yang disediakan vendor. Lihat vendor NIC untuk informasi tentang mengunduh, menginstal, dan menggunakan alat vendor.

... 
Base MAC:              98039baa757c           4

Temukan bidang alamat MAC. Hitung nilai alamat MAC KDNET 2PF dengan menambahkannya secara berurutan ke digit terakhir perangkat MAC akar. Jadi untuk perangkat root dengan alamat 98039baa757c, perangkat KDNET 2PF akan memiliki alamat 98039baa757d.

Memulihkan status konfigurasi sebelumnya - Menghapus PF PCI kedua

Anda dapat menghapus PF yang ditambahkan sebelumnya dari perangkat dengan menggunakan kdnet -removepf opsi dan nilai bus.device.function asli. PF akan terlepas dari NIC dan sumber daya yang ditetapkan PF akan dirilis oleh firmware NIC.

Untuk menghapus PF KDNET dari perangkat, buka prompt perintah yang ditingkatkan dan jalankan perintah berikut.

kdnet -removepf [bus.dev.fun] [host name/host ip address] [port number]

Di mana bus.dev.fun port lokasi PCI adaptor NIC tempat PF awalnya terpasang. Ini adalah lokasi PCI yang sama yang awalnya diteruskan ke kdnet -addpf.

Menggunakan opsi -removepf juga mengaktifkan kembali penelusuran kesalahan kernel melalui KDNET pada bus.dev.fun asli.

C:\KDNET> kdnet -removepf 141.0.0 198.51.100.1 50001

Succeeded removing a Pci PF on :141.0.0. Please power off or reboot the machine.

Enabling network debugging on Mellanox ConnectX-4 Lx Ethernet Adapter #2.
Manage-bde.exe not present.  Bitlocker presumed disabled.

Perintah kdnet.exe -removepf juga akan menghapus atribut NO_KDNIC dari penginstalan OS {default} loadoptions, karena KDNET akan diaktifkan pada bus.dev.fun asli, yaitu dbgsettings::busparams akan menunjuk ke port jaringan asli. Ini akan menyebabkan KDNIC digunakan lagi, menyediakan koneksi jaringan lagi di atas KDNET.

Setelah PF dihapus, komputer perlu di-boot ulang agar perubahan BCD diterapkan.

shutdown -r -t 0

Pemecahan masalah konfigurasi adaptor host

Verifikasi bahwa adaptor 2PF ada di manajer perangkat

Anda dapat memverifikasi bahwa PF KDNET berhasil ditambahkan dengan memeriksa adaptor NIC baru memiliki port bus.dev.fun baru pada daftar adaptor Windows Device Manager.

Diagram ini menunjukkan tiga adaptor yang berbeda, dengan Adaptor #2 dicadangkan untuk digunakan oleh debugger kernel.

device manager showing the network node with a node for Windows KDNET 2PF supported network adapter.

Pesan kesalahan umum - menambahkan PF baru

C:\KDNET> kdnet -addpf 28.0.0 192.168.137.1 50005

Device Name:\\.\Mlx5Util

Pci Bus:28.0.0

PCI PF sudah dikonfigurasi pada port ini: Operasi PF Gagal Error=(0x80004004) pada perangkat debug. Perangkat debug tidak dikonfigurasi untuk KDNET.

  • Jangan tambahkan/hapus PF pada port akar tempat PF sudah ditambahkan.

Pesan kesalahan umum - menghapus PF

C:\KDNET> kdnet -removepf 28.0.1 192.168.137.1 50005

Adapter is not active: Error=(0x80070002)

Device Name:\\.\Mlx5Util

Pci Bus:28.0.1

Adaptor tidak aktif: Operasi PF Gagal Error=(0x80070002) pada perangkat debug. Perangkat debug tidak dikonfigurasi untuk KDNET

  • Jangan gunakan port PF yang ditambahkan dengan parameter baris perintah "-removepf/-addpf", karena operasi apa pun pada port PF yang ditambahkan akan mengakibatkan kegagalan (kesalahan: Adaptor tidak aktif pada port), karena driver kotak masuk NIC vendor disiapkan untuk secara tegas tidak berjalan pada PF yang ditambahkan.
  • Kedua opsi baris perintah (-addpf/-removepf) harus digunakan hanya pada perangkat PCI akar.
C:\KDNET> kdnet -removepf 28.0.0 192.168.137.1 50005

Device Name:\\.\Mlx5Util

Pci Bus:28.0.0

Tidak ada PF PCI untuk dihapus pada port ini: Operasi PF Gagal Error=(0x80004005) pada perangkat debug. Perangkat debug tidak dikonfigurasi untuk KDNET

  • Jika Anda menambahkan PF baru dan kemudian memutuskan untuk menghapusnya dengan me-reboot, itu akan mengakibatkan kegagalan, karena firmware NIC vendor memerlukan boot ulang/reset NIC HW sebelum dapat mengenali PF yang baru ditambahkan.

Pesan kesalahan umum - BCDEdit

NO_KDNIC tidak ada dalam penginstalan OS {default} BCD.

  • Tidak disarankan untuk menggunakan bcdedit.exe untuk memodifikasi/mengubah perangkat debug (dbgsettings) setelah menambahkan PF baru. Opsi baris perintah kdnet -addpf/removepf akan mengonfigurasi perangkat debug dan juga akan menambahkan/menghapus token secara otomatis NO_KDNIC ke/dari {default}::loadoptions.

Baca juga

Menyiapkan penelusuran kesalahan Kernel Jaringan KDNET secara otomatis

Menyiapkan Penelusuran Kesalahan Kernel Jaringan KDNET Secara Manual

Menyiapkan Debugging Mode Kernel melalui Kabel USB 3.0 Secara Manual

Menyiapkan Penelusuran Kesalahan Mode Kernel Secara Manual