2020年5月16日土曜日

Ascork X570M Pro4のオンボードUSBホストコントローラとUSBポート

ESXi 6.7でAsrock X570M Pro4のオンボードUSBホストコントローラをパススルー利用するため、USBホストコントローラとUSBポートの対応を調べました。

下記、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 |grep 0000:0[8d]
0000:08:00.0 Non-Essential Instrumentation: Advanced Micro Devices, Inc. [AMD] Starship/Matisse Reserved SPP
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.0 Non-Essential Instrumentation: Advanced Micro Devices, Inc. [AMD] Starship/Matisse Reserved SPP
0000:0d:00.1 Encryption controller: Advanced Micro Devices, Inc. [AMD] Starship/Matisse Cryptographic Coprocessor PSPCPP
0000:0d:00.3 USB controller: Advanced Micro Devices, Inc. [AMD] Matisse USB 3.0 Host Controller
0000:0d:00.4 Audio device: Advanced Micro Devices, Inc. [AMD] Starship/Matisse HD Audio Controller
PCIとUSBポートの対応は下記になります。
  • 0000:08:00.1 マザーボード上のUSB2ヘッダ
  • 0000:08:00.3 下図リアパネルの赤枠+マザーボード上のUSB3ヘッダ
  • 0000:0d:00.3 下図リアパネルの青枠

リアパネル (画像はAsrockのX570M Pro4の製品ページより)

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)

2020年5月6日水曜日

ESXi 6.7でPT3をPCIパススルー

ひとまず静音対策は置いておき、TV録画環境が移行できるか確認することにします。

Linux VM上でPT3を動作させるためESXiでPCIパススルー設定をしたのですが、リブート後も「有効/再起動が必要」と表示されたままアクティブになりません。
何か対処が必要なんだろうかと、VMKernel logを確認すると下記ワーニングが記録されていました。

cpu8:2097649)WARNING: PCIPassthru: PCIPassthruAllowed:175: Device passthru not possible on this system (no PCI ACS support)
cpu8:2097649)PCIPassthru: PCIPassthruAttachDev:217: Passthru not possible on device 0000:05:00.0

ログメッセージが若干異なりますが、VMware KBにある PCI Passthrough with PCIe devices behind a non-ACS switch in vSphere (1036811) が原因のようです。
PCIのAccess Control Services(ACS)を有効にする必要があるとのこと。

BIOSで設定すればいいだろうと確認したのですが、これがなかかな分かりにくい仕様でした。
デフォルト状態だとACS設定が非表示で、AER Capを有効にするとACS設定が出現するという分かり難さ。
ACS設定の説明欄には、AER Cap設定に依存する旨の記述がありましたが、そもそも表示されてなければ設定自体があるのかどうか分からないような...。
Advanced Error Reporting (AER) capabilityとACSの関係ってよく知られているものなのかな?

ASRock X570M Pro4では、下記BIOS設定でPT3をPCIパススルーで有効化できるようになります。もちろんIOMMUは有効にしておく必要があります。
  • Advanced > AMD CBS > NBIO Common Options > Enable AER Cap : Enabled
  • Advanced > AMD CBS > NBIO Common Options > ACS Enalbed: Auto (AER有効化後のデフォルトのまま)

安定性は追々確認するとして、取り敢えずVMでPT3を利用できることは確認できました。

ちなみにカードリーダーはUSBパススルーで利用しています。
オンボードのUSBホストコントローラをPCIパススルーしてVMでUSBキーボードを利用したかったのですが、動作させることが出来ませんでした。

2020年5月4日月曜日

FreeNAS on ESXi

FreeNASは、下記リソースのVMにインストールしました。
  • vCPU: 2
  • memory: 16GB
  • HDD: 32GB (ローカルデータストア)
  • HDD: RDM Disk x8
  • NIC: VMXNET3 x2
インストールは特に問題なく完了。
プールは、RDMしたHDD8台で作成し問題なく動作したのですが...。
煩い、シーク音がとても煩い。
FreeNAS単体で動作させた状態でも何か書き込みをしているらしく、数秒毎にシーク音がします。

SeagateのHDDは、ST3000MD002, ST3000MD007, ST4000DM004をそれなりの数を利用してきたのですが、シーク音が煩いと感じたことがありませんでした。

今回のPCは、 2年に組んだPCと同型のPCケースを使っているのでケースの静音性は同一で比較しやすく、並べて聴き比べるとST4000DM004が「ククククク」、ST6000DM003は「ピリピリピリパリパリ」という感じで高音で耳障りな音がし、音量も大きいように思います。
音を文字で表現するのは難しいのですが雰囲気は伝わりますかね?

BarraCuda 3.5 HDDの仕様書 にあるマニュアルを確認すると3TB,4TBモデルと6TBモデルでは、ディスク数が異なるようなのでこの影響だろうか?
いずれにしても、これでは現行PCのリプレースとして居室で24H稼動は厳しいかもしれない。
他HDDを試すとしたらコスト的にWesternDigitalのWD60EZAZ-RTあたりだけど、うーん。

FreeNASの定期的な書き込みについては、レポート情報の書き込みらしく、System > System DatasetのSystem Dataset Poolを変更すれば出力先を変更できるようです。
とりあえず、HDDのプールではなくfreenas-bootに変更したところ、FreeNAS単体動作時のHDDシーク音はしなくなりました。まあ、freenas-bootだとブートディスク(SSD)に書き込むことになるので、別な意味で心配な感じではあります。

RDM on ESXi 6.7

ESXi 6.7は、次の構成を考えています。
  • FreeNAS(VM)をESXiのローカルデータストアから起動する。
  • FreeNASは、iSCSIかNFSでHDD領域を公開する。
  • ESXiは、FreeNASの領域をデータストアとして利用する。
  • その他VMは、FreeNASのデータストアから起動する。

伝わるだろうか?簡単な図にするとこんな感じになります。
+ESXi 
|
+SSD==datastore(local)==+FreeNAS
|                       |
+HDD==(RDM)=============+datastore(iSCSI or NFS)+VM1
                                                +VM2
                                                +VM3
ESXiとFreeNASは、USBデバイスからの起動も可能でサイズも小さいため冗長化していないNVMe SSDから起動させても障害時の対応が容易だろうとの考えです。
設定情報を保存しておけば、再インストールが必要になっても大した手間をかけず復旧できるかなと考えています。

HDDはZFSで利用したい。FreeBSDやLinuxでZFSを利用してもいいのですが、せっかくVMにするのなら用途を絞って楽に管理したとの思いからFreeNASを利用することにしました。FreeNASは初めて使いますがFreeBSDベースなので問題ないかなと思っています。

で、特にハマることなく構築できました。
RDM(Raw Device Mapping)の設定についてメモしておきます。
RDMはVMware Host Clientだけでは設定できないようで、ESXiにsshログインしvmkfstoolsコマンド操作が必要でした。

まず、HDDのデバイス名を調べます。
$ ls /vmfs/devices/disks/*ATA* 
/vmfs/devices/disks/t10.ATA_____ST6000DM0032D2CY186__________________________________WCTaaaaa
/vmfs/devices/disks/t10.ATA_____ST6000DM0032D2CY186__________________________________WCTbbbbb
/vmfs/devices/disks/t10.ATA_____ST6000DM0032D2CY186__________________________________WCTccccc
/vmfs/devices/disks/t10.ATA_____ST6000DM0032D2CY186__________________________________WCTddddd
/vmfs/devices/disks/t10.ATA_____ST6000DM0032D2CY186__________________________________WCTeeeee
/vmfs/devices/disks/t10.ATA_____ST6000DM0032D2CY186__________________________________WCTfffff
/vmfs/devices/disks/t10.ATA_____ST6000DM0032D2CY186__________________________________WCTggggg
/vmfs/devices/disks/t10.ATA_____ST6000DM0032D2CY186__________________________________WCThhhhh
$ 
名前が長いですね。ファイル名の末尾がシリアル番号のようです。

次に適当なディレクトリを作成し、vmkfstoolsでRDMを作成します。
RDMには仮想互換モードと物理互換モードがあるようですが、今回は物理互換モードで設定します。
仮想互換モードでは、スナップショットなども利用できるようです。
最後の引数のファイル名は何でもいいのですが、シリアル番号が分かるようにしておくとメンテナンスが楽になるかもしれません。

$ mkdir rdm
$ cd rdm
$ vmkfstools -z /vmfs/devices/disks/t10.ATA_____ST6000DM0032D2CY186__________________________________WCTaaaaa ST6000DM0032D2CY186_WCTaaaaa.vmdk
$ vmkfstools -z /vmfs/devices/disks/t10.ATA_____ST6000DM0032D2CY186__________________________________WCTbbbbb ST6000DM0032D2CY186_WCTbbbbb.vmdk
$ vmkfstools -z /vmfs/devices/disks/t10.ATA_____ST6000DM0032D2CY186__________________________________WCTccccc ST6000DM0032D2CY186_WCTccccc.vmdk
$ vmkfstools -z /vmfs/devices/disks/t10.ATA_____ST6000DM0032D2CY186__________________________________WCTddddd ST6000DM0032D2CY186_WCTddddd.vmdk
$ vmkfstools -z /vmfs/devices/disks/t10.ATA_____ST6000DM0032D2CY186__________________________________WCTeeeee ST6000DM0032D2CY186_WCTeeeee.vmdk
$ vmkfstools -z /vmfs/devices/disks/t10.ATA_____ST6000DM0032D2CY186__________________________________WCTfffff ST6000DM0032D2CY186_WCTfffff.vmdk
$ vmkfstools -z /vmfs/devices/disks/t10.ATA_____ST6000DM0032D2CY186__________________________________WCTggggg ST6000DM0032D2CY186_WCTggggg.vmdk
$ vmkfstools -z /vmfs/devices/disks/t10.ATA_____ST6000DM0032D2CY186__________________________________WCThhhhh ST6000DM0032D2CY186_WCThhhhh.vmdk
$

成功するとファイル名に「-rdmp」がついたファイルが増えていました。
$ ls -1
ST6000DM0032D2CY186_WCTaaaaa-rdmp.vmdk
ST6000DM0032D2CY186_WCTaaaaa.vmdk
ST6000DM0032D2CY186_WCTbbbbb-rdmp.vmdk
ST6000DM0032D2CY186_WCTbbbbb.vmdk
ST6000DM0032D2CY186_WCTccccc-rdmp.vmdk
ST6000DM0032D2CY186_WCTccccc.vmdk
ST6000DM0032D2CY186_WCTddddd-rdmp.vmdk
ST6000DM0032D2CY186_WCTddddd.vmdk
ST6000DM0032D2CY186_WCTeeeee-rdmp.vmdk
ST6000DM0032D2CY186_WCTeeeee.vmdk
ST6000DM0032D2CY186_WCTfffff-rdmp.vmdk
ST6000DM0032D2CY186_WCTfffff.vmdk
ST6000DM0032D2CY186_WCTggggg-rdmp.vmdk
ST6000DM0032D2CY186_WCTggggg.vmdk
ST6000DM0032D2CY186_WCThhhhh-rdmp.vmdk
ST6000DM0032D2CY186_WCThhhhh.vmdk
$
ここまでくればVMware Host Clientで仮想マシンの編集>ハードディスクの追加でvmdkファイルを選択できるようになります。

下記参照URL
vmkfstools コマンドのオプション
物理互換モードの Raw デバイス マッピングの作成
RDM の仮想および物理互換モード

2020年5月3日日曜日

SyntaxHighlighterが動かなくなっていた

しばらく更新していなかったので気がつきませんでしたが、SyntaxHighlighterが上手く動かなくなっていました。

オリジナルサイトのhostingを利用させてもらっていたのですが、shBrushPerl.jsがNot Foundになっていました。 どうもhttpsにリダイレクトされた先にファイルがない感じ。

下記CDNでも提供されているようなので、こちらを利用させてもらうことにしました。

https://cdnjs.com/libraries/SyntaxHighlighter

Bloggerの「テーマ> HTMLの編集」で該当URLを修正して対応完了。 ついでにHTTPSリダイレクトも有効にしておきました。

2020年5月2日土曜日

Transcend PCIe SSD200SはESXi 6.7で認識されない

NVMe SSDにESXi 6.7をインストールしようとしたのですが、Transcend PCIe SSD200Sはディスクとして認識されませんでした。
コスパでパーツを選択したので、ESXiで利用できるかどうかは調査していませんでした…。

仕方がないのでUSBメモリにインストール後確認すると、PCIデバイスとしては認識されているようです。
NVMeドライバについて調べてみると、Crucial NVMe SSDがESXiのアップグレードで認識されなくなると情報があったので試してみるとディスクとして認識させることができました。

Quick Tip – Crucial NVMe SSD not recognized by ESXi 6.7

ESXi6.5 Update2のドライバを利用すれば良いようなので、ESXi650-201905001の1.2.1.34-1vmw.650.2.50.8294253を利用すると認識されるようになります。
パッチの内容を確認するとESXi650-201912002からドライバが変更になっているようでした。
  • ESXi650-201905001
  • vib20/nvme/VMW_bootbank_nvme_1.2.1.34-1vmw.650.2.50.8294253.vib

  • ESXi650-201912002
  • vib20/nvme/VMW_bootbank_nvme_1.2.2.28-1vmw.650.3.96.13932383.vib

しばらくUSBブートで利用していましたが、ブートデバイスをSSDにしたかったのでIntel SSD 760pを買い足してしまいました。
パッチ当てが面倒なので、SSD200SはRDMで利用することにします。