PCIe passthrough really that expensive?

Anish akgupt3 at gmail.com
Tue Jun 13 04:13:18 UTC 2017


Hi Harry,
>Any hints highly appreciated!
In my setup, I have dual port Intel GigE, one assigned to host and other
one is used by guest

root at svmhost:~ # pciconf -l |grep ppt

...

ppt2 at pci0:2:0:0: class=0x020000 card=0x125e8086 chip=0x105e8086 rev=0x06
hdr=0x00

root at svmhost:~ #


This show up as 'em0' in BSD guest with 2 vcpus.

root at bsdguest:~ # pciconf -l |grep em0

em0 at pci0:0:21:0:        class=0x020000 card=0x125e8086 chip=0x105e8086
rev=0x06 hdr=0x00

root at bsdguest:~ #

Once guest is booted, ppt2 will claim interrupt resources, in this case
just 1 interrupt line #265

root at svmhost:~ # vmstat -i

interrupt                          total       rate

...

irq263: em0:irq0                 1028705        634

..

irq265: ppt2                     1041187        641

Total                            2835121       1747

Now use cpuset to route IRQ#265 to say core 0

$cpuset -l 0 -x 265

Again use cpuset to force VM[PID 1222] to run on all core except #0

root at svmhost:~ # ps

 PID TT  STAT    TIME COMMAND

....

1222  1  I+   5:59.45 bhyve: vm1 (bhyve)


VM can run on all cores except #0.

$ cpuset -l 1-3 -p 1222


You can monitor guest due to interrupts using

$root at svmhost:~ # bhyvectl --get-stats --vm=<vm name> --cpu=<vcpu> | grep
external

vm exits due to external interrupt      27273

root at svmhost:~ #


Regards,

Anish

On Sun, Jun 11, 2017 at 2:51 AM, Harry Schmalzbauer <freebsd at omnilan.de>
wrote:

>  Bezüglich Harry Schmalzbauer's Nachricht vom 09.06.2017 10:22 (localtime):
> > Bezüglich Anish's Nachricht vom 08.06.2017 14:35 (localtime):
> >> Hi Harry,
> >>> I thought I'd save these expensive VM_Exits by using the passthru path.
> >> Completely wrong, is it?
> >>
> >> It depends on which processor you are using. For example APICv was
> >> introduced in IvyBridge which enabled h/w assisted localAPIC rather than
> >> using s/w emulated, bhyve supports it on Intel processors.
>> > I'm still usign IvyBridge (E3v2) with this "new" machine, but haven't
> > ever heard/thought about APCIv!
>
> It seems APICv is available on IvyBridge-EP (Xeon E5/E7v2) only, not for
> E3v2 :-(
> Furthermore, if I didn't miss anything in the datasheets, no currently
> available E3 Xeon offers local APIC virtualization. Can somebody of the
> xperts confirm that?
>
>
>> >> Can you run a simple experiment, assign pptdev interrupts to core that's
> >> not running guest/vcpu? This will reduce #VMEXIT on vcpu which we know
> >> is expensive.
> > Interesting approach.  But I have no idea how I should assign a PCIe
> > specific core to a PCIe dev.  Is it pptdev specific? The tunables in
> > device.hints(5) can't be used for that, can they?
>
> I wasn't able to find out how to do that.
> Any hints highly appreciated!
>
> -harry
>
>


More information about the freebsd-virtualization mailing list