AMD環境でKVM PCIパススルー (PT2で)

いろいろやってKVM PCIパススルーができた(ゲストOSでPT2を認識)ので環境・ポイントをメモ。

■HW

【M/B】BIOSTER TA890FXE
【CPU】AMD Phenom II X6 1055T
【Cooler】DEEPCOOL ICEEDGE 200U
【Memory】DDR3 SDRAM 4GB × 2, 2GB × 2
【VGA】Palit GeForce GTX 560 1GB (NE5X5600HD02-1142F)
【Sound】オンボード
【HDD】Western Digital WD30EZRX 3TB
【Drive】LG blu-ray かけるやつ
【Case】サイズの安いやつ
【Power】HEC WIN+ 700W HEC-700TE-2WX
【Other】PT1 × 1

PCIパススルーをするためにはIOMMU,AMD-Viに対応している「AMD890FX」チップセットが必要です。
今回は「BIOSTER TA890FXE」で。


■SW
【OS】Ubuntu Server 11.04
【Other】qemu-kvm 0.14.0+noroms-0ubuntu4.3
【Other】kvm-pxe 5.4.4-7ubuntu2
【Other】virt-manager 0.8.6-1ubuntu8.1

必要なパッケージはaptでインストール。
Ubuntu Serverを使ってますが、すぐubuntu-desktopをインストールしました。

後はvirt-managerを使ってゲストOSを作成する。
ゲストOSの設定で、PCI Host Deviceで PT2を追加。
※PT2はlspciで確認してください。
02:05.0 Multimedia controller: Xilinx Corporation Device 222a (rev 01)  ←これです

ゲストOSの開始前に以下のコマンドを実行。

# modprobe pci-stub
# echo "1002 4384" >/sys/bus/pci/drivers/pci-stub/new_id
# echo "0000:00:14.4" >/sys/bus/pci/drivers/pci-stub/unbind

※PCIはPCI bridgeの下についているので。

# lspci
00:00.0 Host bridge: ATI Technologies Inc RD890 Northbridge only single slot PCI-e GFX Hydra part (rev 02)
00:00.2 Generic system peripheral [0806]: ATI Technologies Inc Device 5a23
00:02.0 PCI bridge: ATI Technologies Inc RD890 PCI to PCI bridge (PCI express gpp port B)
00:11.0 SATA controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 SATA Controller [IDE mode] (rev 40)
00:12.0 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:12.2 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:13.0 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:13.2 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:14.0 SMBus: ATI Technologies Inc SBx00 SMBus Controller (rev 41)
00:14.1 IDE interface: ATI Technologies Inc SB7x0/SB8x0/SB9x0 IDE Controller (rev 40)
00:14.2 Audio device: ATI Technologies Inc SBx00 Azalia (Intel HDA) (rev 40)
00:14.3 ISA bridge: ATI Technologies Inc SB7x0/SB8x0/SB9x0 LPC host controller (rev 40)
00:14.4 PCI bridge: ATI Technologies Inc SBx00 PCI to PCI Bridge (rev 40)
00:14.5 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB OHCI2 Controller
00:15.0 PCI bridge: ATI Technologies Inc Device 43a0
00:15.1 PCI bridge: ATI Technologies Inc Device 43a1
00:16.0 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:16.2 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:18.0 Host bridge: Advanced Micro Devices [AMD] Family 10h Processor HyperTransport Configuration
00:18.1 Host bridge: Advanced Micro Devices [AMD] Family 10h Processor Address Map
00:18.2 Host bridge: Advanced Micro Devices [AMD] Family 10h Processor DRAM Controller
00:18.3 Host bridge: Advanced Micro Devices [AMD] Family 10h Processor Miscellaneous Control
00:18.4 Host bridge: Advanced Micro Devices [AMD] Family 10h Processor Link Control
01:00.0 VGA compatible controller: nVidia Corporation Device 1201 (rev a1)
01:00.1 Audio device: nVidia Corporation Device 0e0c (rev a1)
02:05.0 Multimedia controller: Xilinx Corporation Device 222a (rev 01)
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 03)
04:00.0 FireWire (IEEE 1394): VIA Technologies, Inc. VT6315 Series Firewire Controller
04:00.1 IDE interface: VIA Technologies, Inc. VT6415 PATA IDE Host Controller (rev a0)




# lspci -tv
-[0000:00]-+-00.0  ATI Technologies Inc RD890 Northbridge only single slot PCI-e GFX Hydra part
           +-00.2  ATI Technologies Inc Device 5a23
           +-02.0-[01]--+-00.0  nVidia Corporation Device 1201
           |            \-00.1  nVidia Corporation Device 0e0c
           +-11.0  ATI Technologies Inc SB7x0/SB8x0/SB9x0 SATA Controller [IDE mode]
           +-12.0  ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
           +-12.2  ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB EHCI Controller
           +-13.0  ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
           +-13.2  ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB EHCI Controller
           +-14.0  ATI Technologies Inc SBx00 SMBus Controller
           +-14.1  ATI Technologies Inc SB7x0/SB8x0/SB9x0 IDE Controller
           +-14.2  ATI Technologies Inc SBx00 Azalia (Intel HDA)
           +-14.3  ATI Technologies Inc SB7x0/SB8x0/SB9x0 LPC host controller
           +-14.4-[02]----05.0  Xilinx Corporation Device 222a
           +-14.5  ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB OHCI2 Controller
           +-15.0-[04]--+-00.0  VIA Technologies, Inc. VT6315 Series Firewire Controller
           |            \-00.1  VIA Technologies, Inc. VT6415 PATA IDE Host Controller
           +-15.1-[03]----00.0  Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller
           +-16.0  ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
           +-16.2  ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB EHCI Controller
           +-18.0  Advanced Micro Devices [AMD] Family 10h Processor HyperTransport Configuration
           +-18.1  Advanced Micro Devices [AMD] Family 10h Processor Address Map
           +-18.2  Advanced Micro Devices [AMD] Family 10h Processor DRAM Controller
           +-18.3  Advanced Micro Devices [AMD] Family 10h Processor Miscellaneous Control
           \-18.4  Advanced Micro Devices [AMD] Family 10h Processor Link Control





これでPCIパススルー(PT2を認識)ができました。



で、ここからはやってはいけないメモ。



下記のページを参考にやってました。
How to assign devices with VT-d in KVM - KVM

INTEL環境ではLinux起動オプションに"intel_iommu=on"を、AMD環境では"iommu=pt iommu=1"を追加するような記述があったので初めは"iommu=pt iommu=1"を追加していましたが、追加した状態だとできません。

dmesg | grep AMD-Vi
・起動オプションなし

 AMD-Vi: Enabling IOMMU at 0000:00:00.2 cap 0x40
 AMD-Vi: Lazy IO/TLB flushing enabled


・起動オプションあり

 AMD-Vi: Enabling IOMMU at 0000:00:00.2 cap 0x40
 AMD-Vi: Initialized for Passthrough Mode


※これでかなり迷った......
だってパススルーて書いてあるじゃん。

さらに「AMD890GX」チップセット(ASRock 890GX Extreme3)で起動オプションを追加したらUSBキーボード・マウスが壊れた。
また、PC切替器を使用していたのでそのUSBも動作がおかしい。


今回のことで無駄なお金がかなり......

コメント

このブログの人気の投稿

Rails Devise認証のカスタマイズメモ

Ubuntu 16.04 に Munin(CGI) + Nginx をインストール・設定