On 4/18/2019 1:43 PM, Ilya Maximets wrote:


On 18.04.2019 11:08, Ian Stokes wrote:
On 4/18/2019 8:55 AM, Ilya Maximets wrote:
On 11.03.2019 19:31, Ilya Maximets wrote:
This partially reverts commit bde94613e6276d48a6e0be7a592ebcf9836b4aaf.

Commit bde94613e627 was aimed to slightly ( < 1%) increase performance
in the case where EMC disabled, but it avoids RSS hash calculation and
OVS has to calculate it while executing OVS_ACTION_ATTR_HASH in order
to handle balanced-tcp bonding. At the time of executing that action
there is no parsed flow, and OVS parses the packet for the second time
to calculate the hash. This happens for all packets received from the
virtual interfaces because they have no HW RSS.

Here is the example of 'perf' output for VM --> (bonded PHY) traffic:

    Samples: 401K of event 'cycles', Event count (approx.): 50964771478
    Overhead  Shared Object       Symbol
      27.50%  ovs-vswitchd        [.] dpcls_lookup.370382
      16.30%  ovs-vswitchd        [.] rte_vhost_dequeue_burst.9267
      14.95%  ovs-vswitchd        [.] miniflow_extract
       7.22%  ovs-vswitchd        [.] flow_extract
       7.10%  ovs-vswitchd        [.] dp_netdev_input__.371002.4826
       4.01%  ovs-vswitchd        [.] fast_path_processing.370987.4893

We can see that packet parsed twice. First time by 'miniflow_extract'
right after receiving and the second time by 'flow_extract' while
executing actions.

In this particular case calculating RSS on receive saves > 7% of the
total CPU processing time. It varies from ~7 to ~10 % depending on
scenario/traffic types.

It's better to calculate hash each time because performance
improvements of avoiding are negligible in compare with performance
drop in case of sending packets to bonded interface.

Another solution could be to pass the parsed flow explicitly through
the datapath, but this will require big code changes and will have
additional overhead for metadata updating on packet changes.

Also, this change should have small impact since SMC works well in most
cases and will be enabled/recommended by default in the future.

CC: Antonio Fischetti <[email protected]>
Fixes: bde94613e627 ("dpif-netdev: Avoid reading RSS hash when EMC is 
disabled.")
Signed-off-by: Ilya Maximets <[email protected]>
---

Hi.
Any thoughts about this patch?
This is a big performance issue on setups with OVS bonding.


Hi Ilya,

I'm just finishing up performance testing I started yesterday with this patch, 
I'm inclined to agree with you.

 From bench marking with master I see the following with EMC disabled with 
RFC2544 (0% packet loss).

(Master - No hash when EMC disabled)
Packet Size    RX Rate PPs    RX Rate Mbps    RX %
64        6824334.554    3494.059    45.859
128        6878122.822    7043.198    81.438
256        4528973.86    9275.338    100
512        2349613.015    9624.015    100
1024        1197312.023    9808.38        100
1500        822368.143    9868.418    100

With the revert applied I see

(Patch - hash applied when EMC disabled)
Packet Size    RX Rate PPs    RX Rate Mbps    RX %
64        6479041.962    3317.269    43.539
128        6747525.93    6909.467    79.891
256        4528894.363    9275.176    100
512        2349615.976    9624.027    100
1024        1197313.173    9808.39        100
1500        822365.834    9868.39        100

So the gain for avoiding the hash is marginal and certainly not equal to the 
gain achieved when enabled with bonding as you reported.

Even testing with scaling high number of flows there is a similar pattern.

(Master - No hash when EMC disabled)
Packet Size    RX Rate PPs    RX Rate Mbps    RX %
64        13418452.15    6870.248    45.086

(Patch - hash applied when EMC disabled)
Packet Size    RX Rate PPs    RX Rate Mbps    RX %
64        12958087.12    6634.541    43.539
With this in mind I'll push this to master today.

Thanks for testing and applying.

What about backporting? The issue affects all branches since 2.9.
Applies cleanly down to 2.10. I could send separate patch for 2.9
if needed.


Yes, good point, I've pushed 2.11, 2.10. and a reworked patch for 2.9.

Thanks
Ian
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to