 45203a3b38
			
		
	
	
	45203a3b38
	
	
	
		
			
			struct gnet_stats_rate_est contains u32 fields, so the bytes per second field can wrap at 34360Mbit. Add a new gnet_stats_rate_est64 structure to get 64bit bps/pps fields, and switch the kernel to use this structure natively. This structure is dumped to user space as a new attribute : TCA_STATS_RATE_EST64 Old tc command will now display the capped bps (to 34360Mbit), instead of wrapped values, and updated tc command will display correct information. Old tc command output, after patch : eric:~# tc -s -d qd sh dev lo qdisc pfifo 8001: root refcnt 2 limit 1000p Sent 80868245400 bytes 1978837 pkt (dropped 0, overlimits 0 requeues 0) rate 34360Mbit 189696pps backlog 0b 0p requeues 0 This patch carefully reorganizes "struct Qdisc" layout to get optimal performance on SMP. Signed-off-by: Eric Dumazet <edumazet@google.com> Cc: Ben Hutchings <bhutchings@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
		
			
				
	
	
		
			78 lines
		
	
	
	
		
			1.5 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
	
		
			1.5 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| #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,
 | |
| 	TCA_STATS_RATE_EST64,
 | |
| 	__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
 | |
|  */
 | |
| struct gnet_stats_basic {
 | |
| 	__u64	bytes;
 | |
| 	__u32	packets;
 | |
| };
 | |
| struct gnet_stats_basic_packed {
 | |
| 	__u64	bytes;
 | |
| 	__u32	packets;
 | |
| } __attribute__ ((packed));
 | |
| 
 | |
| /**
 | |
|  * struct gnet_stats_rate_est - rate estimator
 | |
|  * @bps: current byte rate
 | |
|  * @pps: current packet rate
 | |
|  */
 | |
| struct gnet_stats_rate_est {
 | |
| 	__u32	bps;
 | |
| 	__u32	pps;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * struct gnet_stats_rate_est64 - rate estimator
 | |
|  * @bps: current byte rate
 | |
|  * @pps: current packet rate
 | |
|  */
 | |
| struct gnet_stats_rate_est64 {
 | |
| 	__u64	bps;
 | |
| 	__u64	pps;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * 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
 | |
|  */
 | |
| struct gnet_stats_queue {
 | |
| 	__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
 | |
|  */
 | |
| struct gnet_estimator {
 | |
| 	signed char	interval;
 | |
| 	unsigned char	ewma_log;
 | |
| };
 | |
| 
 | |
| 
 | |
| #endif /* __LINUX_GEN_STATS_H */
 |