netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Tools for sampling ethtool --statistics
@ 2016-01-20  9:13 Jesper Dangaard Brouer
  2016-01-20 22:34 ` Or Gerlitz
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Jesper Dangaard Brouer @ 2016-01-20  9:13 UTC (permalink / raw)
  To: netdev@vger.kernel.org; +Cc: brouer, Or Gerlitz

Hi All,

I wrote a small tool[1] to extract ethtool --statistics|-S, sample and
present it in a more human readable manor.  You might also find this
useful...

https://github.com/netoptimizer/network-testing/blob/master/bin/ethtool_stats.pl

The reason I wrote this script is that the mlx5 driver (Mellanox 100 Gbit/s)
does not report correct ifconfig stats.  It reports the HW counters,
not what the network stack is able to handle.  I/we obviously need the
stack number when working on improving the stack.

-- 
Best regards,
  Jesper Dangaard Brouer
  MSc.CS, Principal Kernel Engineer at Red Hat
  Author of http://www.iptv-analyzer.org
  LinkedIn: http://www.linkedin.com/in/brouer

Output examples:

pktgen (1 core) sending ~20Mpps

Show adapter mlx5p2 statistics (ONLY that changed!)
Ethtool(mlx5p2) stat:     19431694 (     19,431,694) <= frames_rx /sec
Ethtool(mlx5p2) stat:   1243722215 (  1,243,722,215) <= in_octets /sec
Ethtool(mlx5p2) stat:     19433161 (     19,433,161) <= in_ucast_pkts /sec
Ethtool(mlx5p2) stat:   1243746943 (  1,243,746,943) <= octets /sec
Ethtool(mlx5p2) stat:   1243629263 (  1,243,629,263) <= octets_received /sec
Ethtool(mlx5p2) stat:     19433654 (     19,433,654) <= p64octets /sec
Ethtool(mlx5p2) stat:     19433556 (     19,433,556) <= pkts /sec
Ethtool(mlx5p2) stat:      1815546 (      1,815,546) <= rx3_packets /sec
Ethtool(mlx5p2) stat:   1165854821 (  1,165,854,821) <= rx_bytes /sec
Ethtool(mlx5p2) stat:     19430906 (     19,430,906) <= rx_csum_good /sec
Ethtool(mlx5p2) stat:     19430906 (     19,430,906) <= rx_packets /sec
Ethtool(mlx5p2) stat:   1165854821 (  1,165,854,821) <= rx_unicast_bytes /sec
Ethtool(mlx5p2) stat:     19430906 (     19,430,906) <= rx_unicast_packets /sec

pktgen (4 cores) sending ~50Mpps

Show adapter mlx5p2 statistics (ONLY that changed!)
Ethtool(mlx5p2) stat:     25710443 (     25,710,443) <= drop_events /sec
Ethtool(mlx5p2) stat:     51861645 (     51,861,645) <= frames_rx /sec
Ethtool(mlx5p2) stat:     25710502 (     25,710,502) <= in_discards /sec
Ethtool(mlx5p2) stat:   3319134161 (  3,319,134,161) <= in_octets /sec
Ethtool(mlx5p2) stat:     26150970 (     26,150,970) <= in_ucast_pkts /sec
Ethtool(mlx5p2) stat:   3319128053 (  3,319,128,053) <= octets /sec
Ethtool(mlx5p2) stat:   3319145319 (  3,319,145,319) <= octets_received /sec
Ethtool(mlx5p2) stat:     51861369 (     51,861,369) <= p64octets /sec
Ethtool(mlx5p2) stat:     51861375 (     51,861,375) <= pkts /sec
Ethtool(mlx5p2) stat:      1383475 (      1,383,475) <= rx3_packets /sec
Ethtool(mlx5p2) stat:   1569059171 (  1,569,059,171) <= rx_bytes /sec
Ethtool(mlx5p2) stat:     26150988 (     26,150,988) <= rx_csum_good /sec
Ethtool(mlx5p2) stat:     26150988 (     26,150,988) <= rx_packets /sec
Ethtool(mlx5p2) stat:   1569059171 (  1,569,059,171) <= rx_unicast_bytes /sec
Ethtool(mlx5p2) stat:     26150988 (     26,150,988) <= rx_unicast_packets /sec

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Tools for sampling ethtool --statistics
  2016-01-20  9:13 Tools for sampling ethtool --statistics Jesper Dangaard Brouer
@ 2016-01-20 22:34 ` Or Gerlitz
  2016-01-20 22:53   ` John Fastabend
  2016-01-21 10:35   ` Jesper Dangaard Brouer
       [not found] ` <CAKHjkj=+zaYXvHQWkWuU2LLVRxT_V7Pvmd3QqoGUdOL=HDjsRA@mail.gmail.com>
  2016-02-24 15:21 ` Or Gerlitz
  2 siblings, 2 replies; 6+ messages in thread
From: Or Gerlitz @ 2016-01-20 22:34 UTC (permalink / raw)
  To: Jesper Dangaard Brouer; +Cc: netdev@vger.kernel.org, Or Gerlitz

On Wed, Jan 20, 2016 at 11:13 AM, Jesper Dangaard Brouer
<brouer@redhat.com> wrote:
> Hi All,
>
> I wrote a small tool[1] to extract ethtool --statistics|-S, sample and
> present it in a more human readable manor.  You might also find this
> useful...
>
> https://github.com/netoptimizer/network-testing/blob/master/bin/ethtool_stats.pl
>
> The reason I wrote this script is that the mlx5 driver (Mellanox 100 Gbit/s)
> does not report correct ifconfig stats.  It reports the HW counters,
> not what the network stack is able to handle.  I/we obviously need the
> stack number when working on improving the stack.

correct && we should be fixing that ... still it's worthwhile to be
able and see per ring stats, specially when you're dealing/optimizing
in multi-stream env.

> Output examples:
>
> pktgen (1 core) sending ~20Mpps
>
> Show adapter mlx5p2 statistics (ONLY that changed!)
> Ethtool(mlx5p2) stat:     19431694 (     19,431,694) <= frames_rx /sec
> Ethtool(mlx5p2) stat:   1243722215 (  1,243,722,215) <= in_octets /sec
> Ethtool(mlx5p2) stat:     19433161 (     19,433,161) <= in_ucast_pkts /sec
> Ethtool(mlx5p2) stat:   1243746943 (  1,243,746,943) <= octets /sec
> Ethtool(mlx5p2) stat:   1243629263 (  1,243,629,263) <= octets_received /sec
> Ethtool(mlx5p2) stat:     19433654 (     19,433,654) <= p64octets /sec
> Ethtool(mlx5p2) stat:     19433556 (     19,433,556) <= pkts /sec
> Ethtool(mlx5p2) stat:      1815546 (      1,815,546) <= rx3_packets /sec
> Ethtool(mlx5p2) stat:   1165854821 (  1,165,854,821) <= rx_bytes /sec
> Ethtool(mlx5p2) stat:     19430906 (     19,430,906) <= rx_csum_good /sec
> Ethtool(mlx5p2) stat:     19430906 (     19,430,906) <= rx_packets /sec
> Ethtool(mlx5p2) stat:   1165854821 (  1,165,854,821) <= rx_unicast_bytes /sec
> Ethtool(mlx5p2) stat:     19430906 (     19,430,906) <= rx_unicast_packets /sec

was expecting to see tx_XXX stats, something wrong here?


> pktgen (4 cores) sending ~50Mpps
[...]

The 20M for single ring/core and 50M pps for four streams are really
cool results. Do the scripts to get ~such results exist in your
network testing github repo? last time I looked I wasn't sure if  the
multi-stream case is supported.

Could you post the two commands you used for these results along with
minimal spec of the system (CPU type/freq, special .config directives,
anything else)?

Or.

> Show adapter mlx5p2 statistics (ONLY that changed!)
> Ethtool(mlx5p2) stat:     25710443 (     25,710,443) <= drop_events /sec
> Ethtool(mlx5p2) stat:     51861645 (     51,861,645) <= frames_rx /sec
> Ethtool(mlx5p2) stat:     25710502 (     25,710,502) <= in_discards /sec
> Ethtool(mlx5p2) stat:   3319134161 (  3,319,134,161) <= in_octets /sec
> Ethtool(mlx5p2) stat:     26150970 (     26,150,970) <= in_ucast_pkts /sec
> Ethtool(mlx5p2) stat:   3319128053 (  3,319,128,053) <= octets /sec
> Ethtool(mlx5p2) stat:   3319145319 (  3,319,145,319) <= octets_received /sec
> Ethtool(mlx5p2) stat:     51861369 (     51,861,369) <= p64octets /sec
> Ethtool(mlx5p2) stat:     51861375 (     51,861,375) <= pkts /sec
> Ethtool(mlx5p2) stat:      1383475 (      1,383,475) <= rx3_packets /sec
> Ethtool(mlx5p2) stat:   1569059171 (  1,569,059,171) <= rx_bytes /sec
> Ethtool(mlx5p2) stat:     26150988 (     26,150,988) <= rx_csum_good /sec
> Ethtool(mlx5p2) stat:     26150988 (     26,150,988) <= rx_packets /sec
> Ethtool(mlx5p2) stat:   1569059171 (  1,569,059,171) <= rx_unicast_bytes /sec
> Ethtool(mlx5p2) stat:     26150988 (     26,150,988) <= rx_unicast_packets /sec

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Tools for sampling ethtool --statistics
  2016-01-20 22:34 ` Or Gerlitz
@ 2016-01-20 22:53   ` John Fastabend
  2016-01-21 10:35   ` Jesper Dangaard Brouer
  1 sibling, 0 replies; 6+ messages in thread
From: John Fastabend @ 2016-01-20 22:53 UTC (permalink / raw)
  To: Or Gerlitz, Jesper Dangaard Brouer; +Cc: netdev@vger.kernel.org, Or Gerlitz

[...]

> 
>> pktgen (4 cores) sending ~50Mpps
> [...]
> 
> The 20M for single ring/core and 50M pps for four streams are really
> cool results. Do the scripts to get ~such results exist in your
> network testing github repo? last time I looked I wasn't sure if  the
> multi-stream case is supported.
> 
> Could you post the two commands you used for these results along with
> minimal spec of the system (CPU type/freq, special .config directives,
> anything else)?
> 

Take a look at

./samples/pktgen/pktgen_sample02_multiqueue.sh
./samples/pktgen/pktgen_sample03_burst_single_flow.sh

that should get you there.

.John

> Or.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Tools for sampling ethtool --statistics
  2016-01-20 22:34 ` Or Gerlitz
  2016-01-20 22:53   ` John Fastabend
@ 2016-01-21 10:35   ` Jesper Dangaard Brouer
  1 sibling, 0 replies; 6+ messages in thread
From: Jesper Dangaard Brouer @ 2016-01-21 10:35 UTC (permalink / raw)
  To: Or Gerlitz; +Cc: netdev@vger.kernel.org, Or Gerlitz, brouer

On Thu, 21 Jan 2016 00:34:16 +0200
Or Gerlitz <gerlitz.or@gmail.com> wrote:

> On Wed, Jan 20, 2016 at 11:13 AM, Jesper Dangaard Brouer
> <brouer@redhat.com> wrote:
> > Hi All,
> >
> > I wrote a small tool[1] to extract ethtool --statistics|-S, sample and
> > present it in a more human readable manor.  You might also find this
> > useful...
> >
> > https://github.com/netoptimizer/network-testing/blob/master/bin/ethtool_stats.pl
> >
> > The reason I wrote this script is that the mlx5 driver (Mellanox 100 Gbit/s)
> > does not report correct ifconfig stats.  It reports the HW counters,
> > not what the network stack is able to handle.  I/we obviously need the
> > stack number when working on improving the stack.  
> 
> correct && we should be fixing that ... 

Yes, this need to be fixed. I'm currently playing around in that code,
and will fix it if you don't ;-)... (although, to be realistic, I will
not have time until after netdev 1.1. to submit upstream patches).

> still it's worthwhile to be
> able and see per ring stats, specially when you're dealing/optimizing
> in multi-stream env.

It is actually also useful for detecting other situation, which are
visible via obscure stats that we usually don't look at. I've been
postponing writing this script for years, and in the end it only took
me 2 hours to write (and 1 hour fixups the next day).


> > Output examples:
> >
> > pktgen (1 core) sending ~20Mpps
> >
> > Show adapter mlx5p2 statistics (ONLY that changed!)
> > Ethtool(mlx5p2) stat:     19431694 (     19,431,694) <= frames_rx /sec
> > Ethtool(mlx5p2) stat:   1243722215 (  1,243,722,215) <= in_octets /sec
> > Ethtool(mlx5p2) stat:     19433161 (     19,433,161) <= in_ucast_pkts /sec
> > Ethtool(mlx5p2) stat:   1243746943 (  1,243,746,943) <= octets /sec
> > Ethtool(mlx5p2) stat:   1243629263 (  1,243,629,263) <= octets_received /sec
> > Ethtool(mlx5p2) stat:     19433654 (     19,433,654) <= p64octets /sec
> > Ethtool(mlx5p2) stat:     19433556 (     19,433,556) <= pkts /sec
> > Ethtool(mlx5p2) stat:      1815546 (      1,815,546) <= rx3_packets /sec
> > Ethtool(mlx5p2) stat:   1165854821 (  1,165,854,821) <= rx_bytes /sec
> > Ethtool(mlx5p2) stat:     19430906 (     19,430,906) <= rx_csum_good /sec
> > Ethtool(mlx5p2) stat:     19430906 (     19,430,906) <= rx_packets /sec
> > Ethtool(mlx5p2) stat:   1165854821 (  1,165,854,821) <= rx_unicast_bytes /sec
> > Ethtool(mlx5p2) stat:     19430906 (     19,430,906) <= rx_unicast_packets /sec  
> 
> was expecting to see tx_XXX stats, something wrong here?

This was a RX only test (with another machine generating packets with
pktgen).

TX_xxx stats does show up when I run netperf.  And the single netperf
results are around 50Gbit/s (if IRQ RX process runs on another CPU that
netperf process, I guess this was Eric point earlier), if IRQ and
netperf runs on same CPU, perf drops to 23-26Gbit/s.  Running multiple
(super_)netperf the result max out at 64Gbit/s.


> > pktgen (4 cores) sending ~50Mpps  
> [...]
> 
> The 20M for single ring/core and 50M pps for four streams are really
> cool results. 

Yes, these 100G NICs are definitely the fastest HW I currently have!
Thanks BTW ;-)

> Do the scripts to get ~such results exist in your
> network testing github repo? last time I looked I wasn't sure if  the
> multi-stream case is supported.
> 
> Could you post the two commands you used for these results along with
> minimal spec of the system (CPU type/freq, special .config directives,
> anything else)?

Two mlx5 100G NICs
 - firmware-version: 12.12.1240
 - Description: ConnectX-4 VPI adapter card; EDR IB (100Gb/s)
                and 100GbE; dual-port QSFP28; PCIe3.0 x16; ROHS R6
  - PSID: MT_2190110032

The sender/generator machine:
 - CPU: i7-4790K CPU @ 4.00GHz

The receiver machine:
 - CPU: i7-6700K CPU @ 4.00GHz ("skylake")

Pktgen command [1] or [2]:
 ./pktgen_sample03_burst_single_flow.sh -i mlx5p2 -d 192.168.100.66 -m e4:1d:2d:af:60:65 -c1 -t 4

For sending multi-threads use parameter "-t X".


> > Show adapter mlx5p2 statistics (ONLY that changed!)
> > Ethtool(mlx5p2) stat:     25710443 (     25,710,443) <= drop_events /sec
> > Ethtool(mlx5p2) stat:     51861645 (     51,861,645) <= frames_rx /sec
> > Ethtool(mlx5p2) stat:     25710502 (     25,710,502) <= in_discards /sec

Notice I had to pressure it more that 26 Mpps before in_discards and
drop_events show up.

> > Ethtool(mlx5p2) stat:   3319134161 (  3,319,134,161) <= in_octets /sec
> > Ethtool(mlx5p2) stat:     26150970 (     26,150,970) <= in_ucast_pkts /sec
> > Ethtool(mlx5p2) stat:   3319128053 (  3,319,128,053) <= octets /sec
> > Ethtool(mlx5p2) stat:   3319145319 (  3,319,145,319) <= octets_received /sec
> > Ethtool(mlx5p2) stat:     51861369 (     51,861,369) <= p64octets /sec
> > Ethtool(mlx5p2) stat:     51861375 (     51,861,375) <= pkts /sec
> > Ethtool(mlx5p2) stat:      1383475 (      1,383,475) <= rx3_packets /sec

The rx3_packets were reduced a little (1.8Mpps -> 1.4Mpps), once
in_discards starts... 

> > Ethtool(mlx5p2) stat:   1569059171 (  1,569,059,171) <= rx_bytes /sec
> > Ethtool(mlx5p2) stat:     26150988 (     26,150,988) <= rx_csum_good /sec
> > Ethtool(mlx5p2) stat:     26150988 (     26,150,988) <= rx_packets /sec
> > Ethtool(mlx5p2) stat:   1569059171 (  1,569,059,171) <= rx_unicast_bytes /sec
> > Ethtool(mlx5p2) stat:     26150988 (     26,150,988) <= rx_unicast_packets /sec  


[1] https://github.com/netoptimizer/network-testing/tree/master/pktgen
[2] https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/samples/pktgen
-- 
Best regards,
  Jesper Dangaard Brouer
  MSc.CS, Principal Kernel Engineer at Red Hat
  Author of http://www.iptv-analyzer.org
  LinkedIn: http://www.linkedin.com/in/brouer

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Tools for sampling ethtool --statistics
       [not found] ` <CAKHjkj=+zaYXvHQWkWuU2LLVRxT_V7Pvmd3QqoGUdOL=HDjsRA@mail.gmail.com>
@ 2016-02-21  9:40   ` Rana Shahout
  0 siblings, 0 replies; 6+ messages in thread
From: Rana Shahout @ 2016-02-21  9:40 UTC (permalink / raw)
  To: brouer, netdev, ogerlitz

> Hi All,
>
> I wrote a small tool[1] to extract ethtool --statistics|-S, sample and
> present it in a more human readable manor.  You might also find this
> useful...
>
> https://github.com/netoptimizer/network-testing/blob/master/bin/ethtool_stats.pl
>
> The reason I wrote this script is that the mlx5 driver (Mellanox 100 Gbit/s)
> does not report correct ifconfig stats.  It reports the HW counters,
> not what the network stack is able to handle.  I/we obviously need the
> stack number when working on improving the stack.

mlx5 drive does not report correct counters also in ethtool statistics
(ethtool -S).
ethtool statistics reports also the HW counters, so all counters
except counters per channel are wrong.
We are working on fix. It will be available soon.

>
> --
> Best regards,
>   Jesper Dangaard Brouer
>   MSc.CS, Principal Kernel Engineer at Red Hat
>   Author of http://www.iptv-analyzer.org
>   LinkedIn: http://www.linkedin.com/in/brouer
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Tools for sampling ethtool --statistics
  2016-01-20  9:13 Tools for sampling ethtool --statistics Jesper Dangaard Brouer
  2016-01-20 22:34 ` Or Gerlitz
       [not found] ` <CAKHjkj=+zaYXvHQWkWuU2LLVRxT_V7Pvmd3QqoGUdOL=HDjsRA@mail.gmail.com>
@ 2016-02-24 15:21 ` Or Gerlitz
  2 siblings, 0 replies; 6+ messages in thread
From: Or Gerlitz @ 2016-02-24 15:21 UTC (permalink / raw)
  To: Jesper Dangaard Brouer; +Cc: netdev@vger.kernel.org

On Wed, Jan 20, 2016 at 11:13 AM, Jesper Dangaard Brouer
<brouer@redhat.com> wrote:

> I wrote a small tool[1] to extract ethtool --statistics|-S, sample and
> present it in a more human readable manor.  You might also find this useful...
[..]

> The reason I wrote this script is that the mlx5 driver (Mellanox 100 Gbit/s)
> does not report correct ifconfig stats.  It reports the HW counters,
> not what the network stack is able to handle.  I/we obviously need the
> stack number when working on improving the stack.

Hi Jesper,

So... we finally fixed that, see

https://patchwork.ozlabs.org/patch/587298/
https://patchwork.ozlabs.org/patch/587296/

Or.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2016-02-24 15:21 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-01-20  9:13 Tools for sampling ethtool --statistics Jesper Dangaard Brouer
2016-01-20 22:34 ` Or Gerlitz
2016-01-20 22:53   ` John Fastabend
2016-01-21 10:35   ` Jesper Dangaard Brouer
     [not found] ` <CAKHjkj=+zaYXvHQWkWuU2LLVRxT_V7Pvmd3QqoGUdOL=HDjsRA@mail.gmail.com>
2016-02-21  9:40   ` Rana Shahout
2016-02-24 15:21 ` Or Gerlitz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).