(続)Linux KVMでPCIパススルー。・・・残念(斬りっ!)

Ξ 4月 17th, 2012 | → 0 Comments | ∇ Linux, Windows, コンピュータ, ソフトウェア, ネットワーク, ハードウェア |

あれから、進展(後退?)したので、ご報告します。
えー、まだうまくいってません。というか、今現在対応不能になってます。

ここで、ホストマシンの接続構成をあげて起きます。

# lspci -vt
-+-[0000:ff]-+-00.0  Intel Corporation Xeon 5500/Core i7 QuickPath Architecture Generic Non-Core Registers
 |           +-00.1  Intel Corporation Xeon 5500/Core i7 QuickPath Architecture System Address Decoder
 |           +-02.0  Intel Corporation Xeon 5500/Core i7 QPI Link 0
 |           +-02.1  Intel Corporation Xeon 5500/Core i7 QPI Physical 0
 |           +-03.0  Intel Corporation Xeon 5500/Core i7 Integrated Memory Controller
 |           +-03.1  Intel Corporation Xeon 5500/Core i7 Integrated Memory Controller Target Address Decoder
 |           +-03.4  Intel Corporation Xeon 5500/Core i7 Integrated Memory Controller Test Registers
 |           +-04.0  Intel Corporation Xeon 5500/Core i7 Integrated Memory Controller Channel 0 Control Registers
 |           +-04.1  Intel Corporation Xeon 5500/Core i7 Integrated Memory Controller Channel 0 Address Registers
 |           +-04.2  Intel Corporation Xeon 5500/Core i7 Integrated Memory Controller Channel 0 Rank Registers
 |           +-04.3  Intel Corporation Xeon 5500/Core i7 Integrated Memory Controller Channel 0 Thermal Control Registers
 |           +-05.0  Intel Corporation Xeon 5500/Core i7 Integrated Memory Controller Channel 1 Control Registers
 |           +-05.1  Intel Corporation Xeon 5500/Core i7 Integrated Memory Controller Channel 1 Address Registers
 |           +-05.2  Intel Corporation Xeon 5500/Core i7 Integrated Memory Controller Channel 1 Rank Registers
 |           +-05.3  Intel Corporation Xeon 5500/Core i7 Integrated Memory Controller Channel 1 Thermal Control Registers
 |           +-06.0  Intel Corporation Xeon 5500/Core i7 Integrated Memory Controller Channel 2 Control Registers
 |           +-06.1  Intel Corporation Xeon 5500/Core i7 Integrated Memory Controller Channel 2 Address Registers
 |           +-06.2  Intel Corporation Xeon 5500/Core i7 Integrated Memory Controller Channel 2 Rank Registers
 |           \-06.3  Intel Corporation Xeon 5500/Core i7 Integrated Memory Controller Channel 2 Thermal Control Registers
 \-[0000:00]-+-00.0  Intel Corporation 5520/5500/X58 I/O Hub to ESI Port
             +-01.0-[01]--
             +-02.0-[02]----00.0  NEC Corporation uPD720200 USB 3.0 Host Controller
             +-03.0-[03]----00.0  NVIDIA Corporation G86 [GeForce 8400 GS]
             +-07.0-[04]--
             +-14.0  Intel Corporation 5520/5500/X58 I/O Hub System Management Registers
             +-14.1  Intel Corporation 5520/5500/X58 I/O Hub GPIO and Scratch Pad Registers
             +-14.2  Intel Corporation 5520/5500/X58 I/O Hub Control Status and RAS Registers
             +-14.3  Intel Corporation 5520/5500/X58 I/O Hub Throttle Registers
             +-1a.0  Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #4
             +-1a.1  Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #5
             +-1a.2  Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #6
             +-1a.7  Intel Corporation 82801JI (ICH10 Family) USB2 EHCI Controller #2
             +-1c.0-[06]--
             +-1c.2-[05]----00.0  Marvell Technology Group Ltd. 88E8056 PCI-E Gigabit Ethernet Controller
             +-1d.0  Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #1
             +-1d.1  Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #2
             +-1d.2  Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #3
             +-1d.7  Intel Corporation 82801JI (ICH10 Family) USB2 EHCI Controller #1
             +-1e.0-[07]--+-00.0  Oxford Semiconductor Ltd OX16PCI954 (Quad 16950 UART) function 0 (Uart)
             |            +-00.1  Oxford Semiconductor Ltd OX16PCI954 (Quad 16950 UART) function 1 (Disabled)
             |            +-01.0  Oxford Semiconductor Ltd OX16PCI954 (Quad 16950 UART) function 0 (Uart)
             |            \-01.1  Oxford Semiconductor Ltd OX16PCI954 (Quad 16950 UART) function 1 (Disabled)
             +-1f.0  Intel Corporation 82801JIR (ICH10R) LPC Interface Controller
             +-1f.2  Intel Corporation 82801JI (ICH10 Family) SATA AHCI Controller
             \-1f.3  Intel Corporation 82801JI (ICH10 Family) SMBus Controller

こんな感じでつながっているわけです。マザーボードは、「ASUS P6X58D-E」です。

ポイントなのが、07:00.0と07:01.0の「Oxford Semiconductor Ltd OX16PCI954」というやつ。
これは、PCI版のRS232C 4ポートカードです。2枚入ってます。I/O DATAの「RSA-PCI2/P4」です。
最近のマザーボードなので、PCIバスがPCIe to PCIブリッジ下にいるわけです。

で、これを2枚をPCIパススルーしたいわけなので、

# qemu-kvm -device pci-assign,host=07:00.0 -device pci-assign,host=07:01.0

と、QEMUに pci-assign オプションを加えて起動すると、

Failed to assign irq for "????": Operation not permitted
Perhaps you are assigning a device that shares an IRQ with another device?
Failed to initialize assigned device host=07:00.0

とQEMUに起こられてそもそも起動しない、という状況でした。
もんもんとすごしていたのですが、ふと

# qemu-kvm -device pci-assign,host=07:01.0

としたところ、なぜか起動(笑)。
WindowsXPが起動できました。もしかすると、2枚挿すと調子が悪いかもしれません(未検証)。

が、しかし起動後、ハードウェアウイザードで、RSA-PCI2/P4のドライバをインストールすると、

落ちた!!!

そう、QEMUが落ちてしまいます。で、logには、

Apr 16 01:01:05 eve kernel: device tap0 entered promiscuous mode
Apr 16 01:01:05 eve kernel: br0: new device tap0 does not support netpoll (disabling)
Apr 16 01:01:05 eve kernel: br0: port 2(tap0) entering learning state
Apr 16 01:01:05 eve kernel: br0: port 2(tap0) entering learning state
Apr 16 01:01:05 eve kernel: pci-stub 0000:07:01.0: PCI INT A -> GSI 17 (level, low) -> IRQ
 17
Apr 16 01:01:20 eve kernel: br0: port 2(tap0) entering forwarding state
Apr 16 01:01:55 eve kernel: qemu-kvm[13433] general protection ip:7ffee654f659 sp:4085dd80
 error:0 in qemu-system-x86_64_1_0[7ffee63b4000+2ff000]

Apr 16 01:01:55 eve kernel: qemu-kvm[13433] general protection

ってなんだー(泣)。

qemu-kvm 1.0が出ていたので、こっちも試しましたがまったくダメ(T_T)。
なんとなく、マザーボードのIOMMU対応に問題があるような気がしてきた・・・。
「ASUS P6X58D-E」の問題なのかも。IOMMUとMarvell 9128問題もあるし、RTCが認識できないとか、結構問題あり。

もうドツボデス(T_T)。

で、じつはなぜPCIパススルーをやることになった経緯は?というと、tel2comホストとパソ通ホストをRS-232Cでクロス接続したとき、XMODEM/YMODEMなどのバイナリ送受信がうまくいかなかったこと、がそもそもの原因です。仮想化によるデバイスのカプセル化による影響かと。
PCIパススルーすれば、仮想化の影響から開放されるかと思ったのですが、あまかった(笑)。
これはしばらくお預けです。

で、本当に問題なのかということで、下記の検証をしてみました。

仮想環境下のWindowsXP+tel2com < -> パソ通ホスト(物理マシン)

としてみました。パソ通ホストは物理的にあるマシンです。
で、やってみたところ、なんとXMODEM/YMODEMが使えるのです!!!。

え?どういうこと?

どうやら、パソ通ホストがMS-DOSで動いているわけですが、RS232CドライバにMCDPC.EXEを使っています。
QEMUのシリアルが、ISAで16550A互換ということなのですが、どうやら完全互換ではないようです。
FIFOの関係かなーとか考えていますが、まだよくわかりません。

hw/serial.c のソースプログラムと格闘中です(泣)。

夜寝られるかな・・・ww。

 

Leave a reply


*

About

    Place for about text

    The Munch theme is built with PS, brushes and patterns by milo IIIIVII.

    Open right sidebar.php in the theme folder to edit this message.
    Check my other themes too.

     

FlickR

    Solitude
    Solitude
    Solitude
    Solitude