Hi all,

I am playing around with HW offloading and I have observed something
strange that I cannot explain (as of now).

I have two OvS switches (both supporting and having hw-offload:true)
connected back-to-back through two physical ports.

I am actually measuring latency with Pktgen-DPDK, so I send latency
measuring packets through my first OvS, which will be returned by the
second OvS. Both are running on a SmartNIC, but the scenario is
somewhat similar of having them as hypervisor switches using kernel
drivers and pktgen-dpdk app is running in a VM "above" the first OvS.

The flow rules are based on Layer-3 information (instead of simple port
forward).

OvS 1 flow rules (pfXhpf face the VM, pX face the other OvS):
- ip,in_port=pf0hpf,nw_src=192.168.0.1,nw_dst=192.168.1.1
actions=output:p0
- ip,in_port=p1,nw_src=192.168.0.1,nw_dst=192.168.1.1
actions=output:pf1hpf

OvS 2 flow rules:
- ip,in_port=p0,nw_src=192.168.0.1,nw_dst=192.168.1.1 actions=output:p1

The routing is working as expected, I get back all the packets, but due
to the relatively bad latency I measured, I checked whether these flow
rules, or in fact, their corresponding flow-caches, are indeed
offloaded to the HW.

In the case of the first OvS, the following command gives the below
output:
# ovs-appctl dpctl/dump-flows -m |grep offloaded

ufid:66bfe654-11ac-4f01-8dec-414177df78c4,
skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0)
,ct_label(0/0),recirc_id(0),dp_hash(0/0),in_port(p1),packet_type(ns=0/0
,id=0/0),eth(src=00:00:00:00:00:00/00:00:00:00:00:00,dst=00:00:00:00:00
:00/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.16
8.1.1,proto=0/0,tos=0/0,ttl=0/0,frag=no), packets:368243396,
bytes:29459460538, used:0.120s, offloaded:yes, dp:tc, actions:pf1hpf
ufid:89516b0d-bb6f-4df0-ba91-973ef79e6fa3,
skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0)
,ct_label(0/0),recirc_id(0),dp_hash(0/0),in_port(pf0hpf),packet_type(ns
=0/0,id=0/0),eth(src=00:00:00:00:00:00/00:00:00:00:00:00,dst=00:00:00:0
0:00:00/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1,dst=19
2.168.1.1,proto=0/0,tos=0/0,ttl=0/0,frag=no), packets:3630728485,
bytes:275935348872, used:0.080s, offloaded:yes, dp:tc, actions:p0
ufid:3fbc4e09-9d78-4e3b-8711-541d36828959,
skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0)
,ct_label(0/0),recirc_id(0),dp_hash(0/0),in_port(pf0hpf),packet_type(ns
=0/0,id=0/0),eth(src=00:00:00:00:00:00/00:00:00:00:00:00,dst=00:00:00:0
0:00:00/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=0.0.0.0/0.0.0.0,ds
t=0.0.0.0/128.0.0.0,proto=0/0,tos=0/0,ttl=0/0,frag=no),
packets:233401993, bytes:17738549256, used:0.080s, offloaded:yes,
dp:tc, actions:drop

The key observation here is that the entries offloaded are using tc,
and the ones related to my layer-3 forwarding rules (1st and 2nd entry)
are indeed offloaded to the hardware.

However, on the second OvS, I see this:
ufid:b88192f5-17d5-461d-ba61-2bd0b7e49b39,
skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0)
,ct_label(0/0),recirc_id(0),dp_hash(0/0),in_port(p1),packet_type(ns=0/0
,id=0/0),eth(src=00:00:00:00:00:00/00:00:00:00:00:00,dst=00:00:00:00:00
:00/00:00:00:00:00:00),eth_type(0x88cc), packets:0, bytes:0,
used:never, offloaded:yes, dp:tc, actions:drop
ufid:82f41402-9d5b-4229-a1c0-d75a35138ebe,
skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0)
,ct_label(0/0),recirc_id(0),dp_hash(0/0),in_port(p0),packet_type(ns=0/0
,id=0/0),eth(src=00:00:00:00:00:00/00:00:00:00:00:00,dst=00:00:00:00:00
:00/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.16
8.1.1,proto=0/0,tos=0/0,ttl=0/0,frag=no), packets:432344072,
bytes:26805332464, used:0.000s, dp:tc, actions:p1
ufid:da660698-a31e-47e5-bf30-34ee90486f57,
skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0)
,ct_label(0/0),recirc_id(0),dp_hash(0/0),in_port(p0),packet_type(ns=0/0
,id=0/0),eth(src=00:00:00:00:00:00/00:00:00:00:00:00,dst=00:00:00:00:00
:00/00:00:00:00:00:00),eth_type(0x88cc), packets:0, bytes:0,
used:never, offloaded:yes, dp:tc, actions:drop
ufid:68dc355c-0823-4324-8a02-fa104597b8d8,
recirc_id(0),dp_hash(0/0),skb_priority(0/0),in_port(p0),skb_mark(0/0),c
t_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_label(0/0),eth(src=18:5a:58:0
c:c8:ca,dst=01:80:c2:00:00:00),eth_type(0/0xffff), packets:67094,
bytes:4025640, used:0.313s, dp:ovs, actions:drop
ufid:39f2ee6d-4a1b-4781-a73e-2d0a8d045df3,
recirc_id(0),dp_hash(0/0),skb_priority(0/0),in_port(p1),skb_mark(0/0),c
t_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_label(0/0),eth(src=00:00:00:0
0:00:00/00:00:00:00:00:00,dst=00:00:00:00:00:00/00:00:00:00:00:00),eth_
type(0/0xffff), packets:4112, bytes:246720, used:1.725s, dp:ovs,
actions:drop

The important part here is that the enrty matching my layer-3
forwarding rule has only the dp:tc flag, but it does not show the
offloaded:yes tag. However, for other entries (e.g., for a drop entry),
these two flags are shown together.

Therefore, my question is as follows:

Does dp:tc on its own mean that HW offloaded is enabled AND working?

If yes, why do we have an explicit tag as offloaded:yes?

If no, how can I enforce HW offloading beyond this?

Did anyone encounter something similar before?


Thank you for considering my request.

Cheers,
levi


Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
discuss mailing list
disc...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-discuss

Reply via email to