- ```
- export DPDK_DIR=/usr/src/dpdk-2.0
- cd $DPDK_DIR
- ```
-
- 2. Update `config/common_linuxapp` so that DPDK generate single lib file.
- (modification also required for IVSHMEM build)
-
- `CONFIG_RTE_BUILD_COMBINE_LIBS=y`
-
- Update `config/common_linuxapp` so that DPDK is built with vhost
- libraries.
-
- `CONFIG_RTE_LIBRTE_VHOST=y`
-
- Then run `make install` to build and install the library.
- For default install without IVSHMEM:
-
- `make install T=x86_64-native-linuxapp-gcc`
-
- To include IVSHMEM (shared memory):
-
- `make install T=x86_64-ivshmem-linuxapp-gcc`
-
- For further details refer to http://dpdk.org/
-
-2. Configure & build the Linux kernel:
-
- Refer to intel-dpdk-getting-started-guide.pdf for understanding
- DPDK kernel requirement.
-
-3. Configure & build OVS:
-
- * Non IVSHMEM:
-
- `export DPDK_BUILD=$DPDK_DIR/x86_64-native-linuxapp-gcc/`
-
- * IVSHMEM:
-
- `export DPDK_BUILD=$DPDK_DIR/x86_64-ivshmem-linuxapp-gcc/`
-
- ```
- cd $(OVS_DIR)/openvswitch
- ./boot.sh
- ./configure --with-dpdk=$DPDK_BUILD [CFLAGS="-g -O2 -Wno-cast-align"]
- make
- ```
-
- Note: 'clang' users may specify the '-Wno-cast-align' flag to suppress DPDK cast-align warnings.
-
-To have better performance one can enable aggressive compiler optimizations and
-use the special instructions(popcnt, crc32) that may not be available on all
-machines. Instead of typing `make`, type:
-
-`make CFLAGS='-O3 -march=native'`
-
-Refer to [INSTALL.userspace.md] for general requirements of building userspace OVS.
-
-Using the DPDK with ovs-vswitchd:
----------------------------------
-
-1. Setup system boot
- Add the following options to the kernel bootline:
-
- `default_hugepagesz=1GB hugepagesz=1G hugepages=1`
-
-2. Setup DPDK devices:
-
- DPDK devices can be setup using either the VFIO (for DPDK 1.7+) or UIO
- modules. UIO requires inserting an out of tree driver igb_uio.ko that is
- available in DPDK. Setup for both methods are described below.
-
- * UIO:
- 1. insert uio.ko: `modprobe uio`
- 2. insert igb_uio.ko: `insmod $DPDK_BUILD/kmod/igb_uio.ko`
- 3. Bind network device to igb_uio:
- `$DPDK_DIR/tools/dpdk_nic_bind.py --bind=igb_uio eth1`
-
- * VFIO:
-
- VFIO needs to be supported in the kernel and the BIOS. More information
- can be found in the [DPDK Linux GSG].
-
- 1. Insert vfio-pci.ko: `modprobe vfio-pci`
- 2. Set correct permissions on vfio device: `sudo /usr/bin/chmod a+x /dev/vfio`
- and: `sudo /usr/bin/chmod 0666 /dev/vfio/*`
- 3. Bind network device to vfio-pci:
- `$DPDK_DIR/tools/dpdk_nic_bind.py --bind=vfio-pci eth1`
-
-3. Mount the hugetable filsystem
-
- `mount -t hugetlbfs -o pagesize=1G none /dev/hugepages`
-
- Ref to http://www.dpdk.org/doc/quick-start for verifying DPDK setup.
-
-4. Follow the instructions in [INSTALL.md] to install only the
- userspace daemons and utilities (via 'make install').
- 1. First time only db creation (or clearing):
-
- ```
- mkdir -p /usr/local/etc/openvswitch
- mkdir -p /usr/local/var/run/openvswitch
- rm /usr/local/etc/openvswitch/conf.db
- ovsdb-tool create /usr/local/etc/openvswitch/conf.db \
- /usr/local/share/openvswitch/vswitch.ovsschema
- ```
-
- 2. Start ovsdb-server
-
- ```
- ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
- --remote=db:Open_vSwitch,Open_vSwitch,manager_options \
- --private-key=db:Open_vSwitch,SSL,private_key \
- --certificate=Open_vSwitch,SSL,certificate \
- --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert --pidfile --detach
- ```
-
- 3. First time after db creation, initialize:
-
- ```
- ovs-vsctl --no-wait init
- ```
-
-5. Start vswitchd:
-
- DPDK configuration arguments can be passed to vswitchd via `--dpdk`
- argument. This needs to be first argument passed to vswitchd process.
- dpdk arg -c is ignored by ovs-dpdk, but it is a required parameter
- for dpdk initialization.
-
- ```
- export DB_SOCK=/usr/local/var/run/openvswitch/db.sock
- ovs-vswitchd --dpdk -c 0x1 -n 4 -- unix:$DB_SOCK --pidfile --detach
- ```
-
- If allocated more than one GB hugepage (as for IVSHMEM), set amount and
- use NUMA node 0 memory:
-
- ```
- ovs-vswitchd --dpdk -c 0x1 -n 4 --socket-mem 1024,0 \
- -- unix:$DB_SOCK --pidfile --detach
- ```
-
-6. Add bridge & ports
-
- To use ovs-vswitchd with DPDK, create a bridge with datapath_type
- "netdev" in the configuration database. For example:
-
- `ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev`
-
- Now you can add dpdk devices. OVS expect DPDK device name start with dpdk
- and end with portid. vswitchd should print (in the log file) the number
- of dpdk devices found.
-
- ```
- ovs-vsctl add-port br0 dpdk0 -- set Interface dpdk0 type=dpdk
- ovs-vsctl add-port br0 dpdk1 -- set Interface dpdk1 type=dpdk
- ```
-
- Once first DPDK port is added to vswitchd, it creates a Polling thread and
- polls dpdk device in continuous loop. Therefore CPU utilization
- for that thread is always 100%.
-
- Note: creating bonds of DPDK interfaces is slightly different to creating
- bonds of system interfaces. For DPDK, the interface type must be explicitly
- set, for example:
-
- ```
- ovs-vsctl add-bond br0 dpdkbond dpdk0 dpdk1 -- set Interface dpdk0 type=dpdk -- set Interface dpdk1 type=dpdk
- ```
-
-7. Add test flows
-
- Test flow script across NICs (assuming ovs in /usr/src/ovs):
- Execute script: