net/virtio: optimize header reset on any layout
authorYuanhan Liu <yuanhan.liu@linux.intel.com>
Wed, 11 Jan 2017 04:27:12 +0000 (12:27 +0800)
committerYuanhan Liu <yuanhan.liu@linux.intel.com>
Mon, 30 Jan 2017 13:33:12 +0000 (14:33 +0100)
commit16994abee215e55dcccf19114b324d5c407b3f56
tree29b166c3524814bb17db46996babb161f17c48ff
parentc9ea670c1dc7e3f111d8139f915082b60c9c1ffe
net/virtio: optimize header reset on any layout

When any layout is used, the header is stored in the head room of mbuf.
mbuf is allocated and filled by user, means there is no gurateen the
header is all zero for non TSO case. Therefore, we have to do the reset
by ourself:

    memest(hdr, 0, head_size);

The memset has two impacts on performance:

- memset could not be inlined, which is a bit costly.
- more importantly, it touches the mbuf, which could introduce severe
  cache issues as described by former patch.

Similiary, we could do the same trick: reset just when necessary, when
the corresponding field is already 0, which is likely true for a simple
l2 forward case. It could boost the performance up to 20+% in micro
benchmarking.

Cc: stable@dpdk.org
Cc: Maxime Coquelin <maxime.coquelin@redhat.com>
Cc: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
drivers/net/virtio/virtio_rxtx.c