net_sched: sch_fq: enable use of hrtimer slack
Add a new attribute to control the fq qdisc hrtimer slack.
Default is set to 10 usec.
When/if packets are throttled, fq set up an hrtimer that can
lead to one interrupt per packet in the throttled queue.
By using a timer slack, we allow better use of timer interrupts,
by giving them a chance to call multiple timer callbacks
at each hardware interrupt.
Also, giving a slack allows FQ to dequeue batches of packets
instead of a single one, thus increasing xmit_more efficiency.
This has no negative effect on the rate a TCP flow can sustain,
since each TCP flow maintains its own precise vtime (tp->tcp_wstamp_ns)
v2: added strict netlink checking (as feedback from Jakub Kicinski)
Tested:
1000 concurrent flows all using paced packets.
1,000,000 packets sent per second.
Before the patch :
$ vmstat 2 10
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0
60726784 23628
3485992 0 0 138 1 977 535 0 12 87 0 0
0 0 0
60714700 23628
3485628 0 0 0 0
1568827 26462 0 22 78 0 0
1 0 0
60716012 23628
3485656 0 0 0 0
1570034 26216 0 22 78 0 0
0 0 0
60722420 23628
3485492 0 0 0 0
1567230 26424 0 22 78 0 0
0 0 0
60727484 23628
3485556 0 0 0 0
1568220 26200 0 22 78 0 0
2 0 0
60718900 23628
3485380 0 0 0 40
1564721 26630 0 22 78 0 0
2 0 0
60718096 23628
3485332 0 0 0 0
1562593 26432 0 22 78 0 0
0 0 0
60719608 23628
3485064 0 0 0 0
1563806 26238 0 22 78 0 0
1 0 0
60722876 23628
3485236 0 0 0 130
1565874 26566 0 22 78 0 0
1 0 0
60722752 23628
3484908 0 0 0 0
1567646 26247 0 22 78 0 0
After the patch, slack of 10 usec, we can see a reduction of interrupts
per second, and a small decrease of reported cpu usage.
$ vmstat 2 10
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0
60722564 23628
3484728 0 0 133 1 696 545 0 13 87 0 0
1 0 0
60722568 23628
3484824 0 0 0 0 977278 25469 0 20 80 0 0
0 0 0
60716396 23628
3484764 0 0 0 0 979997 25326 0 20 80 0 0
0 0 0
60713844 23628
3484960 0 0 0 0 981394 25249 0 20 80 0 0
2 0 0
60720468 23628
3484916 0 0 0 0 982860 25062 0 20 80 0 0
1 0 0
60721236 23628
3484856 0 0 0 0 982867 25100 0 20 80 0 0
1 0 0
60722400 23628
3484456 0 0 0 8 982698 25303 0 20 80 0 0
0 0 0
60715396 23628
3484428 0 0 0 0 981777 25176 0 20 80 0 0
0 0 0
60716520 23628
3486544 0 0 0 36 978965 27857 0 21 79 0 0
0 0 0
60719592 23628
3486516 0 0 0 22 977318 25106 0 20 80 0 0
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>