datapath: Don't orphan packets in dp_dev transmit path.
authorBen Pfaff <blp@nicira.com>
Mon, 13 Jul 2009 22:50:32 +0000 (15:50 -0700)
committerBen Pfaff <blp@nicira.com>
Mon, 13 Jul 2009 22:50:32 +0000 (15:50 -0700)
commit923229363a32a793b7198819d141477b8522cf86
tree7d580a13c96153cf0b051b9d5e0c55bf0bc79b1d
parentd7cca8671055c79b1938de9731fb53ae6c32dc87
datapath: Don't orphan packets in dp_dev transmit path.

Before commit 72ca14c1 "datapath: Fix race against workqueue in dp_dev and
simplify code," the dp_dev network device had a device queue, and we would
orphan packets before sticking them on the queue.  This screwed up socket
accounting a bit, but the effect was limited to the device queue length.

Now, after that commit, the dp_dev device has no device queue, but it still
orphans packets.  This screws up socket accounting a *lot*, because the
effect is now unlimited, since there is no queue to limit it.

The solution is to not orphan packets at all.  There is little need for it
now since packet transmission now happens immediately, not in a workqueue
whose execution may be delayed.

This should fix bug #1519, which tests "netperf -t UDP_STREAM" performance,
finding that an unrealistically high number of UDP packets could be sent
but that none at all were received.  The send rate is due to the orphaning,
the receive rate presumably because at least one out of approx. 65535/1500
= 44 fragments per full packet were dropped in each case.
datapath/datapath.c
datapath/dp_dev.c