14. LiquidIO VF Poll Mode Driver¶
The LiquidIO VF PMD library (librte_pmd_lio) provides poll mode driver support for Cavium LiquidIO® II server adapter VFs. PF management and VF creation can be done using kernel driver.
More information can be found at Cavium Official Website.
14.1. Supported LiquidIO Adapters¶
- LiquidIO II CN2350 210SV
- LiquidIO II CN2360 210SV
14.2. Pre-Installation Configuration¶
The following options can be modified in the config
file.
Please note that enabling debugging options may affect system performance.
CONFIG_RTE_LIBRTE_LIO_PMD
(defaulty
)Toggle compilation of LiquidIO PMD.
CONFIG_RTE_LIBRTE_LIO_DEBUG_DRIVER
(defaultn
)Toggle display of generic debugging messages.
CONFIG_RTE_LIBRTE_LIO_DEBUG_INIT
(defaultn
)Toggle display of initialization related messages.
CONFIG_RTE_LIBRTE_LIO_DEBUG_RX
(defaultn
)Toggle display of receive fast path run-time messages.
CONFIG_RTE_LIBRTE_LIO_DEBUG_TX
(defaultn
)Toggle display of transmit fast path run-time messages.
CONFIG_RTE_LIBRTE_LIO_DEBUG_MBOX
(defaultn
)Toggle display of mailbox messages.
CONFIG_RTE_LIBRTE_LIO_DEBUG_REGS
(defaultn
)Toggle display of register reads and writes.
14.3. Driver Compilation¶
To compile LiquidIO PMD for Linux x86_64 gcc target, run the following “make” command:
cd <DPDK-source-directory>
make install T=x86_64-native-linuxapp-gcc
14.4. Sample Application Notes¶
This section demonstrates how to launch testpmd
with LiquidIO® CN23XX
device managed by librte_pmd_lio
in Linux operating system.
Mount huge pages:
mkdir /mnt/huge mount -t hugetlbfs nodev /mnt/huge
Request huge pages:
echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages/nr_hugepages
Load
vfio-pci
driver:modprobe vfio-pci
Bind the LiquidIO VFs to
vfio-pci
loaded in previous step:Setup VFIO permissions for regular users and then bind to
vfio-pci
:sudo chmod a+x /dev/vfio sudo chmod 0666 /dev/vfio/* ./usertools/dpdk-devbind.py --bind vfio-pci 0000:03:00.3 0000:03:08.3
Start
testpmd
with basic parameters:./build/app/testpmd -c 0xf -n 4 -- -i
Example output:
[...] EAL: PCI device 0000:03:00.3 on NUMA socket 0 EAL: probe driver: 177d:9712 net_liovf EAL: using IOMMU type 1 (Type 1) PMD: net_liovf[03:00.3]INFO: DEVICE : CN23XX VF EAL: PCI device 0000:03:08.3 on NUMA socket 0 EAL: probe driver: 177d:9712 net_liovf PMD: net_liovf[03:08.3]INFO: DEVICE : CN23XX VF Interactive-mode selected USER1: create a new mbuf pool <mbuf_pool_socket_0>: n=171456, size=2176, socket=0 Configuring Port 0 (socket 0) PMD: net_liovf[03:00.3]INFO: Starting port 0 Port 0: F2:A8:1B:5E:B4:66 Configuring Port 1 (socket 0) PMD: net_liovf[03:08.3]INFO: Starting port 1 Port 1: 32:76:CC:EE:56:D7 Checking link statuses... Port 0 Link Up - speed 10000 Mbps - full-duplex Port 1 Link Up - speed 10000 Mbps - full-duplex Done testpmd>
14.5. SR-IOV: Prerequisites and Sample Application Notes¶
This section provides instructions to configure SR-IOV with Linux OS.
Verify SR-IOV and ARI capabilities are enabled on the adapter using
lspci
:lspci -s <slot> -vvv
Example output:
[...] Capabilities: [148 v1] Alternative Routing-ID Interpretation (ARI) [...] Capabilities: [178 v1] Single Root I/O Virtualization (SR-IOV) [...] Kernel driver in use: LiquidIO
Load the kernel module:
modprobe liquidio
Bring up the PF ports:
ifconfig p4p1 up ifconfig p4p2 up
Change PF MTU if required:
ifconfig p4p1 mtu 9000 ifconfig p4p2 mtu 9000
Create VF device(s):
Echo number of VFs to be created into
"sriov_numvfs"
sysfs entry of the parent PF.echo 1 > /sys/bus/pci/devices/0000:03:00.0/sriov_numvfs echo 1 > /sys/bus/pci/devices/0000:03:00.1/sriov_numvfs
Assign VF MAC address:
Assign MAC address to the VF using iproute2 utility. The syntax is:
ip link set <PF iface> vf <VF id> mac <macaddr>
Example output:
ip link set p4p1 vf 0 mac F2:A8:1B:5E:B4:66
Assign VF(s) to VM.
The VF devices may be passed through to the guest VM using qemu or virt-manager or virsh etc.
Example qemu guest launch command:
./qemu-system-x86_64 -name lio-vm -machine accel=kvm \ -cpu host -m 4096 -smp 4 \ -drive file=<disk_file>,if=none,id=disk1,format=<type> \ -device virtio-blk-pci,scsi=off,drive=disk1,id=virtio-disk1,bootindex=1 \ -device vfio-pci,host=03:00.3 -device vfio-pci,host=03:08.3
Running testpmd
Refer notes above to compile and run
testpmd
application. Useigb_uio
instead ofvfio-pci
in VM.
14.6. Limitations¶
14.6.1. VF MTU¶
VF MTU is limited by PF MTU. Raise PF value before configuring VF for larger packet size.
14.6.2. VLAN offload¶
Tx VLAN insertion is not supported and consequently VLAN offload feature is marked partial.
14.6.3. Ring size¶
Number of descriptors for Rx/Tx ring should be in the range 128 to 512.
14.6.4. CRC striping¶
LiquidIO adapters strip ethernet FCS of every packet coming to the host
interface. So, CRC will be stripped even when the rxmode.hw_strip_crc
member is set to 0 in struct rte_eth_conf
.