net: rocker: Add basic netdev counters - v2
Subsystems (3)
PATCH 1/1 net: rocker: Add basic netdev counters - v2
Add packet and byte counters for RX and TX paths.
$ ifconfig eth1
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::5054:ff:fe12:3501 prefixlen 64 scopeid 0x20<link>
ether 52:54:00:12:35:01 txqueuelen 1000 (Ethernet)
RX packets 63 bytes 15813 (15.4 KiB)
RX errors 1 dropped 0 overruns 0 frame 0
TX packets 79 bytes 17991 (17.5 KiB)
TX errors 7 dropped 0 overruns 0 carrier 0 collisions 0Rx / Tx errors tested by injecting faults in qemu's hardware model for Rocker.
v2:
- moved counter locations to avoid potential use after free per Florian's comment
--- drivers/net/ethernet/rocker/rocker.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-)
drivers/net/ethernet/rocker/rocker.c +20 -1
@@ -3915,6 +3915,8 @@ static netdev_tx_t rocker_port_xmit(struct sk_buff *skb, struct net_device *dev)rocker_tlv_nest_cancel (desc_info, frags); out:dev_kfree_skb (skb); + dev->stats.tx_dropped++; +return NETDEV_TX_OK ; }
@@ -4238,12 +4240,22 @@ static int rocker_port_poll_tx(struct napi_struct *napi, int budget)/* Cleanup tx descriptors */ while ((desc_info =rocker_desc_tail_get (&rocker_port->tx_ring))) { +struct sk_buff *skb; + err =rocker_desc_err (desc_info);if (err &&net_ratelimit ())netdev_err (rocker_port->dev,"tx desc received with err %d\n" , err);rocker_tx_desc_frags_unmap (rocker_port, desc_info); -dev_kfree_skb_any (rocker_desc_cookie_ptr_get (desc_info)); + + skb =rocker_desc_cookie_ptr_get (desc_info); +if (err ==0 ) { + rocker_port->dev->stats.tx_packets++; + rocker_port->dev->stats.tx_bytes += skb->len; + }else + rocker_port->dev->stats.tx_errors++; + +dev_kfree_skb_any (skb); credits++; }
@@ -4276,6 +4288,10 @@ static int rocker_port_rx_proc(struct rocker *rocker, rx_len =rocker_tlv_get_u16 (attrs[ROCKER_TLV_RX_FRAG_LEN ]);skb_put (skb, rx_len); skb->protocol =eth_type_trans (skb, rocker_port->dev); + + rocker_port->dev->stats.rx_packets++; + rocker_port->dev->stats.rx_bytes += skb->len; +netif_receive_skb (skb);return rocker_dma_rx_ring_skb_alloc (rocker, rocker_port, desc_info);
@@ -4309,6 +4325,9 @@ static int rocker_port_poll_rx(struct napi_struct *napi, int budget)netdev_err (rocker_port->dev,"rx processing failed with err %d\n" , err); } +if (err) + rocker_port->dev->stats.rx_errors++; +rocker_desc_gen_clear (desc_info);rocker_desc_head_set (rocker, &rocker_port->rx_ring, desc_info); credits++;
Signature · 1 line
1.9.3 (Apple Git-50)
Quoted 11 lines · David Ahern
Add packet and byte counters for RX and TX paths.
$ ifconfig eth1 eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 fe80::5054:ff:fe12:3501 prefixlen 64 scopeid 0x20<link> ether 52:54:00:12:35:01 txqueuelen 1000 (Ethernet) RX packets 63 bytes 15813 (15.4 KiB) RX errors 1 dropped 0 overruns 0 frame 0 TX packets 79 bytes 17991 (17.5 KiB) TX errors 7 dropped 0 overruns 0 carrier 0 collisions 0
Quoted 8 lines
Rx / Tx errors tested by injecting faults in qemu's hardware model for Rocker.
v2:
- moved counter locations to avoid potential use after free per Florian's commentSigned-off-by David Ahern <[email protected]>Cc Scott Feldman <[email protected]>Cc Jiri Pirko <[email protected]>
Thanks David. I think this is good enough for first pass. Longer term, I'd like to see this replaced by stats read from device for each port.
-scott
Quoted 4 lines · Scott Feldman
Thanks David. I think this is good enough for first pass. Longer term, I'd like to see this replaced by stats read from device for each port.
Aren't there 2 sets of stats at play here?
1. packets punted to the control plane / CPU,
2. packets forwarded through the ports.
If you have the netdev counters resemble packets handled through the port it could be confusing to someone looking at packets handled by the OS.
What about having detailed counters local to the driver (i.e., ethtool -S) show the low level stats like packets handled through the port?
David
Quoted 11 lines · David Ahern
Quoted 5 lines · Scott Feldman
Thanks David. I think this is good enough for first pass. Longer term, I'd like to see this replaced by stats read from device for each port.
Aren't there 2 sets of stats at play here?
1. packets punted to the control plane / CPU,
2. packets forwarded through the ports.
You're right.
Quoted 2 lines
If you have the netdev counters resemble packets handled through the port it could be confusing to someone looking at packets handled by the OS.
Agreed, keep traditional netdev stats for pkts to/from OS. Maybe we're done then?
Quoted 2 lines
What about having detailed counters local to the driver (i.e., ethtool -S) show the low level stats like packets handled through the port?
That sounds perfect, to use ethtool -S for extended device stats.
David Miller
maintainerFrom: Scott Feldman <[email protected]>
Date: Fri, 16 Jan 2015 15:41:41 -0800
Quoted 21 lines · David Ahern
Quoted 11 lines
Add packet and byte counters for RX and TX paths.
$ ifconfig eth1 eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 fe80::5054:ff:fe12:3501 prefixlen 64 scopeid 0x20<link> ether 52:54:00:12:35:01 txqueuelen 1000 (Ethernet) RX packets 63 bytes 15813 (15.4 KiB) RX errors 1 dropped 0 overruns 0 frame 0 TX packets 79 bytes 17991 (17.5 KiB) TX errors 7 dropped 0 overruns 0 carrier 0 collisions 0Quoted 8 lines
Rx / Tx errors tested by injecting faults in qemu's hardware model for Rocker.
v2:
- moved counter locations to avoid potential use after free per Florian's commentSigned-off-by David Ahern <[email protected]>Cc Scott Feldman <[email protected]>Cc Jiri Pirko <[email protected]>
Quoted 5 lines
Signed-off-by Scott Feldman <[email protected]>Thanks David. I think this is good enough for first pass. Longer term, I'd like to see this replaced by stats read from device for each port.
Ok, applied, thanks everyone.
Quoted 11 lines · Fri, Jan 16, 2015 at 10:22:29PM CET, [email protected] wrote:
Add packet and byte counters for RX and TX paths.
$ ifconfig eth1 eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 fe80::5054:ff:fe12:3501 prefixlen 64 scopeid 0x20<link> ether 52:54:00:12:35:01 txqueuelen 1000 (Ethernet) RX packets 63 bytes 15813 (15.4 KiB) RX errors 1 dropped 0 overruns 0 frame 0 TX packets 79 bytes 17991 (17.5 KiB) TX errors 7 dropped 0 overruns 0 carrier 0 collisions 0
Quoted 6 lines
Rx / Tx errors tested by injecting faults in qemu's hardware model for Rocker.
v2:
- moved counter locations to avoid potential use after free per Florian's commentSigned-off-by David Ahern <[email protected]>
Thanks David.