There are some high performance NICs that count statistics in hardware,
and there are ifnets, that do that via counter(9). Provide a flag that would skip cache line trashing '+=' operation in ether_input(). Sponsored by: Netflix Sponsored by: Nginx, Inc. Reviewed by: melifaro, adrian Approved by: re (marius)
This commit is contained in:
parent
acb9d2c7f0
commit
4cdc1f5421
@ -950,7 +950,7 @@ cxgbe_probe(device_t dev)
|
||||
|
||||
#define T4_CAP (IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU | IFCAP_HWCSUM | \
|
||||
IFCAP_VLAN_HWCSUM | IFCAP_TSO | IFCAP_JUMBO_MTU | IFCAP_LRO | \
|
||||
IFCAP_VLAN_HWTSO | IFCAP_LINKSTATE | IFCAP_HWCSUM_IPV6)
|
||||
IFCAP_VLAN_HWTSO | IFCAP_LINKSTATE | IFCAP_HWCSUM_IPV6 | IFCAP_HWSTATS)
|
||||
#define T4_CAP_ENABLE (T4_CAP)
|
||||
|
||||
static int
|
||||
|
@ -2662,7 +2662,8 @@ ixgbe_setup_interface(device_t dev, struct adapter *adapter)
|
||||
ifp->if_capabilities |= IFCAP_LRO;
|
||||
ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING
|
||||
| IFCAP_VLAN_HWTSO
|
||||
| IFCAP_VLAN_MTU;
|
||||
| IFCAP_VLAN_MTU
|
||||
| IFCAP_HWSTATS;
|
||||
ifp->if_capenable = ifp->if_capabilities;
|
||||
|
||||
/*
|
||||
|
@ -231,6 +231,7 @@ struct if_data {
|
||||
#define IFCAP_NETMAP 0x100000 /* netmap mode supported/enabled */
|
||||
#define IFCAP_RXCSUM_IPV6 0x200000 /* can offload checksum on IPv6 RX */
|
||||
#define IFCAP_TXCSUM_IPV6 0x400000 /* can offload checksum on IPv6 TX */
|
||||
#define IFCAP_HWSTATS 0x800000 /* manages counters internally */
|
||||
|
||||
#define IFCAP_HWCSUM_IPV6 (IFCAP_RXCSUM_IPV6 | IFCAP_TXCSUM_IPV6)
|
||||
|
||||
|
@ -528,7 +528,8 @@ ether_input_internal(struct ifnet *ifp, struct mbuf *m)
|
||||
m->m_flags &= ~M_HASFCS;
|
||||
}
|
||||
|
||||
ifp->if_ibytes += m->m_pkthdr.len;
|
||||
if (!(ifp->if_capenable & IFCAP_HWSTATS))
|
||||
ifp->if_ibytes += m->m_pkthdr.len;
|
||||
|
||||
/* Allow monitor mode to claim this frame, after stats are updated. */
|
||||
if (ifp->if_flags & IFF_MONITOR) {
|
||||
|
@ -347,6 +347,7 @@ lagg_clone_create(struct if_clone *ifc, int unit, caddr_t params)
|
||||
ifp->if_init = lagg_init;
|
||||
ifp->if_ioctl = lagg_ioctl;
|
||||
ifp->if_flags = IFF_SIMPLEX | IFF_BROADCAST | IFF_MULTICAST;
|
||||
ifp->if_capenable = ifp->if_capabilities = IFCAP_HWSTATS;
|
||||
|
||||
/*
|
||||
* Attach as an ordinary ethernet device, children will be attached
|
||||
|
Loading…
x
Reference in New Issue
Block a user