Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

OVS-DPDK Test Architecture

Test Bed

Image Added


OVS-DPDK on BlueField Test Architecture

Image AddedImage Removed

The testbed setup is shown in the above diagram. DUT stands for Device Under Test

...

TypeDescription
SmartNICsBlueField v1, 25Gbps
DPDKversion 19.11
vSwitch

OVS-DPDK 2.12 with VXLAN DECAP/ENCAP offload enabled.

https://github.com/bytedance/ovs-dpdk


Code Block
root@bluefield:/home/ovs-dpdk# ovs-vsctl show
2dccd148-526c-44a5-9351-67b04c5e2da4	Bridge br-int
        datapath_type: netdev
        Port br-int
    Bridge        Interface br-int
                datapath_type: netdevinternal
        Port vxlanvhost-user-vtp01
            Interface vxlanvhost-user-vtp01
                type: vxlandpdkvhostuserclient
                options: {dst_port="4789", key=flow, local_ip="192.168.1.1", remote_ip=flow, tos=inheritvhost-server-path="/var/run/openvswitch/dpdkvhostclient01"}
        Port brvxlan-intvtp
            Interface brvxlan-intvtp
                type: internal vxlan
                options: {dst_port="4789", key=flow, local_ip="YOU IP", remote_ip=flow, tos=inherit}
        Port pf1hpfbr-ex-patch
            Interface pf1hpfbr-ex-patch
                type: dpdkpatch
                options: {dpdk-devargs="class=eth,mac=ae:d8:8a:c5:22:fb"peer=br-int-patch}
    Bridge br-ex
        datapath_type: netdev
        Port br-int-expatch
            Interface br-int-expatch
                type: internalpatch
                options: {peer=br-ex-patch}
        Port p1eth2
            Interface p1eth2
                type: dpdk
                options: {dpdk-devargs="PCIE"class=eth,mac=98:03:9b:af:7b:0b"}
Code Block
root@bluefield:/home/ovs-dpdk# ovs-vsctl list open_vswitch
_uuid   , n_rxq="4"}
        Port br-ex
            :Interface 2dccd148-526c-44a5-9351-67b04c5e2da4
bridgesbr-ex
                type: internal
    : [22334686-733a-445e-9130-a42009a3586e, 38af610d-01f7-497d-878b-c6b6a44abf6a]
cur_cfg             : 10
datapath_types      : [netdev, system]
datapaths           : {}
db_version   ovs_version: "2.13.90"


Code Block
root:/home/ovs-dpdk# ovs-vsctl --format=csv --data=bare --no-headings --column=other_config list open_vswitch
"dpdk-extra=-w [PCIE]  -l 70 dpdk-init=true dpdk-socket-mem=2048,2048 emc-insert-inv-prob=0 n-handler-threads=1 n-revalidator-threads=4 neigh-notifier-enable=true pmd-cpu-mask=0xc00000000000c00000 pmd-pause=false pmd-rxq-assign=roundrobin smc-enable=true tx-flush-interval=0 userspace-tso-enable=true"


Traffic Generator

We will use DPDK pktgen as the Traffic Generator.

CT Ruleset

Code Block
languagebash
Br-ex rules
table=0 priority=300 in_port=eth2,tcp,tp_dst=32768/0x8000 actions=output:br-int-patch
table=0 priority=300 in_port=eth2,udp,tp_dst=32768/0x8000 actions=output:br-int-patch
table=0 priority=200 in_port=eth2 actions=output:LOCAL
table=0 priority=200 in_port=LOCAL actions=eth2
table=0 priority=200 in_port=br-int-patch actions=eth2


Code Block
languagebash
Br-int rules

Nginx configuration

Code Block
languagebash
user  nginx;
worker_processes  auto;
error_log  /var/log/nginx/error.log warn;
pid       : []
dpdk_initialized  /var/run/nginx.pid;
events {
   : true
dpdk_version  worker_connections  2000000;
}
http {
    include  : "DPDK 19.11.0"
external_ids   /etc/nginx/mime.types;
    default_type : {}
iface_types application/octet-stream;
    log_format  main  '$remote_addr - :$remote_user [dpdk, dpdkr, dpdkvhostuser, dpdkvhostuserclient, erspan, geneve, gre, internal, ip6erspan, ip6gre, lisp, patch, stt, system, tap, vxlan]
manager_options$time_local] "$request" '
                  : []
next_cfg  '$status $body_bytes_sent "$http_referer" '
          : 10
other_config        : {dpdk-extra="-w 03:00.1,representor=[0,65535] --legacy-mem ", dpdk-init="true", hw-offload="true"}
ovs_version         : []
ssl    '"$http_user_agent" "$http_x_forwarded_for"';
    access_log off;
    sendfile        on;
    keepalive_timeout : []65;
statistics    include /etc/nginx/conf.d/*.conf;
}


Code Block
languagebash
server {
listen    : {cpu="16", file_systems="/,13521220,3918464 /data,243823,2064 /boot,357176,61104", load_average="1.41,1.37,1.36", memory="16337652,5589928,1707640,0,0", process_ovs-vswitchd="5959388,256352,11515170,0,11484792,11484792,7", process_ovsdb-server="12620,6260,13190,0,68233832,68233832,6"}
system_type         : []
system_version      : []

Traffic Generator

...

80 backlog=8192 reuseport;
server_name localhost;

location / {
return 200 "hello";
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}


WRK configuration

connection setup rates:

Code Block
./wrk -t 32 -c 640 -d30s http://10.0.1.127/ -H "Connection: Close"


Test API description

The test is to evaluate the performance of SmartNIC offloading.

...

25 cases are skipped due to the configuration. 

Performance Tests

Single PF

...

Directly forwarding without the match

"in_port=vxlan-vtp, actions=output: pf1hpf"

...

Single PF, Single VF

...

Directly forwarding without the match

"in_port=vxlan-vtp, actions=output: pf1vf0"

...

match and forwarding

100 rules

"in_port=vxlan-vtp,ip,nw_dst=10.1.1.[1-100] actions=pf1vf0"

...

21.6Mpps

(100 megaflows

offloaded)

...

match and forwarding

1000 rules

"in_port=vxlan-vtp,ip,nw_dst=10.1.[1-10].[1-100] actions=pf1vf0"

...

1000 flows with nw_dst=10.1.[1-10].[1-100]

891 flows

(due to pktgen limit, only 891 flows are loaded)

...

23.3Mpps

(891 megaflows

offloaded)

...

Single PF, 4 VFs (only test with offloaded)

...

match and forwarding

1000 rules

"in_port=vxlan-vtp,ip,nw_dst=10.1.[1-10].[1-25] actions=pf1vf0"

"in_port=vxlan-vtp,ip,nw_dst=10.1.[1-10].[26-50] actions=pf1vf1"

"in_port=vxlan-vtp,ip,nw_dst=10.1.[1-10].[51-75] actions=pf1vf2"

"in_port=vxlan-vtp,ip,nw_dst=10.1.[1-10].[75-100] actions=pf1vf3"

...

1000 flows with nw_dst=10.1.[1-10].[1-100]

891 flows

(due to pktgen limit, only 891 flows are loaded)

...

23258808

...


Additional Testing

n/a

Bottlenecks/Errata 

...