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.

Best regards, Ilya Maximets.

>  lib/dpif-netdev.c | 21 +++++++--------------
>  1 file changed, 7 insertions(+), 14 deletions(-)
> 
> diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
> index 4d6d0c372..35cd00712 100644
> --- a/lib/dpif-netdev.c
> +++ b/lib/dpif-netdev.c
> @@ -6438,20 +6438,13 @@ dfc_processing(struct dp_netdev_pmd_thread *pmd,
>  
>          miniflow_extract(packet, &key->mf);
>          key->len = 0; /* Not computed yet. */
> -        /* If EMC and SMC disabled skip hash computation */
> -        if (smc_enable_db == true || cur_min != 0) {
> -            if (!md_is_valid) {
> -                key->hash = dpif_netdev_packet_get_rss_hash_orig_pkt(packet,
> -                        &key->mf);
> -            } else {
> -                key->hash = dpif_netdev_packet_get_rss_hash(packet, 
> &key->mf);
> -            }
> -        }
> -        if (cur_min) {
> -            flow = emc_lookup(&cache->emc_cache, key);
> -        } else {
> -            flow = NULL;
> -        }
> +        key->hash =
> +                (md_is_valid == false)
> +                ? dpif_netdev_packet_get_rss_hash_orig_pkt(packet, &key->mf)
> +                : dpif_netdev_packet_get_rss_hash(packet, &key->mf);
> +
> +        /* If EMC is disabled skip emc_lookup */
> +        flow = (cur_min != 0) ? emc_lookup(&cache->emc_cache, key) : NULL;
>          if (OVS_LIKELY(flow)) {
>              tcp_flags = miniflow_get_tcp_flags(&key->mf);
>              n_emc_hit++;
> 
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to