diff options
author | Matt Macy <mmacy@FreeBSD.org> | 2018-05-23 21:02:14 +0000 |
---|---|---|
committer | Matt Macy <mmacy@FreeBSD.org> | 2018-05-23 21:02:14 +0000 |
commit | 4f6c66cc9c75c857341b6ca6ca92d4808be8d3b5 (patch) | |
tree | 4bfcf94f0a6ca1b0584e050e141fcc97051aad44 /sys/nfs/bootp_subr.c | |
parent | 630ba2c514d723e8c55b5a513b541b614338047f (diff) | |
download | src-4f6c66cc9c75c857341b6ca6ca92d4808be8d3b5.tar.gz src-4f6c66cc9c75c857341b6ca6ca92d4808be8d3b5.zip |
UDP: further performance improvements on tx
Cumulative throughput while running 64
netperf -H $DUT -t UDP_STREAM -- -m 1
on a 2x8x2 SKL went from 1.1Mpps to 2.5Mpps
Single stream throughput increases from 910kpps to 1.18Mpps
Baseline:
https://people.freebsd.org/~mmacy/2018.05.11/udpsender2.svg
- Protect read access to global ifnet list with epoch
https://people.freebsd.org/~mmacy/2018.05.11/udpsender3.svg
- Protect short lived ifaddr references with epoch
https://people.freebsd.org/~mmacy/2018.05.11/udpsender4.svg
- Convert if_afdata read lock path to epoch
https://people.freebsd.org/~mmacy/2018.05.11/udpsender5.svg
A fix for the inpcbhash contention is pending sufficient time
on a canary at LLNW.
Reviewed by: gallatin
Sponsored by: Limelight Networks
Differential Revision: https://reviews.freebsd.org/D15409
Notes
Notes:
svn path=/head/; revision=334118
Diffstat (limited to 'sys/nfs/bootp_subr.c')
-rw-r--r-- | sys/nfs/bootp_subr.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/sys/nfs/bootp_subr.c b/sys/nfs/bootp_subr.c index 8bf89850fa5c..d7657155f55d 100644 --- a/sys/nfs/bootp_subr.c +++ b/sys/nfs/bootp_subr.c @@ -409,12 +409,12 @@ bootpboot_p_iflist(void) printf("Interface list:\n"); IFNET_RLOCK(); - for (ifp = TAILQ_FIRST(&V_ifnet); + for (ifp = CK_STAILQ_FIRST(&V_ifnet); ifp != NULL; - ifp = TAILQ_NEXT(ifp, if_link)) { + ifp = CK_STAILQ_NEXT(ifp, if_link)) { for (ifa = CK_STAILQ_FIRST(&ifp->if_addrhead); ifa != NULL; - ifa = TAILQ_NEXT(ifa, ifa_link)) + ifa = CK_STAILQ_NEXT(ifa, ifa_link)) if (ifa->ifa_addr->sa_family == AF_INET) bootpboot_p_if(ifp, ifa); } @@ -1637,7 +1637,7 @@ bootpc_init(void) */ ifcnt = 0; IFNET_RLOCK(); - TAILQ_FOREACH(ifp, &V_ifnet, if_link) { + CK_STAILQ_FOREACH(ifp, &V_ifnet, if_link) { if ((ifp->if_flags & (IFF_LOOPBACK | IFF_POINTOPOINT | IFF_BROADCAST)) != IFF_BROADCAST) @@ -1660,7 +1660,7 @@ bootpc_init(void) retry: ifctx = STAILQ_FIRST(&gctx->interfaces); IFNET_RLOCK(); - TAILQ_FOREACH(ifp, &V_ifnet, if_link) { + CK_STAILQ_FOREACH(ifp, &V_ifnet, if_link) { if (ifctx == NULL) break; #ifdef BOOTP_WIRED_TO |