summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorSubash Abhinov Kasiviswanathan <subashab@codeaurora.org>2016-01-08 14:14:35 -0700
committerKyle Yan <kyan@codeaurora.org>2016-04-28 16:37:50 -0700
commitdb859b609f7b8d62e366837c8e02cc68c28f2aae (patch)
tree5c4c360dc5f028ef26bde80c76fed6eb1f80da83 /include
parenta5cfe2aa2a59b107a0db34de5a4a145effee530d (diff)
net: rmnet_data: Add a GRO flush timer
The current GRO implementation relies on NET_RX to complete processing or the max possible TCP segment size for it to flush the GRO coalesced packets. This leads to coalescing a large number of packets which translates to very few ACKs. Since the number of ACKs are very few and delayed during the slow start phase (stretch ACK's), we see that the initial throughput ramp up is slow compared to normal RFC TCP where we send an ACK per two packets. Note that there is no difference between GRO and non GRO after the max window size is reached. Add a mechanism within rmnet_data to force the flush of packets every 10 micro seconds (experimentally determined) by default. This is controlled by the module parameter "gro_flush_time" and can be configured to any value less than a second. To disable this feature, set this entry to 0. This reduces the coalesce of packets which translates to increased number of ACK's compared to normal GRO but lesser ACK's compared to NO GRO. There is no increase in power for a day to day use case. Note that this optimization is specific to TCP GRO path only. Some useful stats below for TCP DL at 400Mbps - |TCP GRO Default | TCP GRO flush timer 10us ================================================================== iperf 1st second tput | 300Mbps | 330Mbps coalesce ratio | 15 | 4.5 CRs-Fixed: 961186 Change-Id: Ie8d76c493d61f3f4c256dbaa0378b22a361eed49 Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
Diffstat (limited to 'include')
0 files changed, 0 insertions, 0 deletions