Hi 

I've been trying to measure the throughput of Open vSwitch with DPDK for 
physical ports. My test setup is shown below:

+-----------------------------+
| 82599ES 10-Gigabit SFI/SFP+ |
+-----------------------------+
    | p0 |          | p1 |
    +----+          +----+
      ^               ^
      |               |
      v               v
    +----+          +----+
    | p0 |          | p1 |
+-----------------------------+
| NAPATECH Adapter - 2 port   |
+-----------------------------+

I manually created the ovs bridge, dpdk ports and a flow entry as follows:

===============================
$ sudo ovs-vsctl show
[sudo] password for argela: 
dfa41660-4e24-4f4e-87de-a21398f51246
    Bridge "br0"
        Port "br0"
            Interface "br0"
                type: internal
        Port "dpdk1"
            Interface "dpdk1"
                type: dpdk
        Port "dpdk0"
            Interface "dpdk0"
                type: dpdk
 
$ sudo ovs-ofctl dump-flows br0
[sudo] password for argela: 
NXST_FLOW reply (xid=0x4):
 cookie=0x0, duration=3659.413s, table=0, n_packets=5061744149, 
n_bytes=3111037716380, idle_age=582, in_port=1 actions=output:2
===============================

Then, I isolated cores from Linux kernel according to the output of 
dpdk/tools/cpu_layout.py.

===============================
$ ./cpu_layout.py

cores =  [0, 1, 2, 8, 9, 10]
sockets =  [0, 1]

        Socket 0        Socket 1        
        --------        --------        
Core 0  [0, 12]         [6, 18]         
Core 1  [1, 13]         [7, 19]         
Core 2  [2, 14]         [8, 20]         
Core 8  [3, 15]         [9, 21]         
Core 9  [4, 16]         [10, 22]        
Core 10 [5, 17]         [11, 23]        

$ sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash iommu=pt intel_iommu=on 
vfio_iommu_type1.allow_unsafe_interrupts=1 default_hugepagesz=1G hugepagesz=1G 
hugepages=5 isolcpus=12,13,14,15,16,17,18,19,20,21,22,23"

$ sudo ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=FFF000

$ sudo top -p `pidof ovs-vswitchd` -H -d1
 3098 root      20   0 4250504  65688   2672 R 99,9  0,4  26:18.44 pmd42        
        14 
 3101 root      20   0 4250504  65688   2672 R 99,9  0,4  26:18.45 pmd45        
        17 
 3096 root      20   0 4250504  65688   2672 R 99,8  0,4  26:18.83 pmd46        
        12 
 3097 root      20   0 4250504  65688   2672 R 99,8  0,4  26:18.77 pmd41        
        13 
 3099 root      20   0 4250504  65688   2672 R 98,8  0,4  26:18.43 pmd43        
        15 
 3100 root      20   0 4250504  65688   2672 R 98,8  0,4  26:18.42 pmd44        
        16 
 2652 root      20   0 4250504  65688   2672 S  0,0  0,4   0:03.15 ovs-vswitchd 
        1 
 2653 root      20   0 4250504  65688   2672 S  0,0  0,4   0:00.01 
dpdk_watchdog3       1 
 2654 root      20   0 4250504  65688   2672 S  0,0  0,4   0:00.05 
vhost_thread2        1 
 2655 root      20   0 4250504  65688   2672 S  0,0  0,4   0:00.73 urcu1        
        1 
 2683 root      20   0 4250504  65688   2672 S  0,0  0,4   0:00.00 handler27    
        1 
 2684 root      20   0 4250504  65688   2672 S  0,0  0,4   0:00.00 handler26    
        1 
 2685 root      20   0 4250504  65688   2672 S  0,0  0,4   0:00.00 handler25    
        1 
 2686 root      20   0 4250504  65688   2672 S  0,0  0,4   0:00.00 handler24    
        1 
 2689 root      20   0 4250504  65688   2672 S  0,0  0,4   0:00.00 handler23    
        1 
 2690 root      20   0 4250504  65688   2672 S  0,0  0,4   0:00.00 handler17    
        1 
 2691 root      20   0 4250504  65688   2672 S  0,0  0,4   0:00.00 handler18    
        1 
 2692 root      20   0 4250504  65688   2672 S  0,0  0,4   0:00.00 handler19    
        1 
 2693 root      20   0 4250504  65688   2672 S  0,0  0,4   0:01.82 
revalidator20        1 
 2694 root      20   0 4250504  65688   2672 S  0,0  0,4   0:01.51 
revalidator21        1 
 2695 root      20   0 4250504  65688   2672 S  0,0  0,4   0:01.51 
revalidator16        1 
 2696 root      20   0 4250504  65688   2672 S  0,0  0,4   0:01.51 
revalidator22        1 
===============================

When I start the traffic by using a pcap file for NAPATECH port0 with 10G rate, 
OvS+DPDK can reach the line rate. However, when I start sending 64 byte UDP 
packets at 10G rate, the throughtput is ~550M. And also, OvS+DPDK only uses one 
core and the others are IDLE even if I set 12 cores.

===============================
$ sudo ovs-appctl dpif-netdev/pmd-stats-show
pmd thread numa_id 0 core_id 13:
        emc hits:0
        megaflow hits:0
        miss:0
        lost:0
        polling cycles:2608878847988 (100.00%)
        processing cycles:0 (0.00%)
pmd thread numa_id 0 core_id 14:
        emc hits:0
        megaflow hits:0
        miss:0
        lost:0
pmd thread numa_id 0 core_id 16:
        emc hits:0
        megaflow hits:0
        miss:0
        lost:0
main thread:
        emc hits:0
        megaflow hits:0
        miss:0
        lost:0
        polling cycles:76924028 (100.00%)
        processing cycles:0 (0.00%)
pmd thread numa_id 0 core_id 12:
        emc hits:1963602000
        megaflow hits:44356
        miss:9
        lost:0
        polling cycles:1007444696020 (28.15%)
        processing cycles:2570868572784 (71.85%)
        avg cycles per packet: 1822.28 (3578313268804/1963646365)
        avg processing cycles per packet: 1309.23 (2570868572784/1963646365)
pmd thread numa_id 0 core_id 15:
        emc hits:0
        megaflow hits:0
        miss:0
        lost:0
pmd thread numa_id 0 core_id 17:
        emc hits:0
        megaflow hits:0
        miss:0
        lost:0
===============================

Could you please explain why OvS+DPDK did not reach the line rate (10G) for 64 
byte UDP traffic?

Thanks in advance.
- Volkan 
_______________________________________________
discuss mailing list
discuss@openvswitch.org
http://openvswitch.org/mailman/listinfo/discuss

Reply via email to