Hi All,
First time mailing here.
I have installed on a CentOS 7.0 KVM (with DPDK and OVS) one Deep Packet
Inspection VM.
I have one channel and some virtual traffic generator.
The traffic is lost between dpdk vhostuser and the DPI VM.
The setup is attached. Any suggestions or ideas?
Regarding the OVS+DPDK configuration, the following configuration is
already made:
- SELINUX is disabled
- QEMU 2.9.0 was downloaded from sources
- All Linux packages were updated for QEMU 2.9.0
- DPDK source was downloaded
- Paths were set
- epel repo was installed
- DPDK 16.11 was installed
- OVS 2.7.0 was installed with DPDK option
- Hugepages VM is set
- NICs are configured for DPDK
- Permissions are set for DPDK
Regarding the OVS+DPDK startup steps, the following configuration is in
place:
B. OVS+DPDK startup and configuration
1. Set and verify the memory hugepages
mount -t hugetlbfs nodev /mnt/huge
echo 64 > /sys/devices/system/node/node0/hugepages/hugepages-
1048576kB/nr_hugepages
2. Setting the driver permissions
modprobe vfio-pci
/usr/bin/chmod a+x /dev/vfio
/usr/bin/chmod 0666 /dev/vfio/*
3. Configure the PATHS to DPDK and OVS database
cd dpdk-stable-16.11.1/
export DPDK_DIR=$PWD
export PATH=$PATH:/usr/local/share/openvswitch/scripts
export DB_SOCK=/usr/local/var/run/openvswitch/db.sock
4. Re-initializing OVS
rm /usr/local/etc/openvswitch/conf.db
mkdir -p /usr/local/etc/openvswitch
mkdir -p /usr/local/var/run/openvswitch
ovsdb-tool create /usr/local/etc/openvswitch/conf.db
/usr/local/share/openvswitch/vswitch.ovsschema
5. Starting OVS + DPDK
ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock
--remote=db:Open_vSwitch,Open_vSwitch,manager_options --pidfile --detach
ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true
ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-socket-mem="
1024,1024"
ovs-ctl --no-ovsdb-server --db-sock="$DB_SOCK" start
6. Cheking driver mapping for NICs
driverctl -v list-devices | grep -i net
$DPDK_DIR/tools/dpdk-devbind.py --status
7. Adding OVS+DPDK bridge and ports
ovs-vsctl add-br ch1int_dpdk -- set bridge ch1int_dpdk datapath_type=netdev
ovs-vsctl add-br ch1ext_dpdk -- set bridge ch1ext_dpdk datapath_type=netdev
ovs-vsctl add-port ch1int_dpdk nic810 -- set Interface nic810 type=dpdk
options:dpdk-devargs=0000:81:00.0
ovs-vsctl add-port ch1ext_dpdk nic811 -- set Interface nic811 type=dpdk
options:dpdk-devargs=0000:81:00.1
8. Adding OVS (no DPDK) bridge and ports
ovs-vsctl add-br br0
ovs-vsctl add-port br0 myportnameone
9. Adding VM ports to OVS (or OVS+DPDK) bridge
#<interface type='bridge'>
# <mac address='52:54:00:cb:57:af'/>
# <source bridge='br0'/>
# <virtualport type='openvswitch'/>
# ...
#</interface>
10. Adding dpdkvhostuser to the ovs switch - these are used for the socket
created between the VM and the OVS bridge
ovs-vsctl add-port ch1int_dpdk ch1int_dvhu -- set Interface ch1int_dvhu
type=dpdkvhostuser
ovs-vsctl add-port ch1ext_dpdk ch1ext_dvhu -- set Interface ch1ext_dvhu
type=dpdkvhostuser
11. DPI deployment
virt-install --connect qemu:///system --name=DPI --memory=16384 --vcpus=16
--os-type=linux --os-variant=virtio26 --disk
path=/path/image.qcow2,format=qcow2,bus=virtio,cache=none
--network bridge=admin,model=e1000 --nographics --noautoconsole --import
12. Adding vhostuser ports to guest VM - for this the XML file for the
virtual machine found at etc/libvirt/qemu/<VM_name>.xml was edited
<interface type='vhostuser'>
<mac address='52:54:00:2f:e8:de'/>
<source type='unix' path='/usr/local/var/run/openvswitch/ch1int_dvhu'
mode='client'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07'
function='0x0'/>
</interface>
<interface type='vhostuser'>
<mac address='52:54:00:b9:40:d0'/>
<source type='unix' path='/usr/local/var/run/openvswitch/ch1ext_dvhu'
mode='client'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x08'
function='0x0'/>
</interface>
Thanks,
Daniel