KVM+FreeBSD+82599 10G NIC doesn't work.
GemaEvor
legumen at foxmail.com
Thu May 16 07:45:21 UTC 2013
Hi gurus:
I'm working on a FreeBSD virtulizaion project under KVM.
Everything works fine, except the 10G Intel 82599 SFP NIC.
I'm sure there are some body else who have encountered this problem before. See:
FreeBSD guest with VTD NIC not passing traffic
http://comments.gmane.org/gmane.comp.emulators.kvm.devel/83806
VT-d not working for FreeBSD 9.0 guest
http://permalink.gmane.org/gmane.comp.emulators.kvm.devel/91074
But, unfortunately, none of them solved it or gave the clearly way to solve it. :<
Firstly, let's make it clearly. This problem could not be reproduced with:
1. Xen hypervisor + FreeBSD guest os
2. or KVM + Linux guest os (e.g. Fedora 12)
So, it must be something wrong with KVM or FreeBSD.
Here is my environment:
Host OS:
OpenSUSE 12.2
Linux linux-kj2u 3.4.6-2.10-desktop #1 SMP PREEMPT Thu Jul 26 09:36:26 UTC 2012 (641c197) x86_64 x86_64 x86_64 GNU/Linux
QEMU emulator version 1.1.1 (kvm-1.1.1-1.8.1), Copyright (c) 2003-2008 Fabrice Bellard
Guest OS:
FreeBSD 9.1 amd64
What I did:
1.Make the pci device of 82599SFP assignale:
[CODE]
0d:00.0 Ethernet controller: Intel Corporation 82599EB 10-Gigabit SFI/SFP+ Network Connection (rev 01)
Subsystem: QLogic, Corp. Device 00e4
Flags: fast devsel, IRQ 25
Memory at f8fe0000 (64-bit, prefetchable) [size=128K]
I/O ports at cc00 [size=32]
Memory at f8fdc000 (64-bit, prefetchable) [size=16K]
Capabilities: [40] Power Management version 3
Capabilities: [50] MSI: Enable- Count=1/1 Maskable+ 64bit+
Capabilities: [70] MSI-X: Enable- Count=64 Masked-
Capabilities: [a0] Express Endpoint, MSI 00
Capabilities: [e0] Vital Product Data
Capabilities: [100] Advanced Error Reporting
Capabilities: [140] Device Serial Number 00-00-00-ff-ff-00-00-00
Capabilities: [150] Alternative Routing-ID Interpretation (ARI)
Capabilities: [160] Single Root I/O Virtualization (SR-IOV)
Kernel driver in use: pci-stub
[/CODE]
2. Passthrough it to the guest FreeBSD os. Here is my vm configuration file
[FILE]
<domain type='kvm'>
<name>FreeBSD9.1</name>
<uuid>4d56613e-400c-f37d-2a9a-e0332d81ca63</uuid>
<memory>2097152</memory>
<currentMemory>2097152</currentMemory>
<vcpu>2</vcpu>
<os>
<type arch='x86_64' machine='pc'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<pae/>
<apic/>
<acpi/>
</features>
<clock offset='utc'>
</clock>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/bin/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='default'/>
<source file='/home/vm/FreeBSD9.1/FreeBSD9.1.raw'/>
<target dev='hdc'/>
</disk>
<interface type='bridge'>
<source bridge='br0'/>
<mac address='52:54:00:0d:92:6f'/>
<model type='rtl8139'/>
</interface>
<hostdev mode='subsystem' type='pci' managed='yes'>
<source>
<address domain='0x0000' bus='0x0d' slot='0x00' function='0x0'/>
</source>
</hostdev>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='-1' autoport='yes'/>
</devices>
</domain>
[/FILE]
3.The device could be probed and attached by FreeBSD:
[CODE]
ix0: <Intel(R) PRO/10GbE PCI-Express Network Driver, Version - 2.4.8> port 0xc020-0xc03f mem 0xfe000000-0xfe01ffff,0xfe020000-0xfe023fff irq 11 at device 4.0 on pci0
ix0: Using MSIX interrupts with 2 vectors
ix0: Ethernet address: 00:0c:bd:05:7d:4a
ix0: PCI Express Bus: Speed 5.0Gb/s Width x8
[/CODE]
But no interrupt could be found:
[CODE]
interrupt total rate
irq1: atkbd0 143 0
irq4: uart0 177 1
irq15: ata1 1593 10
cpu0:timer 7140 46
Total 9053 58
[/CODE]
And ix0 keeps to be "no carrier" (even if I config an IP address on it and ping):
[CODE]
ix0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=401bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,VLAN_HWTSO>
ether 00:0c:bd:05:7d:4a
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
media: Ethernet autoselect
status: no carrier
[/CODE]
4.In the host side, kvm could see the change made by the guest on the device, but no irq:
[CODE]
linux-kj2u:~ # cat /proc/interrupts
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7 CPU8 CPU9 CPU10 CPU11 CPU12 CPU13 CPU14 CPU15 CPU16 CPU17 CPU18 CPU19 CPU20 CPU21 CPU22 CPU23
210: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 PCI-MSI-edge kvm:0000:0d:00.0
211: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 PCI-MSI-edge kvm:0000:0d:00.0
[/CODE]
So, anyone who has the same problem or has a clue to solve it, or has some ideas to do a debug job, please help.
Thanks!
More information about the freebsd-virtualization
mailing list