Hi Antonio

On 8/25/17, 6:56 AM, "[email protected] on behalf of 
[email protected]" <[email protected] on behalf of 
[email protected]> 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 <[email protected]>
    ---
    
     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_x9J5cu18Q2D5WLHdEC1qhQ-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 ?


    
                        +--------------+----------------+
            +-----+-----+    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
    [email protected]
    
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=azu46pbDSUX7cT7WFQXNZKhOTfE96wI4CF4xgXGi7Go&e=
 
    

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

Reply via email to