| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | #ifndef __LINUX_GEN_STATS_H
 | 
					
						
							|  |  |  | #define __LINUX_GEN_STATS_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <linux/types.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | enum { | 
					
						
							|  |  |  | 	TCA_STATS_UNSPEC, | 
					
						
							|  |  |  | 	TCA_STATS_BASIC, | 
					
						
							|  |  |  | 	TCA_STATS_RATE_EST, | 
					
						
							|  |  |  | 	TCA_STATS_QUEUE, | 
					
						
							|  |  |  | 	TCA_STATS_APP, | 
					
						
							| 
									
										
										
										
											2013-06-06 08:43:22 -07:00
										 |  |  | 	TCA_STATS_RATE_EST64, | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	__TCA_STATS_MAX, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | #define TCA_STATS_MAX (__TCA_STATS_MAX - 1)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * struct gnet_stats_basic - byte/packet throughput statistics | 
					
						
							|  |  |  |  * @bytes: number of seen bytes | 
					
						
							|  |  |  |  * @packets: number of seen packets | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2009-11-04 09:50:58 -08:00
										 |  |  | struct gnet_stats_basic { | 
					
						
							| 
									
										
										
										
											2009-08-16 09:36:49 +00:00
										 |  |  | 	__u64	bytes; | 
					
						
							|  |  |  | 	__u32	packets; | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2009-11-04 09:50:58 -08:00
										 |  |  | struct gnet_stats_basic_packed { | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	__u64	bytes; | 
					
						
							|  |  |  | 	__u32	packets; | 
					
						
							| 
									
										
										
											
												net: reorder struct Qdisc for better SMP performance
dev_queue_xmit() needs to dirty fields "state", "q", "bstats" and "qstats"
On x86_64 arch, they currently span three cache lines, involving more
cache line ping pongs than necessary, making longer holding of queue spinlock.
We can reduce this to one cache line, by grouping all read-mostly fields
at the beginning of structure. (Or should I say, all highly modified fields
at the end :) )
Before patch :
offsetof(struct Qdisc, state)=0x38
offsetof(struct Qdisc, q)=0x48
offsetof(struct Qdisc, bstats)=0x80
offsetof(struct Qdisc, qstats)=0x90
sizeof(struct Qdisc)=0xc8
After patch :
offsetof(struct Qdisc, state)=0x80
offsetof(struct Qdisc, q)=0x88
offsetof(struct Qdisc, bstats)=0xa0
offsetof(struct Qdisc, qstats)=0xac
sizeof(struct Qdisc)=0xc0
Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
											
										 
											2009-03-20 01:33:32 -07:00
										 |  |  | } __attribute__ ((packed)); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * struct gnet_stats_rate_est - rate estimator | 
					
						
							|  |  |  |  * @bps: current byte rate | 
					
						
							|  |  |  |  * @pps: current packet rate | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2009-11-04 09:50:58 -08:00
										 |  |  | struct gnet_stats_rate_est { | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	__u32	bps; | 
					
						
							|  |  |  | 	__u32	pps; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-06 08:43:22 -07:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * struct gnet_stats_rate_est64 - rate estimator | 
					
						
							|  |  |  |  * @bps: current byte rate | 
					
						
							|  |  |  |  * @pps: current packet rate | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct gnet_stats_rate_est64 { | 
					
						
							|  |  |  | 	__u64	bps; | 
					
						
							|  |  |  | 	__u64	pps; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * struct gnet_stats_queue - queuing statistics | 
					
						
							|  |  |  |  * @qlen: queue length | 
					
						
							|  |  |  |  * @backlog: backlog size of queue | 
					
						
							|  |  |  |  * @drops: number of dropped packets | 
					
						
							|  |  |  |  * @requeues: number of requeues | 
					
						
							|  |  |  |  * @overlimits: number of enqueues over the limit | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2009-11-04 09:50:58 -08:00
										 |  |  | struct gnet_stats_queue { | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	__u32	qlen; | 
					
						
							|  |  |  | 	__u32	backlog; | 
					
						
							|  |  |  | 	__u32	drops; | 
					
						
							|  |  |  | 	__u32	requeues; | 
					
						
							|  |  |  | 	__u32	overlimits; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * struct gnet_estimator - rate estimator configuration | 
					
						
							|  |  |  |  * @interval: sampling period | 
					
						
							|  |  |  |  * @ewma_log: the log of measurement window weight | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2009-11-04 09:50:58 -08:00
										 |  |  | struct gnet_estimator { | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	signed char	interval; | 
					
						
							|  |  |  | 	unsigned char	ewma_log; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif /* __LINUX_GEN_STATS_H */
 |