[vfio-users] sr-iov support on main boards
Alex Williamson
alex.williamson at redhat.com
Mon Aug 28 15:00:00 UTC 2017
On Sun, 27 Aug 2017 18:03:25 +0200
Torbjorn Jansson <torbjorn.jansson at mbox200.swipnet.se> wrote:
> On 2017-08-22 19:38, Alex Williamson wrote:
> > On Mon, 21 Aug 2017 23:09:55 +0200
> > Torbjorn Jansson <torbjorn.jansson at mbox200.swipnet.se> wrote:
> >
> >> On 2017-08-21 19:56, Torbjorn Jansson wrote:
> >>> On 2017-08-19 07:37, Torbjorn Jansson wrote:
> >>>> On 2017-08-19 02:34, Taiidan at gmx.com wrote:
> >>>>> On 08/15/2017 02:12 AM, Torbjorn Jansson wrote:
> >>>>>
> >>>>>> On 2017-08-15 02:44, Taiidan at gmx.com wrote:
> >>>>>>> On 08/14/2017 12:28 AM, Torbjorn Jansson wrote:
> >>>>>>>
> >>>>>>>> yes i noticed that part was missing, but the card i have is an I350-T2
> >>>>>>>> and according to:
> >>>>>>>> https://www.intel.com/content/www/us/en/support/network-and-i-o/ethernet-products/000005722.html
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> the I350-T2 is supposed to have sr-iov support.
> >>>>>>>> i guess it is possible they sent me the wrong type of card or something,
> >>>>>>>> i'll double check what is listed on the card itself.
> >>>>>>> Some OEM's (ex: dell) shut off the SR-IOV ability on their NIC's because
> >>>>>>> reasons.
> >>>>>>> Please provide an lspci -n and lspci -v -v for that device so we can see
> >>>>>>> what OEM it is.
> >>>>>>>
> >>>>>>> I would return it and have them send you a real one that isn't nerfed,
> >>>>>>> also FYI most NIC's on ebay are counterfeit so be careful what you buy.
> >>>>>>> https://www.servethehome.com/investigating-fake-intel-i350-network-adapters/
> >>>>>>> (real intel NIC ASIC and SR-IOV but crappy secondary components)
> >>>>>>>
> >>>>>>
> >>>>>> if i look at the back of the card there is a sticker with: I350T2V2
> >>>>>>
> >>>>>> here is the output:
> >>>>> Weird.
> >>>>> I would say you almost definitely got a fake - either way send it back.
> >>>>>
> >>>>
> >>>> yes very strange.
> >>>> thing is, i bought it from a well known web shop I've been using forever.
> >>>> i have opened a support ticket with them about this, hopefully i can return it.
> >>>>
> >>>> but then question is, how do i find a network card with sr-iov that works?
> >>>> clearly specs on web shops can't always be trusted.
> >>>>
> >>>> also strange is that this page:
> >>>> http://ark.intel.com/products/84804/Intel-Ethernet-Server-Adapter-I350-T2V2
> >>>> clearly lists sr-iov and this is the model i got.
> >>>>
> >>>
> >>> i did a bit more searching and checking.
> >>> found this pdf:
> >>> https://www.intel.com/content/dam/www/public/us/en/documents/datasheets/ethernet-controller-i350-datasheet.pdf
> >>>
> >>> section 6.2.25 looks interesting specifically the IOV Enable bit.
> >>>
> >>> i used ethtool to dump the eeprom to file and a hex editor to check the
> >>> contents and this bit is set to a zero indicating IOV is not exposed.
> >>>
> >>> but i'm definitely no expert on these things so i might be wrong too.
> >>> but i wonder if there is a way to flip this bit and see what happens.
> >>>
> >>
> >> i fixed it :)
> >> i figured out how to use ethtool to flip the bit, rebooted and:
> >> -------
> >> 03:00.0 Ethernet controller: Intel Corporation I350 Gigabit Network Connection
> >> (rev 01)
> >> Subsystem: Intel Corporation Ethernet Server Adapter I350-T2
> >> Physical Slot: 6-1
> >> Flags: bus master, fast devsel, latency 0, IRQ 61, NUMA node 0
> >> Memory at fad00000 (32-bit, non-prefetchable) [size=1M]
> >> Memory at fae04000 (32-bit, non-prefetchable) [size=16K]
> >> Capabilities: [40] Power Management version 3
> >> Capabilities: [50] MSI: Enable- Count=1/1 Maskable+ 64bit+
> >> Capabilities: [70] MSI-X: Enable+ Count=10 Masked-
> >> Capabilities: [a0] Express Endpoint, MSI 00
> >> Capabilities: [100] Advanced Error Reporting
> >> Capabilities: [140] Device Serial Number a0-36-9f-ff-ff-ed-43-b0
> >> Capabilities: [150] Alternative Routing-ID Interpretation (ARI)
> >> Capabilities: [160] Single Root I/O Virtualization (SR-IOV)
> >> Capabilities: [1a0] Transaction Processing Hints
> >> Capabilities: [1c0] Latency Tolerance Reporting
> >> Capabilities: [1d0] Access Control Services
> >> Kernel driver in use: igb
> >> Kernel modules: igb
> >> -------
> >> as you can see above sr-iov is now listed in lspci, needed sriov entries is now
> >> listed under /sys and i can enable the virtual cards.
> >> had to blacklist igbvf and libvirt kept complaining until i added the virtual
> >> cards to vfio too.
> >>
> >> so now i finally got it all working and have a vm with a virtual card.
> >>
> >> but i think it is really stupid of the manufacture(s) (intel?) to disable
> >> sr-iov in the eeprom and not provide any proper tool or documentation on how to
> >> enable it.
> >
> > Would you be so kind as to write-up instructions how you used ethtool
> > to resolve this so that others don't need to re-invent your solution?
> > Thanks,
> >
>
> yes of course.
>
> first of all, be careful when you poke around in the cards eeprom.
> below is what i did and it worked on my I350-T2V2 card.
> theoretically it might work on other I350 cards too but it is not something i
> have tested.
>
> before starting you need to know the device name of your ethernet device, it is
> also useful to check output of lspci -v on your device and check that your card
> is missing this line:
> Capabilities: [160] Single Root I/O Virtualization (SR-IOV)
>
> first make a backup of your eeprom:
> ethtool --eeprom-dump DEVNAME raw on >eth-eeprom.bin
>
> i used this both as backup and to check the contents with a hex editor and to
> make sure i understood the documentation correctly regarding endianess and offsets.
>
> next we want to check what the iov enable bit is currently set to.
> according to documentation i found, this is bit zero of word 0x25 in eeprom.
> so this makes byte offset 0x4a (0x25*2 documentation uses 16 bit words so we
> need to multiply by 2 to get byte offset)
> so:
>
> ethtool --eeprom-dump DEVNAME offset 0x4a length 1
>
> in my case i got 0xf6 back.
> so bit zero is set to a zero which means IOV capability is not exposed
> (expected based on earlier lspci -v).
> there is no point in continuing unless it is a zero.
>
> take above value you just read out and set bit zero to 1 and then use your
> newly calculated value in below command to change it:
>
> ethtool --change-eeprom DEVNAME magic 0x15218086 offset 0x4a length 1 value
> 0xYOUR_VALUE_GOES_HERE
>
> the magic value to ethtool is i think deliberately not documented to prevent
> you from accidentally screwing up your eeprom.
> in this case it is the pci vendor and device id (lspci -n).
>
> once this is done, reboot computer and check output of lspci -v and look for:
> Capabilities: [160] Single Root I/O Virtualization (SR-IOV)
> if everything worked out it should now show up and you can go ahead with the
> rest of sr-iov configuration.
>
> again, be careful when you do this.
>
>
>
> if you need to use this then i would recommend contacting intel support about
> this because i think this is not the proper way of doing things.
> i consider this more of a "hack" or a workaround than a proper solution.
> i would rather have a proper tool or documentation or something from intel
> specifying what to expect regarding IOV enable/disable on these cards.
>
> i found no documentation or tool to enable this or i would not have done this
> via ethtool.
>
> it is not fun to waste weeks on troubleshooting sr-iov only to find out that it
> was disabled in the cards eeprom.
> it also doesn't help that when you lookup specs for this card it clearly lists
> that it supports sr-iov, even the place i bought it from and their support said
> it supported sr-iov (incorrectly, kind of)
>
Thanks for the write-up, this will be useful to have in the archives!
Thanks,
Alex
More information about the vfio-users
mailing list