Jeff Sipek wrote:
+ spinlock_t rx_packets;
+ spinlock_t tx_packets;
+ spinlock_t rx_bytes;
+ spinlock_t tx_bytes;
+ spinlock_t rx_errors;
+ spinlock_t tx_errors;
+ spinlock_t rx_dropped;
+ spinlock_t tx_dropped;
+ spinlock_t multicast;
+ spinlock_t collisions;
+ spinlock_t rx_length_errors;
+ spinlock_t rx_over_errors;
+ spinlock_t rx_crc_errors;
+ spinlock_t rx_frame_errors;
+ spinlock_t rx_fifo_errors;
+ spinlock_t rx_missed_errors;
+ spinlock_t tx_aborted_errors;
+ spinlock_t tx_carrier_errors;
+ spinlock_t tx_fifo_errors;
+ spinlock_t tx_heartbeat_errors;
+ spinlock_t tx_window_errors;
+ spinlock_t rx_compressed;
+ spinlock_t tx_compressed;
That's a fat daddy list of locks you got there.
+ NETSTAT_TYPE _rx_packets; /* total packets received
+ NETSTAT_TYPE _tx_packets; /* total packets transmitted
+ NETSTAT_TYPE _rx_bytes; /* total bytes received
+ NETSTAT_TYPE _tx_bytes; /* total bytes transmitted
+ NETSTAT_TYPE _rx_errors; /* bad packets received
+ NETSTAT_TYPE _tx_errors; /* packet transmit problems
+ NETSTAT_TYPE _rx_dropped; /* no space in linux buffers
+ NETSTAT_TYPE _tx_dropped; /* no space available in linux
+ NETSTAT_TYPE _multicast; /* multicast packets received
+ NETSTAT_TYPE _collisions;
Increasing user-visible sizes arbitrarily breaks stuff. Having
config-dependent types like this increases complexity.
Short term, just sample the stats more rapidly.
Long term, I suppose with 10GbE we should start thinking about this.
Personally, I would prefer to make the standard net device stats
available in the format already exported by ETHTOOL_GSTATS -- which I
note uses u64's for its counters, and it's easily extensible. I
received a request for this just today, even.
P.S. Please cc netdev@xxxxxxxxxxx for networking discussions.