Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 23 Sep 2014 22:25:49 +0400
From:      Gleb Smirnoff <glebius@FreeBSD.org>
To:        Hans Petter Selasky <hselasky@FreeBSD.org>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r272027 - in head: contrib/ofed/libibverbs/examples contrib/ofed/libmlx4/src sys/conf sys/modules/mlx4 sys/modules/mlxen sys/ofed/drivers/infiniband/hw/mlx4 sys/ofed/drivers/infiniband/...
Message-ID:  <20140923182549.GG884@FreeBSD.org>
In-Reply-To: <201409231237.s8NCb27N061223@svn.freebsd.org>
References:  <201409231237.s8NCb27N061223@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
  Hans,

On Tue, Sep 23, 2014 at 12:37:02PM +0000, Hans Petter Selasky wrote:
H> Author: hselasky
H> Date: Tue Sep 23 12:37:01 2014
H> New Revision: 272027
H> URL: http://svnweb.freebsd.org/changeset/base/272027
H> 
H> Log:
H>   Hardware driver update from Mellanox Technologies, including:
H>    - improved performance
H>    - better stability
H>    - new features
H>    - bugfixes
  ...
H> @@ -240,7 +240,7 @@ ipoib_ib_handle_rx_wc(struct ipoib_dev_p
H>  	 */
H>  	if (unlikely(!ipoib_alloc_rx_mb(priv, wr_id))) {
H>  		memcpy(&priv->rx_ring[wr_id], &saverx, sizeof(saverx));
H> -		dev->if_iqdrops++;
H> +		if_inc_counter(dev, IFCOUNTER_IQDROPS, 1);
H>  		goto repost;
H>  	}

Thanks a lot for these changes :)

However, to fully convert driver to new stats we need to 1) stop
writing to ifnet if_foo fields, 2) provide if_get_counter() method,
that will return current counter values.

This can be achieved in two ways:

1) Dumb solution. Remove assignments for if_foo counters from
mlx4_en_DUMP_ETH_STATS(). Provide if_get_counter() method, that will
return the values using the same code we deleted.
The cons of the solution is that we still run a useless callout
to gather statistics, and that statistics are updated only on callout.
If we query the interface faster than 1 time per second, we will get
same results in two queries.

Example of dumb solution can be found in igb(4).

Since the code is shared between OSes, it could be that dumb solution
is the best, since it is less disruptive.

2) Smarter solution. Remove assignments for if_foo counters from
mlx4_en_DUMP_ETH_STATS(). Do not run mlx4_en_DUMP_ETH_STATS() periodically.
Provide if_get_counter() method, that will first run mlx4_en_DUMP_ETH_STATS(),
and then do a switch on counter type and return it.

Example of smarter solution is vtnet(4).

3) Smart solution. Remove assignments for if_foo counters from
mlx4_en_DUMP_ETH_STATS(). Do not run mlx4_en_DUMP_ETH_STATS() periodically.
Provide if_get_counter() method, that will switch on the counter type
and query the proper hardware register to fetch the value and return it.

No examples available, yet :)

Can you help me with this, please? I can code the dumb one quickly, but
probably committing it w/o hardware test is a risky plan.

-- 
Totus tuus, Glebius.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20140923182549.GG884>