Поделиться через


Настройка отладки в режиме ядра 2PF с помощью KDNET

Средства отладки для Windows поддерживают отладку ядра по сетевому кабелю с помощью нескольких физических функций (PFS) на поддерживаемых сетевых адаптерах путем секционирования пространства конфигурации PCI.

При отладке 2PF каждый PF может быть подключен к одному сетевому порту, поэтому он позволяет подключать функции отладки ядра к одной PF, а стандартный сетевой стек взаимодействует с другим PF. Из-за этого KDNIC не требуется маршрутизировать сетевой трафик Windows через KDNET, и KDNET будет отвечать только за маршрутизацию трафика отладчика ядра узла. Это приводит к резкому увеличению производительности.

В этом разделе описывается настройка отладки 2PF с помощью служебной программы kdnet.exe.

Поставщики сетевых карт рекомендуется включить поддержку этой функции. Дополнительные сведения см. в разделе "Поддержка сетевого драйвера miniport для отладчика 2PF KDNET".

Два драйвера будут выполняться по секционированного пространства конфигурации PCI

  • Драйвер папки "Входящие" Windows выйдет из основного сетевого порта в bus.dev.fun0.0 PCI location.

  • The KDNET-Ext. модуль завершится из добавленного PF в bus.dev.fun0.1, этот метод гарантирует, что драйвер сетевого адаптера для Windows в папке "Входящие" не влияет на общий доступ к сетевой адаптеру с KDNET.

Компьютер, на котором выполняется отладчик, называется главным компьютером, а отлаживаемый компьютер называется целевым компьютером.

Требования к устройству в режиме ядра 2PF

Требуется следующее:

  • На целевом компьютере поддерживается сетевая карта 2PF.

  • На хост-компьютере сетевая карта.

  • Сетевое подключение между целевым объектом и узлом.

  • Windows 10 Build 21313 и более поздних версий.

Поддерживаемые сетевые карты 2PF

Поставщики, такие как NVIDIA Mellanox и Cisco, предоставляют сетевые адаптеры, поддерживающие отладку сети 2PF. Обратитесь к поставщику сетевой карты, чтобы узнать, какие модели сетевой карты поддерживаются. Обратите внимание, что некоторые поставщики поддерживают 2PF в подсети сетевых карт, которые используют один и тот же идентификатор PnP.

Используйте kdnet.exe для подтверждения поддержки устройств и просмотра значения busparams

Используйте программу kdnet.exe для отображения сведений о параметрах для контроллеров, поддерживающих отладку транспорта KDNET 2PF.

  1. Убедитесь, что средства отладки Windows установлены в хост-системе. Сведения о скачивании и установке средств отладчика см. в разделе "Средства отладки" для Windows.

  2. Найдите файлы kdnet.exe и VerifiedNICList.xml. По умолчанию они расположены здесь.

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

  3. На хост-компьютере скопируйте два файла в сетевую общую папку или диск с большими пальцами, чтобы они были доступны на целевом компьютере.

  4. На целевом компьютере создайте C:\KDNET каталог и скопируйте kdnet.exe и VerifiedNICList.xml файлы в этот каталог.

  5. На целевом компьютере откройте окно командной строки от имени администратора. Введите эту команду, чтобы убедиться, что целевой компьютер имеет поддерживаемый сетевой адаптер и просмотреть значение 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)
    

    Так как выходные данные, показанные выше, не включают "KDNET выполняется на этом сетевом адаптере". Это означает, что традиционная отладка KDNET не включена ни в одном из адаптеров.

    Если сетевая карта не поддерживает несколько функций PF, уведомление о состоянии PF о поддержке нескольких физических функций будет опущено (пусто) из отображаемых сведений.

    Если сетевая карта поддерживает несколько PF, фактические отображаемые сведения будут зависеть от сочетания сетевого порта (корневого порта или добавленного порта PF), а также состояния подключения или отключения кабеля к физическому порту сетевого адаптера.

    В этой таблице приведены различные уведомления PF для основной сетевой карты.

    Адаптер сетевого адаптера bus.dev.fun соответствует Состояние кабеля Состояние PF
    original (primary) Подключенный кабель PF Основная функция, включена несколько физических функций.
    original (primary) Кабель PF отключен Основная функция, поддерживаются несколько физических функций.

    В этой таблице перечислены различные уведомления PF для вторичной сетевой карты.

    Адаптер сетевого адаптера bus.dev.fun соответствует Состояние кабеля Состояние PF
    новый (вторичный) порт PF Kdnet работает Вторичная функция
    новый (вторичный) порт PF состояние отключенного или неизвестного кабеля Основная функция, включена несколько физических функций, но вторичная функция не используется
  6. Если выходные данные из kdnet.exe указывают на доступность поддерживаемого контроллера сетевого адаптера, мы можем продолжить.

Настройка целевого компьютера для 2PF

Используйте программу kdnet.exe, чтобы настроить параметры отладчика на целевом компьютере для 2PF, выполнив следующие действия.

Внимание

Прежде чем использовать bcdedit для изменения сведений о загрузке, может потребоваться временно приостановить функции безопасности Windows, такие как BitLocker и безопасная загрузка на тестовом компьютере. После завершения работы можно повторно включить Bit Locker и безопасную загрузку с помощью BCDEdit для обновления сведений о загрузке. При отключении функций безопасности необходимо управлять тестируемым компьютером.

Этот процесс добавит новую физическую функцию (PF) в сетевую карту, указанную в параметре bus.device.function. Новый PF можно использовать только KDNET, так как драйвер папки "Входящие" Windows настроен не для запуска в добавленном дополнительном PF. Выполните следующие действия, чтобы добавить новый PF, который будет использоваться устройством отладки.

Убедитесь, что отладка отключена перед добавлением новой физической функции

  1. Используйте команду BCDEdit, чтобы убедиться, что KD отключена на целевом объекте перед добавлением нового PF в сетевом адаптере. Это необходимо, чтобы обеспечить загрузку стандартного драйвера сетевого адаптера поставщика, чтобы его можно было использовать для добавления нового PF.
C:\> bcdedit /enum 
...

debug           No

В качестве альтернативы используйте kdnet.exe без параметров, чтобы узнать, включена ли отладка. В выходных данных ниже показана KDNET, запущенная в системе с включенной отладкой на одном сетевом адаптере. Это устаревшая настройка более низкой производительности.


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. Если для параметра отладки задано значение "Да", используйте команду set для отключения отладки.
C:\> bcdedit.exe /debug off
C:\> bcdedit.exe /set {default} bootdebug off
C:\> bcdedit.exe /set {bootmgr} bootdebug off
  1. shutdown -r -t 0 Используйте команду из командной строки администратора для перезагрузки.

После перезапуска целевого компьютера и отладки можно добавить новую физическую функцию.

Добавление новой физической функции

  1. Откройте командную строку с повышенными привилегиями и выполните следующую команду, чтобы добавить второй PF. Все значения предоставляются с помощью десятичных значений.
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 — порт расположения PCI адаптера сетевого адаптера, поддерживающего несколько функций PF, поэтому новый PF будет добавлен или подключен к этому сетевому устройству.

-addpf параметр включает автоматическую отладку ядра через транспорт KDNET на добавленном порту PF.

[host name/host ip address] — это TCP/IP-адрес хост-компьютера. ipconfig Используйте команду на хост-компьютере, чтобы определить этот адрес.

[port number] — номер порта TCP/IP. Вы можете выбрать любой номер порта от 49152 до 65535. Рекомендуемый диапазон составляет от 50000 до 50039. Порт, который вы выбрали, будет открыт для эксклюзивного доступа отладчиком, запущенным на хост-компьютере. Выберите уникальный адрес порта для каждой пары целевых или узлов, с которыми вы работаете, в рекомендуемом диапазоне от 50000 до 50039. В примере показано значение 50005.

Обратите внимание, что -addpf также добавит атрибут в NO_KDNIC установку ОС {default} loadoptions. Это связано с тем, что KDNIC больше не требуется для запуска поверх KDNET.

Loadoptions = NO_KDNIC добавляется в тег ОС {default}, чтобы убедиться, что kdnic.sys не будет выходить из только что добавленного pf (141.0.1)

Используйте команду bcdedit, чтобы убедиться, что NO_KDNIC задано.

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. Скопируйте возвращенный ключ в блокнот .txt-файл. В приведенном примере созданный ключ имеет значение:

    2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p

  2. При необходимости используйте kdnet.exe для подтверждения включения нескольких физических функций.

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)

Отключение брандмауэра на узле

На узле отключите брандмауэр для порта отладчика.

Подключение WinDbg к целевому объекту для отладки ядра

На хост-компьютере откройте WinDbg. В меню "Файл" выберите "Отладка ядра". В диалоговом окне отладки ядра откройте вкладку Net . Вставьте номер порта и ключ, сохраненный в блокноте, .txt файла ранее. Нажмите ОК.

Вы также можете запустить сеанс WinDbg, открыв окно командной строки и введя следующую команду, где выбран порт выше, и является ключом, возвращенным kdnet.exe выше. Вставьте ключ, сохраненный в блокноте, .txt файл ранее.

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

Перезагрузка целевого компьютера

После подключения отладчика перезагрузите целевой компьютер. Одним из способов перезагрузки компьютера является использование shutdown -r -t 0 команды из командной строки администратора.

После перезапуска целевого компьютера отладчик должен подключаться автоматически.

После перезагрузки компьютера встроенное ПО сетевого адаптера назначит новый MAC-адрес только что добавленной KDNET PF, а dbgsettings::busparams будет указывать на только что добавленный PF.

Поиск MAC-адреса для адаптера 2PF

Так как недавно добавленный PF является настроенным портом шины PCI, будет присвоено новое значение MAC-адреса, назначенное только что добавленному встроенному ПО сетевого адаптера. В настоящее время средство kdnet.exe не поддерживает отображение MAC-адреса для добавленного 2PF.

Существует два способа поиска нового MAC-адреса:

Использование WinDbg/KD с локальным сеансом KD

Запустите отладчик локального ядра windbg.exe -kl в целевом объекте.

Убедитесь, что у вас есть доступ к файлу символа kdnet.pdb, выполнив reload /f kdnet.dll

Выполните команду Kdtargetmac , чтобы получить 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

Запуск поставщиком предоставленных средств встроенного ПО

Один из способов найти MAC-адрес — запустить средства встроенного ПО, предоставляемые поставщиком. Сведения о скачивании, установке и использовании средств поставщика см. в поставщике сетевых адаптеров.

... 
Base MAC:              98039baa757c           4

Найдите поле MAC-адреса. Вычислите значение MAC-адреса KDNET 2PF путем последовательного добавления одного из последних цифр корневого MAC-устройства. Таким образом, для корневого 98039baa757cустройства с адресом, устройство KDNET 2PF будет иметь адрес 98039baa757d.

Восстановление предыдущего состояния конфигурации— удаление второго pci PF

Вы можете удалить ранее добавленный PF с устройства с помощью kdnet -removepf параметра и исходного значения bus.device.function . PF будет отсоединен от сетевой карты, а ресурс, назначенный PF, будет выпущен встроенного ПО сетевого адаптера.

Чтобы удалить KDNET PF с устройства, откройте командную строку с повышенными привилегиями и выполните следующую команду.

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

Где bus.dev.fun находится порт расположения PCI адаптера сетевого адаптера, где PF был первоначально подключен. Это то же расположение PCI, первоначально переданное в kdnet -addpf.

Использование параметра -removepf также повторно включает отладку ядра через KDNET на исходном bus.dev.fun.

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.

Команда kdnet.exe -removepf также удаляет атрибут NO_KDNIC из установки ОС {default} loadoptions, так как KDNET будет включен в исходном bus.dev.fun, то есть dbgsettings::busparams будет указывать на исходный сетевой порт. Это приведет к повторному использованию KDNIC, обеспечивая сетевое подключение снова на вершине KDNET.

После удаления PF необходимо перезагрузить компьютер для применения изменений BCD.

shutdown -r -t 0

Устранение неполадок конфигурации адаптера узла

Проверка наличия адаптера 2PF в диспетчере устройств

Вы можете убедиться, что KDNET PF был добавлен успешно, проверив новый адаптер сетевого адаптера новый порт bus.dev.fun в списке адаптеров Windows диспетчер устройств.

На этой схеме показаны три разных адаптера с адаптером #2, зарезервированным для использования отладчиком ядра.

диспетчер устройств, показывающий сетевой узел с узлом для поддерживаемого сетевого адаптера Windows KDNET 2PF.

Распространенные сообщения об ошибках— добавление нового PF

C:\KDNET> kdnet -addpf 28.0.0 192.168.137.1 50005

Device Name:\\.\Mlx5Util

Pci Bus:28.0.0

Pci PF уже настроен на этом порту: Ошибка=(0x80004004) Сбой операции PF на устройстве отладки. Устройство отладки не настроено для KDNET.

  • Не добавляйте и не удаляйте PF в корневом порту, где он уже добавлен в качестве PF.

Распространенные сообщения об ошибках— удаление 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

Адаптер не активен: ошибка=(0x80070002) сбой операции PF на устройстве отладки. Устройство отладки не настроено для KDNET

  • Не используйте добавленный порт PF с параметром командной строки "-removepf/-addpf", так как любая операция с добавленным портом PF приведет к сбою (ошибка: адаптер не активен на порту), так как драйвер входящие сетевого адаптера поставщика настроен для явного не запуска в добавленном PF.
  • Оба параметра командной строки (-addpf/-removepf) должны использоваться только на корневом устройстве PCI.
C:\KDNET> kdnet -removepf 28.0.0 192.168.137.1 50005

Device Name:\\.\Mlx5Util

Pci Bus:28.0.0

На этом порту не требуется удалить PCI PF: Ошибка=(0x80004005) Не удалось выполнить операцию PF на устройстве отладки. Устройство отладки не настроено для KDNET

  • Если вы добавите новый PF, а затем решите удалить его перезагрузку w/o, это приведет к сбою, так как встроенное ПО поставщика сетевого адаптера требует перезагрузки или сброса сетевого адаптера HW, прежде чем он сможет распознать только что добавленный PF.

Распространенные сообщения об ошибках — BCDEdit

NO_KDNIC отсутствует в установке ОС BCD {default}.

  • Не рекомендуется использовать bcdedit.exe для изменения и изменения устройства отладки (dbgsettings) после добавления нового PF. Параметры командной строки kdnet -addpf/removepf настраивают отладочное устройство, а также автоматически добавляют или удаляют NO_KDNIC маркер в /из него {default}::loadoptions.

См. также

Автоматическая настройка отладки сетевого ядра KDNET

Настройка отладки сетевого ядра KDNET вручную

Настройка отладки в режиме ядра USB 3.0 xHCI-DBC (KDUSB)

Настройка отладки режима ядра USB KDNET EEM (KDNET-EEM-USB)

Настройка отладки в режиме ядра вручную