[ovs-dev] [PATCH v4] dpif-netdev: Avoid reading RSS hash when EMC is disabled

Fischetti, Antonio antonio.fischetti at intel.com
Sat Aug 26 16:57:30 UTC 2017


> -----Original Message-----
> From: Darrell Ball [mailto:dball at vmware.com]
> Sent: Saturday, August 26, 2017 1:45 AM
> To: Fischetti, Antonio <antonio.fischetti at intel.com>; dev at openvswitch.org
> Subject: Re: [ovs-dev] [PATCH v4] dpif-netdev: Avoid reading RSS hash when EMC
> is disabled
> 
> 
> 
> On 8/25/17, 3:21 PM, "Fischetti, Antonio" <antonio.fischetti at intel.com> wrote:
> 
> 
> 
>     > -----Original Message-----
>     > From: Darrell Ball [mailto:dball at vmware.com]
>     > Sent: Friday, August 25, 2017 6:19 PM
>     > To: Fischetti, Antonio <antonio.fischetti at intel.com>; dev at openvswitch.org
>     > Subject: Re: [ovs-dev] [PATCH v4] dpif-netdev: Avoid reading RSS hash
> when EMC
>     > is disabled
>     >
>     > Hi Antonio
>     >
>     > On 8/25/17, 6:56 AM, "ovs-dev-bounces at openvswitch.org on behalf of
>     > antonio.fischetti at intel.com" <ovs-dev-bounces at openvswitch.org on behalf
> of
>     > antonio.fischetti at intel.com> wrote:
>     >
>     >     When EMC is disabled the reading of RSS hash is skipped.
>     >     Also, for packets that are not recirculated it retrieves
>     >     the hash value without considering the recirc id.
>     >
>     >     Signed-off-by: Antonio Fischetti <antonio.fischetti at intel.com>
>     >     ---
>     >
>     >      V4
>     >       - reworked to remove dependencies from other patches in
>     >         patchset "Skip EMC for recirc pkts and other optimizations."
>     >         https://urldefense.proofpoint.com/v2/url?u=https-
>     > 3A__mail.openvswitch.org_pipermail_ovs-2Ddev_2017-
>     >
> 2DAugust_337320.html&d=DwICAg&c=uilaK90D4TOVoH58JNXRgQ&r=BVhFA09CGX7JQ5Ih-
>     >
> uZnsw&m=7UGZunJeutRugFmidRAykhZFRYscZ2rUUmhF7Ys9IM8&s=hzVGT1bI3zOj_x9J5cu18Q2D5
>     > WLHdEC1qhQ-Gu--TEE&e=
>     >
>     >       - measurements were repeated with the latest head of master.
>     >
>     >      Port-to-Port Test
>     >      =================
>     >             Software built with "-O2 -march=native -g".
>     >
>     >             I measured the Rx rate regardless of pkt loss by sending 1
> UDP
>     > flow,
>     >             64B packets, at the line-rate.
>     >
>     >             2 PMDs with 3 Tx queues.
>     >
>     >             Flows setup:
>     >               in_port=dpdk0 actions=output:dpdk1
>     >               in_port=dpdk1 actions=output:dpdk0
>     >
>     >             Results
>     >             -------
>     >             Values are for the Rx rate in Mpps, regardless of packet
> loss.
>     >
>     >             RSS column:
>     >                Yes: RSS hash is provided by the NIC
>     >                No: RSS is disabled and the 5-tuple hash must be
>     >                    computed in software.
>     >
>     >                    Note: to simulate RSS disabled I added the line
>     >                    dp_packet_rss_valid(struct dp_packet *p)
>     >                    {
>     >                    +return false;
>     >                    #ifdef DPDK_NETDEV
>     >
>     >             EMC column:
>     >                Yes: default probability insertion,
>     >                No: EMC disabled.
>     >
>     >             Orig means Commit ID:
>     >               75f9e007e7f7eb91461e238f882d1c539c56bb8d
>     >
>     > [Darrell]
>     > It looks like the main benefit (+6% throughput) occurs
>     > when RSS is not calculated by the NIC and emc is disabled. What are the
> common
>     > cases when RSS is not generated by the NIC ?
> 
>     [Antonio]
>     A common case could be when packets are coming in from a VM.
> 
> Well, there is no pnic in this case.
> I am thinking gateway usage is predominate in importance, but the RSS cases are
> about equal
> based on the sampling below, so we could almost ‘remove them from the
> equation’, as it were.
> 
> For non-RSS:
> Using emc, there is about 0.7 % degradation, but it is more common to use emc
> So overall, it is not clear; what do you think ?

[Antonio]
Yes, maybe it's better to keep this patch as it was in v3 - ie dependent on patch #1
"dpif-netdev: Skip EMC lookup/insert for recirc packets" which is under discussion -
because these changes can fit on those already present in patch #1.

When these changes are put in a stand-alone independent patch we can save some
cpu cycle for the hash part, but we have some more branch like
+            if (!md_is_valid) {
that could explain the 0.7% degradation.

Thanks anyway for your review and comments.

> 
>     Also when the NIC does not provide a hash value, but this shouldn't be
>     considered a common case I guess.
> 
> I agree.
> 
> 
>     >
>     >
>     >
>     >                         +--------------+----------------+
>     >             +-----+-----+    Orig      | Orig + this    |
>     >             | RSS | EMC |              |    patch       |
>     >             +-----+-----+--------------+----------------+
>     >             | Yes | Yes | 12.02, 11.38 | 12.18, 11.32   |
>     >             | Yes |  No |  8.35,  8.36 |  8.36,  8.38   |
>     >             +-----+-----+--------------+----------------+
>     >             |  No | Yes |  9.91, 11.15 |  9.84, 11.08   |
>     >             |  No |  No |  7.83,  7.87 |  8.33,  8.35   |
>     >             +-----+-----+--------------+----------------+
>     >
>     >     ---
>     >      lib/dpif-netdev.c | 32 ++++++++++++++++++++++++++++----
>     >      1 file changed, 28 insertions(+), 4 deletions(-)
>     >
>     >     diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
>     >     index e2cd931..1157998 100644
>     >     --- a/lib/dpif-netdev.c
>     >     +++ b/lib/dpif-netdev.c
>     >     @@ -4567,6 +4567,22 @@ dp_netdev_upcall(struct dp_netdev_pmd_thread
> *pmd,
>     > struct dp_packet *packet_,
>     >      }
>     >
>     >      static inline uint32_t
>     >     +dpif_netdev_packet_get_rss_hash_orig_pkt(struct dp_packet *packet,
>     >     +                                const struct miniflow *mf)
>     >     +{
>     >     +    uint32_t hash;
>     >     +
>     >     +    if (OVS_LIKELY(dp_packet_rss_valid(packet))) {
>     >     +        hash = dp_packet_get_rss_hash(packet);
>     >     +    } else {
>     >     +        hash = miniflow_hash_5tuple(mf, 0);
>     >     +        dp_packet_set_rss_hash(packet, hash);
>     >     +    }
>     >     +
>     >     +    return hash;
>     >     +}
>     >     +
>     >     +static inline uint32_t
>     >      dpif_netdev_packet_get_rss_hash(struct dp_packet *packet,
>     >                                      const struct miniflow *mf)
>     >      {
>     >     @@ -4701,10 +4717,18 @@ emc_processing(struct dp_netdev_pmd_thread
> *pmd,
>     >              }
>     >              miniflow_extract(packet, &key->mf);
>     >              key->len = 0; /* Not computed yet. */
>     >     -        key->hash = dpif_netdev_packet_get_rss_hash(packet, &key-
> >mf);
>     >     -
>     >     -        /* If EMC is disabled skip emc_lookup */
>     >     -        flow = (cur_min == 0) ? NULL: emc_lookup(flow_cache, key);
>     >     +        /* If EMC is disabled skip hash computation and emc_lookup
> */
>     >     +        if (OVS_LIKELY(cur_min)) {
>     >     +            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);
>     >     +            }
>     >     +            flow = emc_lookup(flow_cache, key);
>     >     +        } else {
>     >     +            flow = NULL;
>     >     +        }
>     >              if (OVS_LIKELY(flow)) {
>     >                  dp_netdev_queue_batches(packet, flow, &key->mf, batches,
>     >                                          n_batches);
>     >     --
>     >     2.4.11
>     >
>     >     _______________________________________________
>     >     dev mailing list
>     >     dev at openvswitch.org
>     >     https://urldefense.proofpoint.com/v2/url?u=https-
>     > 3A__mail.openvswitch.org_mailman_listinfo_ovs-
>     > 2Ddev&d=DwICAg&c=uilaK90D4TOVoH58JNXRgQ&r=BVhFA09CGX7JQ5Ih-
>     >
> uZnsw&m=7UGZunJeutRugFmidRAykhZFRYscZ2rUUmhF7Ys9IM8&s=azu46pbDSUX7cT7WFQXNZKhOT
>     > fE96wI4CF4xgXGi7Go&e=
>     >
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 



More information about the dev mailing list