This patch set introduces transmit flow steering. The idea is that we record the transmit queues in a flow table that is indexed by skbuff. The flow table entries have two values: the queue_index and the head cnt of packets from the TX queue. We only allow a queue to change for a flow if the tail cnt in the TX queue advances beyond the recorded head cnt. That is the condition that should indicate that all outstanding packets for the flow have completed transmission so the queue can change.
Tracking the inflight queue is performed as part of BQL. Two fields are added to netdevice structure: head_cnt and tail_cnt. head_cnt is incremented in netdev_tx_sent_queue and tail_cnt is incremented in netdev_tx_completed_queue by the number of packets completed. This patch set creates /sys/class/net/eth*/xps_dev_flow_table_cnt which number of entries in the XPS flow table. Tom Herbert (4): net: Set SW hash in skb_set_hash_from_sk bql: Add tracking of inflight packets net: Add xps_dev_flow_table_cnt xfs: Transmit flow steering include/linux/netdevice.h | 26 +++++++++++++ include/net/sock.h | 6 +-- net/Kconfig | 6 +++ net/core/dev.c | 93 +++++++++++++++++++++++++++++++++++++++-------- net/core/net-sysfs.c | 87 ++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 199 insertions(+), 19 deletions(-) -- 2.8.0.rc2