Skip to content

Commit

Permalink
dpif-netdev: Load packet pointer only once in emc_processing()
Browse files Browse the repository at this point in the history
For the machines I have access to, Reloading the same pointer from
memory seems to inhibit complier optimization somewhat.

In emc_processing(), using a single packet pointer, instead reloading
it from memory with packets[i], improves performance by 0.3 Mpps (tested
with 10G NIC pushing 64 byte packets, with the base line of 12.2 Mpps).

Besides improving performance, this patch should also improves code
readability.

Signed-off-by: Andy Zhou <[email protected]>
Acked-by: Daniele Di Proietto <[email protected]>
  • Loading branch information
azhou-nicira committed Feb 2, 2016
1 parent 1a64eb9 commit 5a2fed4
Showing 1 changed file with 7 additions and 6 deletions.
13 changes: 7 additions & 6 deletions lib/dpif-netdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -3301,9 +3301,10 @@ emc_processing(struct dp_netdev_pmd_thread *pmd, struct dp_packet **packets,

for (i = 0; i < cnt; i++) {
struct dp_netdev_flow *flow;
struct dp_packet *packet = packets[i];

if (OVS_UNLIKELY(dp_packet_size(packets[i]) < ETH_HEADER_LEN)) {
dp_packet_delete(packets[i]);
if (OVS_UNLIKELY(dp_packet_size(packet) < ETH_HEADER_LEN)) {
dp_packet_delete(packet);
n_dropped++;
continue;
}
Expand All @@ -3314,18 +3315,18 @@ emc_processing(struct dp_netdev_pmd_thread *pmd, struct dp_packet **packets,
}

struct netdev_flow_key *key = &keys[n_missed];
miniflow_extract(packets[i], &key->mf);
miniflow_extract(packet, &key->mf);
key->len = 0; /* Not computed yet. */
key->hash = dpif_netdev_packet_get_rss_hash(packets[i], &key->mf);
key->hash = dpif_netdev_packet_get_rss_hash(packet, &key->mf);

flow = emc_lookup(flow_cache, key);
if (OVS_LIKELY(flow)) {
dp_netdev_queue_batches(packets[i], flow, &key->mf, batches,
dp_netdev_queue_batches(packet, flow, &key->mf, batches,
n_batches);
} else {
/* Exact match cache missed. Group missed packets together at
* the beginning of the 'packets' array. */
packets[n_missed++] = packets[i];
packets[n_missed++] = packet;
}
}

Expand Down

0 comments on commit 5a2fed4

Please sign in to comment.