Message ID | 20200911232853.1072362-3-kuba@kernel.org |
---|---|
State | Changes Requested |
Delegated to: | David Miller |
Headers | show |
Series | ethtool: add pause frame stats | expand |
On Fri, 2020-09-11 at 16:28 -0700, Jakub Kicinski wrote: > Tell people that there now is an interface for querying pause frames. > A little bit of restructuring is needed given this is a first source > of such statistics. > > Signed-off-by: Jakub Kicinski <kuba@kernel.org> > --- > Documentation/networking/statistics.rst | 57 ++++++++++++++++++++++- > -- > 1 file changed, 52 insertions(+), 5 deletions(-) > > diff --git a/Documentation/networking/statistics.rst > b/Documentation/networking/statistics.rst > index d490b535cd14..8e15bc98830b 100644 > --- a/Documentation/networking/statistics.rst > +++ b/Documentation/networking/statistics.rst > @@ -4,16 +4,23 @@ > Interface statistics > ==================== > > +Overview > +======== > + > This document is a guide to Linux network interface statistics. > > -There are two main sources of interface statistics in Linux: > +There are three main sources of interface statistics in Linux: > > - standard interface statistics based on > - :c:type:`struct rtnl_link_stats64 <rtnl_link_stats64>`; and > + :c:type:`struct rtnl_link_stats64 <rtnl_link_stats64>`; > + - protocol-specific statistics; and > - driver-defined statistics available via ethtool. > > -There are multiple interfaces to reach the former. Most commonly > used > -is the `ip` command from `iproute2`:: > +Standard interface statistics > +----------------------------- > + > +There are multiple interfaces to reach the standard statistics. > +Most commonly used is the `ip` command from `iproute2`:: > > $ ip -s -s link show dev ens4u1u1 > 6: ens4u1u1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc > fq_codel state UP mode DEFAULT group default qlen 1000 > @@ -34,7 +41,26 @@ If `-s` is specified once the detailed errors > won't be shown. > > `ip` supports JSON formatting via the `-j` option. > > -Ethtool statistics can be dumped using `ethtool -S $ifc`, e.g.:: > +Protocol-specific statistics > +---------------------------- > + > +Some of the interfaces used for configuring devices are also able > +to report related statistics. For example ethtool interface used > +to configure pause frames can report corresponding hardware > counters:: > + > + $ ethtool --include-statistics -a eth0 > + Pause parameters for eth0: > + Autonegotiate: on > + RX: on > + TX: on > + Statistics: > + tx_pause_frames: 1 > + rx_pause_frames: 1 > + this will require to access the HW twice per stats request to read both stats and current parameters, maybe this is not a big deal, but sharp accuracy can be important for some performance enthusiasts. Do we need an API that only reports statistics without the current parameters ?
On Mon, 14 Sep 2020 19:33:08 +0000 Saeed Mahameed wrote: > > +Protocol-specific statistics > > +---------------------------- > > + > > +Some of the interfaces used for configuring devices are also able > > +to report related statistics. For example ethtool interface used > > +to configure pause frames can report corresponding hardware > > counters:: > > + > > + $ ethtool --include-statistics -a eth0 > > + Pause parameters for eth0: > > + Autonegotiate: on > > + RX: on > > + TX: on > > + Statistics: > > + tx_pause_frames: 1 > > + rx_pause_frames: 1 > > + > > this will require to access the HW twice per stats request to read both > stats and current parameters, maybe this is not a big deal, but sharp > accuracy can be important for some performance enthusiasts. > > Do we need an API that only reports statistics without the current > parameters ? That crossed my mind. IDK how real this concern is if we have ethtool -S which dumps half of the universe and nobody ever done anything about it.. Once we start adding more interfaces (as I said elsewhere I plan to add FEC counters) we'll also have to do multiple calls for multiple types of stats. But I think that's fine as a starting point. We can extend RTM_GETSTATS to provide an efficient interface when needed. As you may recall a couple years back I posted a set with "hierarchical stats" which as an attempt to solve all the problems at once. I concluded that it's a wrong approach. We should start with the simple and obvious stuff. We can build complexity later.
On Mon, 2020-09-14 at 12:52 -0700, Jakub Kicinski wrote: > On Mon, 14 Sep 2020 19:33:08 +0000 Saeed Mahameed wrote: > > > +Protocol-specific statistics > > > +---------------------------- > > > + > > > +Some of the interfaces used for configuring devices are also > > > able > > > +to report related statistics. For example ethtool interface used > > > +to configure pause frames can report corresponding hardware > > > counters:: > > > + > > > + $ ethtool --include-statistics -a eth0 > > > + Pause parameters for eth0: > > > + Autonegotiate: on > > > + RX: on > > > + TX: on > > > + Statistics: > > > + tx_pause_frames: 1 > > > + rx_pause_frames: 1 > > > + > > > > this will require to access the HW twice per stats request to read > > both > > stats and current parameters, maybe this is not a big deal, but > > sharp > > accuracy can be important for some performance enthusiasts. > > > > Do we need an API that only reports statistics without the current > > parameters ? > > That crossed my mind. IDK how real this concern is if we have ethtool > -S which dumps half of the universe and nobody ever done anything > about it.. > > Once we start adding more interfaces (as I said elsewhere I plan to > add > FEC counters) we'll also have to do multiple calls for multiple types > of stats. But I think that's fine as a starting point. We can extend > RTM_GETSTATS to provide an efficient interface when needed. > > As you may recall a couple years back I posted a set with > "hierarchical > stats" which as an attempt to solve all the problems at once. > I concluded that it's a wrong approach. We should start with the > simple > and obvious stuff. We can build complexity later. Agreed.
diff --git a/Documentation/networking/statistics.rst b/Documentation/networking/statistics.rst index d490b535cd14..8e15bc98830b 100644 --- a/Documentation/networking/statistics.rst +++ b/Documentation/networking/statistics.rst @@ -4,16 +4,23 @@ Interface statistics ==================== +Overview +======== + This document is a guide to Linux network interface statistics. -There are two main sources of interface statistics in Linux: +There are three main sources of interface statistics in Linux: - standard interface statistics based on - :c:type:`struct rtnl_link_stats64 <rtnl_link_stats64>`; and + :c:type:`struct rtnl_link_stats64 <rtnl_link_stats64>`; + - protocol-specific statistics; and - driver-defined statistics available via ethtool. -There are multiple interfaces to reach the former. Most commonly used -is the `ip` command from `iproute2`:: +Standard interface statistics +----------------------------- + +There are multiple interfaces to reach the standard statistics. +Most commonly used is the `ip` command from `iproute2`:: $ ip -s -s link show dev ens4u1u1 6: ens4u1u1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 @@ -34,7 +41,26 @@ If `-s` is specified once the detailed errors won't be shown. `ip` supports JSON formatting via the `-j` option. -Ethtool statistics can be dumped using `ethtool -S $ifc`, e.g.:: +Protocol-specific statistics +---------------------------- + +Some of the interfaces used for configuring devices are also able +to report related statistics. For example ethtool interface used +to configure pause frames can report corresponding hardware counters:: + + $ ethtool --include-statistics -a eth0 + Pause parameters for eth0: + Autonegotiate: on + RX: on + TX: on + Statistics: + tx_pause_frames: 1 + rx_pause_frames: 1 + +Driver-defined statistics +------------------------- + +Driver-defined ethtool statistics can be dumped using `ethtool -S $ifc`, e.g.:: $ ethtool -S ens4u1u1 NIC statistics: @@ -94,6 +120,17 @@ Identifiers via `ETHTOOL_GSTRINGS` with `string_set` set to `ETH_SS_STATS`, and values via `ETHTOOL_GSTATS`. User space should use `ETHTOOL_GDRVINFO` to retrieve the number of statistics (`.n_stats`). +ethtool-netlink +--------------- + +Ethtool netlink is a replacement for the older IOCTL interface. + +Protocol-related statistics can be requested in get commands by setting +the `ETHTOOL_FLAG_STATS` flag in `ETHTOOL_A_HEADER_FLAGS`. Currently +statistics are supported in the following commands: + + - `ETHTOOL_MSG_PAUSE_GET` + debugfs ------- @@ -130,3 +167,13 @@ user space trying to read them. Statistics must persist across routine operations like bringing the interface down and up. + +Kernel-internal data structures +------------------------------- + +The following structures are internal to the kernel, their members are +translated to netlink attributes when dumped. Drivers must not overwrite +the statistics they don't report with 0. + +.. kernel-doc:: include/linux/ethtool.h + :identifiers: ethtool_pause_stats
Tell people that there now is an interface for querying pause frames. A little bit of restructuring is needed given this is a first source of such statistics. Signed-off-by: Jakub Kicinski <kuba@kernel.org> --- Documentation/networking/statistics.rst | 57 ++++++++++++++++++++++--- 1 file changed, 52 insertions(+), 5 deletions(-)