mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
sfxge(4): add tunable to configure MAC stats update period
Reviewed by: philip Sponsored by: Solarflare Communications, Inc. MFC after: 2 days Differential Revision: https://reviews.freebsd.org/D9151
This commit is contained in:
parent
5e946c03c7
commit
58223d5b7a
3 changed files with 41 additions and 2 deletions
|
|
@ -158,6 +158,14 @@ The default for each port will be the value of
|
|||
.Va hw.sfxge.mcdi_logging.
|
||||
The logging may also be enabled or disabled after the driver is loaded using the sysctl
|
||||
.Va dev.sfxge.%d.mcdi_logging.
|
||||
.It Va hw.sfxge.stats_update_period_ms
|
||||
Period in milliseconds to refresh interface statistics from hardware.
|
||||
The accepted range is 0 to 65535, the default is 1000 (1 second).
|
||||
Use zero value to disable periodic statistics update.
|
||||
Supported on SFN8xxx series adapters with firmware v6.2.1.1033 and later and
|
||||
SFN5xxx and SFN6xxx series adapters.
|
||||
SFN7xxx series adapters and SFN8xxx series with earlier firmware use a
|
||||
fixed 1000 milliseconds statistics update period.
|
||||
.El
|
||||
.Sh SUPPORT
|
||||
For general information and support,
|
||||
|
|
|
|||
|
|
@ -248,6 +248,7 @@ struct sfxge_port {
|
|||
#endif
|
||||
struct sfxge_hw_stats phy_stats;
|
||||
struct sfxge_hw_stats mac_stats;
|
||||
uint16_t stats_update_period_ms;
|
||||
efx_link_mode_t link_mode;
|
||||
uint8_t mcast_addrs[EFX_MAC_MULTICAST_LIST_MAX *
|
||||
EFX_MAC_ADDR_LEN];
|
||||
|
|
|
|||
|
|
@ -43,6 +43,15 @@ __FBSDID("$FreeBSD$");
|
|||
|
||||
#include "sfxge.h"
|
||||
|
||||
#define SFXGE_PARAM_STATS_UPDATE_PERIOD_MS \
|
||||
SFXGE_PARAM(stats_update_period_ms)
|
||||
static int sfxge_stats_update_period_ms = SFXGE_STATS_UPDATE_PERIOD_MS;
|
||||
TUNABLE_INT(SFXGE_PARAM_STATS_UPDATE_PERIOD_MS,
|
||||
&sfxge_stats_update_period_ms);
|
||||
SYSCTL_INT(_hw_sfxge, OID_AUTO, stats_update_period_ms, CTLFLAG_RDTUN,
|
||||
&sfxge_stats_update_period_ms, 0,
|
||||
"netstat interface statistics update period in milliseconds");
|
||||
|
||||
static int sfxge_phy_cap_mask(struct sfxge_softc *, int, uint32_t *);
|
||||
|
||||
static int
|
||||
|
|
@ -62,7 +71,7 @@ sfxge_mac_stat_update(struct sfxge_softc *sc)
|
|||
goto out;
|
||||
}
|
||||
|
||||
min_ticks = (unsigned int)hz * SFXGE_STATS_UPDATE_PERIOD_MS / 1000;
|
||||
min_ticks = (unsigned int)hz * port->stats_update_period_ms / 1000;
|
||||
|
||||
now = ticks;
|
||||
if ((unsigned int)(now - port->mac_stats.update_time) < min_ticks) {
|
||||
|
|
@ -515,7 +524,7 @@ sfxge_port_start(struct sfxge_softc *sc)
|
|||
|
||||
/* Update MAC stats by DMA every period */
|
||||
if ((rc = efx_mac_stats_periodic(enp, &port->mac_stats.dma_buf,
|
||||
SFXGE_STATS_UPDATE_PERIOD_MS,
|
||||
port->stats_update_period_ms,
|
||||
B_FALSE)) != 0)
|
||||
goto fail6;
|
||||
|
||||
|
|
@ -673,6 +682,26 @@ sfxge_port_fini(struct sfxge_softc *sc)
|
|||
port->sc = NULL;
|
||||
}
|
||||
|
||||
static uint16_t
|
||||
sfxge_port_stats_update_period_ms(struct sfxge_softc *sc)
|
||||
{
|
||||
int period_ms = sfxge_stats_update_period_ms;
|
||||
|
||||
if (period_ms < 0) {
|
||||
device_printf(sc->dev,
|
||||
"treat negative stats update period %d as 0 (disable)\n",
|
||||
period_ms);
|
||||
period_ms = 0;
|
||||
} else if (period_ms > UINT16_MAX) {
|
||||
device_printf(sc->dev,
|
||||
"treat too big stats update period %d as %u\n",
|
||||
period_ms, UINT16_MAX);
|
||||
period_ms = UINT16_MAX;
|
||||
}
|
||||
|
||||
return period_ms;
|
||||
}
|
||||
|
||||
int
|
||||
sfxge_port_init(struct sfxge_softc *sc)
|
||||
{
|
||||
|
|
@ -721,6 +750,7 @@ sfxge_port_init(struct sfxge_softc *sc)
|
|||
M_SFXGE, M_WAITOK | M_ZERO);
|
||||
if ((rc = sfxge_dma_alloc(sc, EFX_MAC_STATS_SIZE, mac_stats_buf)) != 0)
|
||||
goto fail2;
|
||||
port->stats_update_period_ms = sfxge_port_stats_update_period_ms(sc);
|
||||
sfxge_mac_stat_init(sc);
|
||||
|
||||
port->init_state = SFXGE_PORT_INITIALIZED;
|
||||
|
|
|
|||
Loading…
Reference in a new issue