2020年5月14日木曜日

ESXi 6.7でオンボードUSBホストコントローラのパススルー

Asrock X570M Pro4のオンボードUSBホストコントローラをESXi 6.7でPCIパススルーできました。

当初、PCIパススルー設定をして仮想マシンを起動すると、下記メッセージが表示されパワーオンに失敗していました。

モジュール「DevicePowerOn」のパワーオンに失敗しました。
ハードウェアまたはソフトウェアのサポートが使用できないため、デバイス pciPassthru0 の 13:0.3 への登録に失敗しました。
仮想マシンの起動に失敗しました。

この時に仮想マシンのログ(vmware.log)には、次の記録が残っていました。
vmx| I125: PCIPassthru: Failed to register device 0000:0d:00.3  error = 0xffffffff
vmx| I125: Msg_Post: Error
vmx| I125: [msg.pciPassthru.createAdapterFailedPlatformNotSupported] Failed to register the device pciPassthru0 for 013:00.3 due to unavailable hardware or software support.
vmx| I125: ----------------------------------------
vmx| I125: Module 'DevicePowerOn' power on failed.
vmkernel.logには、次の記録がありました。
cpu10:2100020)WARNING: PCI: 384: Dev @ 0000:0d:00.3 did not complete its pending transactions prior to being reset; will apply the reset anyway but this may cause PCI errors
cpu7:2100020)WARNING: PCI: 471: Dev 0000:0d:00.3 is unresponsive after reset
ふと、リセット設定をすれば上手くいくのでは?と思い試したところうまく行きました。

リセット設定は、ESXiの/etc/vmware/passthru.mapに記述するようです。
フォーマットの説明はファイルの初めの方に記載されていますが、vendor-id device-id resetMethod fptShareableの順で記述します。

vendor-idとdevice-idは、次のようにlspciで調べることができます。
[root@esxi:~] lspci |grep -i usb
0000:08:00.1 USB controller: Advanced Micro Devices, Inc. [AMD] Matisse USB 3.0 Host Controller 
0000:08:00.3 USB controller: Advanced Micro Devices, Inc. [AMD] Matisse USB 3.0 Host Controller 
0000:0d:00.3 USB controller: Advanced Micro Devices, Inc. [AMD] Matisse USB 3.0 Host Controller 

[root@esxi:~] lspci -n |grep -E '0000:0(8:00.[13]|d:00.3)'
0000:08:00.1 Class 0c03: 1022:149c 
0000:08:00.3 Class 0c03: 1022:149c 
0000:0d:00.3 Class 0c03: 1022:149c 
上記からvendor-idが1022、device-idが149cとなります。 ファイル内の他デバイスの記載を参考にresetMethodをd3d0、fptShareableはdefaultで指定しました。
[root@esxi:~] tail -2 /etc/vmware/passthru.map 
# AMD USB host controller
1022  149c  d3d0     default
この設定で0000:0d:00.3のコントローラはPCIパススルーで利用できるようになりました。
仮想マシンも問題なく起動します。

また、0000:08:00.1と0000:08:00.3は、PCIデバイスの設定でパススルーをアクティブにできなかったのですが、上記調査中にvmkernel.logに下記を見つけました。
0:00:00:04.808 cpu0:2097152)PCI: 1305: Found a PCIe-to-PCIe bridge at 0000:00:08.1                        
0:00:00:04.808 cpu0:2097152)PCI: 423: 0000:00:08.1: PCIe v2 PCI Express Root Complex Port                 
0:00:00:04.808 cpu0:2097152)PCI: 427: Not a ACS capable device                                            
0:00:00:04.808 cpu0:2097152)PCI: 488: 0000:00:08.2: PCIe v2 PCI Express Root Complex Port                 
0:00:00:04.808 cpu0:2097152)PCI: 248: 0000:00:08.2: Found support for extended capability 0xb (Vendor Spec
0:00:00:04.808 cpu0:2097152)PCI: 248: 0000:00:08.2: Found support for extended capability 0x19 (Secondary 
0:00:00:04.808 cpu0:2097152)PCI: 248: 0000:00:08.2: Found support for extended capability 0x25 (Data Link 
0:00:00:04.808 cpu0:2097152)PCI: 248: 0000:00:08.2: Found support for extended capability 0x26 (Physical L
0:00:00:04.808 cpu0:2097152)PCI: 248: 0000:00:08.2: Found support for extended capability 0x27 (Lane Margi
0:00:00:04.808 cpu0:2097152)PCI: 1305: Found a PCIe-to-PCIe bridge at 0000:00:08.2                        
0:00:00:04.808 cpu0:2097152)PCI: 423: 0000:00:08.2: PCIe v2 PCI Express Root Complex Port                 
0:00:00:04.808 cpu0:2097152)PCI: 427: Not a ACS capable device                                            
0:00:00:04.808 cpu0:2097152)PCI: 488: 0000:00:08.3: PCIe v2 PCI Express Root Complex Port                 
0:00:00:04.808 cpu0:2097152)PCI: 248: 0000:00:08.3: Found support for extended capability 0xb (Vendor Spec
0:00:00:04.808 cpu0:2097152)PCI: 248: 0000:00:08.3: Found support for extended capability 0x19 (Secondary 
0:00:00:04.808 cpu0:2097152)PCI: 248: 0000:00:08.3: Found support for extended capability 0x25 (Data Link 
0:00:00:04.808 cpu0:2097152)PCI: 248: 0000:00:08.3: Found support for extended capability 0x26 (Physical L
0:00:00:04.808 cpu0:2097152)PCI: 248: 0000:00:08.3: Found support for extended capability 0x27 (Lane Margi
0:00:00:04.808 cpu0:2097152)PCI: 1305: Found a PCIe-to-PCIe bridge at 0000:00:08.3                        
0:00:00:04.808 cpu0:2097152)PCI: 423: 0000:00:08.3: PCIe v2 PCI Express Root Complex Port                 
0:00:00:04.808 cpu0:2097152)PCI: 427: Not a ACS capable device                                            
「Not a ACS capable device」とあるので、ACSを無効化すれば動作するようです。
試しに、ESXiのシステム>詳細設定でVMkernel.Boot.disableACSCheckをtrueに設定したところアクティブにでき、それぞれ仮想マシンからも利用できました。

参考URL
vSphere VMDirectPath I/O and Dynamic DirectPath I/O: Requirements for Platforms and Devices (2142307)

0 件のコメント:

コメントを投稿