diff mbox series

[net-next,v2,2/8] docs: net: include the new ethtool pause stats in the stats doc

Message ID 20200911232853.1072362-3-kuba@kernel.org
State Changes Requested
Delegated to: David Miller
Headers show
Series ethtool: add pause frame stats | expand

Commit Message

Jakub Kicinski Sept. 11, 2020, 11:28 p.m. UTC
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(-)

Comments

Saeed Mahameed Sept. 14, 2020, 7:33 p.m. UTC | #1
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 ?
Jakub Kicinski Sept. 14, 2020, 7:52 p.m. UTC | #2
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.
Saeed Mahameed Sept. 14, 2020, 9:19 p.m. UTC | #3
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 mbox series

Patch

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