Testing VF/PF code

Pieper, Jeffrey E jeffrey.e.pieper at intel.com
Tue May 29 18:40:51 UTC 2018


Here are the steps that we use. If you just want to use bare metal, I think you’ll need to use passthrough : false; in the .conf.
·         The only supported output from virtual machines is serial console (i.e. you don't get a nice GUI if you use a Linux guest)
·         You should start your VM in a tmux session, so you can disconnect from the VM without having to shut it down.
·         To use SR-IOV, it's required that your host's FreeBSD version is 11 or newer, but it's recommended that your guest is 11 or newer, too.
·         A listing of currently active VMs can be found in /dev/vmm
·         VM names can only be up to 31 characters long
Steps to start a VM
1.    If you want to attach VF's to the virtual machine, you'll need to run these two commands first:
kenv hw.vmm.force_iommu=1
kldload vmm
2.    Then you will want to set up a tap interface so that your VM has network connectivity (either to the outside or your host, but in this case, we'll use a bridge so it has outside connectivity).
ifconfig tap0 create
sysctl net.link.tap.up_on_open=1
ifconfig bridge0 create
ifconfig bridge0 addm igb0 addm tap0
ifconfig bridge0 up
3.    Create a disk image that will serve as your VM's hard disk
truncate -s 40g freebsdvm-fs.img
4.    Booting up a VM is a two-step process: start the bootloader using bhyveload (only if you're using a FreeBSD guest), and then boot the kernel using the bhyve command.
·         Example bhyveload+bhyve commands I used to start a FreeBSD guest installation (where disc1.iso is a FreeBSD install disc .iso):

bhyveload -m 4096M -d disc1.iso fbsdvm

bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 -s 3:0,virtio-blk,freebsdvm-fs.img -s 4:0,ahci-cd,disc1.iso -l com1,stdio -c 4 -m 4096M fbsdvm
·         The -m arguments given to both commands need to match!
·         Specify the xterm option when prompted during the install process to get color.
·         Letting the installer configure partitions for you is fine.
·         Then, the following will run your new, installed FreeBSD VM:

bhyveload -m 4096M -d freebsdvm-fs.img fbsdvm

bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 -s 3:0,virtio-blk,freebsdvm-fs.img -l com1,stdio -c 4 -m 4096M fbsdvm

Using VFs (SR-IOV)
1.    kldload your SR-IOV enabled PF driver if it isn't already loaded
2.    Create a .conf (for iovctl to use; the file name doesn't matter, but it's recommended to use the interface name) for each PF interface that you want to add VFs to.
·         An example for an ixl interface:

·         PF {

·             device : "ixl0";

·             num_vfs : 3;

·         }

·         DEFAULT {

·             passthrough : true;

·         }

·         VF-0 {

·             mac-addr : "02:01:02:03:04:05";

}
·         The only required fields are the PF and DEFAULT fields.
·         Though it's generally a good idea to specify a VF's MAC address from the PF
·         iovctl -d <interface> -S will show all of the parameters supported by the driver
3.    iovctl -f <interface>.conf -C will create the VFs using the parameters in the .conf.
4.    To attach the newly-spawned VFs to a VM:
a.    Run "pciconf -v -l", and find the device bus/slot/function for the VF that you want to attach:
ppt0 at pci0:130:0:16:       class=0x020000 card=0x00008086 chip=0x154c8086 rev=0x01 hdr=0x00
b.    Run the bhyveload and bhyve commands as above, but add -s 4:0,passthru,130/0/16 (replace with your b/s/f from above) to the bhyve command, and add -S to both commands.
i.        The -S part is new for FreeBSD 11.0-CURRENT
5.    After the VM boots, load the PF's corresponding VF driver in the VM.
Shutting down a VM
·         Shutdown or reboot through the guest
·         Or, if that's not possible, use the bhyvectl command:
bhyvectl --force-off --vm=<vm-name>
·         To completely delete a VM, use this bhyvectl command, instead:
bhyvectl --destroy --vm=<vm-name>
Links
·         Handbook page on bhyve<https://www.freebsd.org/doc/handbook/virtualization-host-bhyve.html>
·         Wiki page on bhyve<https://wiki.freebsd.org/bhyve>
·         Note: This page has a three-line quickstart if you just want to boot up a VM with minimal customization
·         Man page for bhyve(8)<https://www.freebsd.org/cgi/man.cgi?query=bhyve&sektion=8>
·         Man page for bhyveload(8)<https://www.freebsd.org/cgi/man.cgi?query=bhyveload&sektion=8&apropos=0&manpath=FreeBSD+10.1-RELEASE>
·         UEFI & VNC graphics on bhyve<https://wiki.freebsd.org/bhyve/UEFI>

Jeff





On 5/29/18, 11:19 AM, "Sean Bruno" <owner-freebsd-net at freebsd.org on behalf of sbruno at freebsd.org> wrote:







    On 05/29/18 12:15, Kevin Bowling wrote:

    > iovctl worked at one point with ixgbe. I don’t recall if there is any

    > way to attach the vf directly if you do that but you can use ppt driver

    > to pass them into bhyve.

    >

    > On Tue, May 29, 2018 at 9:58 AM Sean Bruno <sbruno at freebsd.org

    > <mailto:sbruno at freebsd.org>> wrote:

    >

    >     Does anyone have a process for testing the VF drivers (ixgbe igb, etc)

    >     in FreeBSD without actually firing up linux to instantiate a VM or using

    >     EC2?

    >

    >     sean

    >





    I'm using iovctl with a different vendor h/w on ARM64, so I think its

    still working.



    Do you have a reference to a "how to" or whatever that someone like

    Dexter is maintaining?



    sean






More information about the freebsd-net mailing list