Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 9 Oct 2013 12:00:38 +0000 (UTC)
From:      Gleb Smirnoff <glebius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r256186 - head/sys/netinet
Message-ID:  <201310091200.r99C0cLR039540@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: glebius
Date: Wed Oct  9 12:00:38 2013
New Revision: 256186
URL: http://svnweb.freebsd.org/changeset/base/256186

Log:
  When processing ACK in tcp_do_segment, use sbcut_locked() instead of
  sbdrop_locked() to cut acked mbufs from the socket buffer. Free this
  chain a batch manner after the socket buffer lock is dropped.
  
  This measurably reduces contention on socket buffer.
  
  Sponsored by:	Netflix
  Sponsored by:	Nginx, Inc.
  Approved by:	re (marius)

Modified:
  head/sys/netinet/tcp_input.c

Modified: head/sys/netinet/tcp_input.c
==============================================================================
--- head/sys/netinet/tcp_input.c	Wed Oct  9 11:57:53 2013	(r256185)
+++ head/sys/netinet/tcp_input.c	Wed Oct  9 12:00:38 2013	(r256186)
@@ -1461,6 +1461,7 @@ tcp_do_segment(struct mbuf *m, struct tc
 	u_long tiwin;
 	char *s;
 	struct in_conninfo *inc;
+	struct mbuf *mfree;
 	struct tcpopt to;
 
 #ifdef TCPDEBUG
@@ -2718,15 +2719,17 @@ process_ACK:
 		SOCKBUF_LOCK(&so->so_snd);
 		if (acked > so->so_snd.sb_cc) {
 			tp->snd_wnd -= so->so_snd.sb_cc;
-			sbdrop_locked(&so->so_snd, (int)so->so_snd.sb_cc);
+			mfree = sbcut_locked(&so->so_snd,
+			    (int)so->so_snd.sb_cc);
 			ourfinisacked = 1;
 		} else {
-			sbdrop_locked(&so->so_snd, acked);
+			mfree = sbcut_locked(&so->so_snd, acked);
 			tp->snd_wnd -= acked;
 			ourfinisacked = 0;
 		}
 		/* NB: sowwakeup_locked() does an implicit unlock. */
 		sowwakeup_locked(so);
+		m_freem(mfree);
 		/* Detect una wraparound. */
 		if (!IN_RECOVERY(tp->t_flags) &&
 		    SEQ_GT(tp->snd_una, tp->snd_recover) &&



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