pktgen: add flag NO_TIMESTAMP to disable timestamping
Subsystems (2)
PATCH 1/1 pktgen: add flag NO_TIMESTAMP to disable timestamping
Then testing the TX limits of the stack, then it is useful to be-able to disable the do_gettimeofday() timetamping on every packet.
This implements a pktgen flag NO_TIMESTAMP which will disable this call to do_gettimeofday().
The performance change on (my system E5-2695) with skb_clone=0, goes from TX 2,423,751 pps to 2,567,165 pps with flag NO_TIMESTAMP. Thus, the cost of do_gettimeofday() or saving is approx 23 nanosec.
---
net/core/pktgen.c | 19 ++++++++++++++++--- 1 files changed, 16 insertions(+), 3 deletions(-)
net/core/pktgen.c +16 -3
@@ -202,6 +202,7 @@#define F_QUEUE_MAP_CPU (1<<14)/* queue map mirrors smp_processor_id() */ #define F_NODE (1<<15)/* Node memory alloc*/ #define F_UDPCSUM (1<<16)/* Include UDP checksum */ +#define F_NO_TIMESTAMP (1<<17)/* Don't timestamp packets (default TS) */ /* Thread control flag bits */ #define T_STOP (1<<0)/* Stop run */
@@ -638,6 +639,9 @@ static int pktgen_if_show(struct seq_file *seq, void *v)if (pkt_dev->flags &F_UDPCSUM )seq_puts (seq,"UDPCSUM " ); +if (pkt_dev->flags &F_NO_TIMESTAMP ) +seq_puts (seq,"NO_TIMESTAMP " ); +if (pkt_dev->flags &F_MPLS_RND )seq_puts (seq,"MPLS_RND " );
@@ -1243,6 +1247,9 @@ static ssize_t pktgen_if_write(struct file *file,else if (strcmp (f,"!UDPCSUM" ) ==0 ) pkt_dev->flags &= ~F_UDPCSUM ; +else if (strcmp (f,"NO_TIMESTAMP" ) ==0 ) + pkt_dev->flags |=F_NO_TIMESTAMP ; +else { sprintf(pg_result, "Flag -:%s:- unknown\nAvailable flags, (prepend ! to un-set flag):\n%s",
@@ -1251,6 +1258,7 @@ static ssize_t pktgen_if_write(struct file *file,"MACSRC_RND, MACDST_RND, TXSIZE_RND, IPV6, " "MPLS_RND, VID_RND, SVID_RND, FLOW_SEQ, " "QUEUE_MAP_RND, QUEUE_MAP_CPU, UDPCSUM, " +"NO_TIMESTAMP, " #ifdef CONFIG_XFRM"IPSEC, " #endif
@@ -2685,9 +2693,14 @@ static void pktgen_finalize_skb(struct pktgen_dev *pkt_dev, struct sk_buff *skb, pgh->pgh_magic =htonl (PKTGEN_MAGIC ); pgh->seq_num =htonl (pkt_dev->seq_num); -do_gettimeofday (×tamp); - pgh->tv_sec =htonl (timestamp.tv_sec); - pgh->tv_usec =htonl (timestamp.tv_usec); +if (pkt_dev->flags &F_NO_TIMESTAMP ) { + pgh->tv_sec =0 ; + pgh->tv_usec =0 ; + }else { +do_gettimeofday (×tamp); + pgh->tv_sec =htonl (timestamp.tv_sec); + pgh->tv_usec =htonl (timestamp.tv_usec); + } } static struct sk_buff *pktgen_alloc_skb(struct net_device *dev,
Quoted 9 lines · Jesper Dangaard Brouer
Then testing the TX limits of the stack, then it is useful to be-able to disable the
do_gettimeofday()timetamping on every packet.This implements a pktgen flag
NO_TIMESTAMPwhich will disable this call todo_gettimeofday().The performance change on (my system E5-2695) with skb_clone=0, goes from TX 2,423,751 pps to 2,567,165 pps with flag
NO_TIMESTAMP. Thus, the cost ofdo_gettimeofday()or saving is approx 23 nanosec.
I guess using local_clock() would provide an accurate and less expensive timestamp, if a timestamp is needed.
Quoted 7 lines · On Fri, 29 Aug 2014 09:17:06 -0700 Eric Dumazet <[email protected]> wrote:
Quoted 6 lines · Jesper Dangaard Brouer
Then testing the TX limits of the stack, then it is useful to be-able to disable the
do_gettimeofday()timetamping on every packet.This implements a pktgen flag
NO_TIMESTAMPwhich will disable this call todo_gettimeofday().
Quoted 6 lines
Quoted 3 lines
The performance change on (my system E5-2695) with skb_clone=0, goes from TX 2,423,751 pps to 2,567,165 pps with flag
NO_TIMESTAMP. Thus, the cost ofdo_gettimeofday()or saving is approx 23 nanosec.I guess using
local_clock()would provide an accurate and less expensive timestamp, if a timestamp is needed.
Sure, but I don't need this timestamp, thus I added an option to disable it.
Signature · 5 lines
Best regards, Jesper Dangaard Brouer MSc.CS, Sr. Network Kernel Developer at Red Hat Author of http://www.iptv-analyzer.org LinkedIn: http://www.linkedin.com/in/brouer
David Miller
maintainerFrom: Jesper Dangaard Brouer <[email protected]>
Date: Thu, 28 Aug 2014 18:14:47 +0200
Quoted 11 lines
Then testing the TX limits of the stack, then it is useful to be-able to disable the
do_gettimeofday()timetamping on every packet.This implements a pktgen flag
NO_TIMESTAMPwhich will disable this call todo_gettimeofday().The performance change on (my system E5-2695) with skb_clone=0, goes from TX 2,423,751 pps to 2,567,165 pps with flag
NO_TIMESTAMP. Thus, the cost ofdo_gettimeofday()or saving is approx 23 nanosec.Signed-off-by Jesper Dangaard Brouer <[email protected]>
This is fine, applied, thanks!
Quoted 12 lines · Jesper Dangaard Brouer
Then testing the TX limits of the stack, then it is useful to be-able to disable the
do_gettimeofday()timetamping on every packet.This implements a pktgen flag
NO_TIMESTAMPwhich will disable this call todo_gettimeofday().The performance change on (my system E5-2695) with skb_clone=0, goes from TX 2,423,751 pps to 2,567,165 pps with flag
NO_TIMESTAMP. Thus, the cost ofdo_gettimeofday()or saving is approx 23 nanosec.Signed-off-by Jesper Dangaard Brouer <[email protected]>
net/core/pktgen.c static ssize_t pktgen_if_write(struct file *file, · line 1252
Quoted 3 lines
net/core/pktgen.c +3
-0+else if (strcmp (f,"NO_TIMESTAMP" ) ==0 ) + pkt_dev->flags |=F_NO_TIMESTAMP ; +
While porting pktgen changes into my own modified pktgen logic, I noticed that there is no handling for !NO_TIMESTAMP, so it seems you cannot disable this once it is enabled?
Thanks,
Ben
Signature · 2 lines
Ben Greear <[email protected]> Candela Technologies Inc http://www.candelatech.com