From owner-freebsd-virtualization@freebsd.org Thu Feb 18 04:59:00 2016 Return-Path: Delivered-To: freebsd-virtualization@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C6155AAC883 for ; Thu, 18 Feb 2016 04:59:00 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: from phabric-backend.rbsd.freebsd.org (unknown [IPv6:2607:fc50:2000:101::1bb:73]) by mx1.freebsd.org (Postfix) with ESMTP id AECAC13C7 for ; Thu, 18 Feb 2016 04:59:00 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: by phabric-backend.rbsd.freebsd.org (Postfix, from userid 1346) id A7B6C3321FF8; Thu, 18 Feb 2016 04:59:00 +0000 (UTC) Date: Thu, 18 Feb 2016 04:59:00 +0000 To: freebsd-virtualization@freebsd.org From: Phabricator Reply-to: D5185+333+b2354430ad09b93f@reviews.freebsd.org Subject: [Differential] [Closed] D5185: tcp/lro: Allow network drivers to set the limit for TCP ACK/data segment aggregation limit Message-ID: X-Priority: 3 X-Phabricator-Sent-This-Message: Yes X-Mail-Transport-Agent: MetaMTA X-Auto-Response-Suppress: All X-Phabricator-Mail-Tags: , Thread-Topic: D5185: tcp/lro: Allow network drivers to set the limit for TCP ACK/data segment aggregation limit X-Herald-Rules: <64> X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-Cc: X-Phabricator-Cc: Precedence: bulk In-Reply-To: References: Thread-Index: NTU0NmM0Mjk2NjdmNzVhNmM3MzlkMWQyNTdmIFbFT5Q= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_e7e8a43bd1e1132201af44f2d807a4da" X-BeenThere: freebsd-virtualization@freebsd.org X-Mailman-Version: 2.1.20 List-Id: "Discussion of various virtualization techniques FreeBSD supports." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Feb 2016 04:59:00 -0000 --b1_e7e8a43bd1e1132201af44f2d807a4da Content-Type: text/plain; charset = "utf-8" Content-Transfer-Encoding: 8bit This revision was automatically updated to reflect the committed changes. Closed by commit rS295739: tcp/lro: Allow drivers to set the TCP ACK/data segment aggregation limit (authored by sephe). CHANGED PRIOR TO COMMIT https://reviews.freebsd.org/D5185?vs=13282&id=13397#toc REPOSITORY rS FreeBSD src repository CHANGES SINCE LAST UPDATE https://reviews.freebsd.org/D5185?vs=13282&id=13397 REVISION DETAIL https://reviews.freebsd.org/D5185 AFFECTED FILES head/sys/netinet/tcp_lro.c head/sys/netinet/tcp_lro.h head/sys/sys/param.h CHANGE DETAILS diff --git a/head/sys/sys/param.h b/head/sys/sys/param.h --- a/head/sys/sys/param.h +++ b/head/sys/sys/param.h @@ -58,7 +58,7 @@ * in the range 5 to 9. */ #undef __FreeBSD_version -#define __FreeBSD_version 1100098 /* Master, propagated to newvers */ +#define __FreeBSD_version 1100099 /* Master, propagated to newvers */ /* * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD, diff --git a/head/sys/netinet/tcp_lro.h b/head/sys/netinet/tcp_lro.h --- a/head/sys/netinet/tcp_lro.h +++ b/head/sys/netinet/tcp_lro.h @@ -91,11 +91,16 @@ unsigned lro_cnt; unsigned lro_mbuf_count; unsigned lro_mbuf_max; + unsigned short lro_ackcnt_lim; /* max # of aggregated ACKs */ + unsigned lro_length_lim; /* max len of aggregated data */ struct lro_head lro_active; struct lro_head lro_free; }; +#define TCP_LRO_LENGTH_MAX 65535 +#define TCP_LRO_ACKCNT_MAX 65535 /* unlimited */ + int tcp_lro_init(struct lro_ctrl *); int tcp_lro_init_args(struct lro_ctrl *, struct ifnet *, unsigned, unsigned); void tcp_lro_free(struct lro_ctrl *); diff --git a/head/sys/netinet/tcp_lro.c b/head/sys/netinet/tcp_lro.c --- a/head/sys/netinet/tcp_lro.c +++ b/head/sys/netinet/tcp_lro.c @@ -88,6 +88,8 @@ lc->lro_mbuf_count = 0; lc->lro_mbuf_max = lro_mbufs; lc->lro_cnt = lro_entries; + lc->lro_ackcnt_lim = TCP_LRO_ACKCNT_MAX; + lc->lro_length_lim = TCP_LRO_LENGTH_MAX; lc->ifp = ifp; SLIST_INIT(&lc->lro_free); SLIST_INIT(&lc->lro_active); @@ -610,7 +612,7 @@ } /* Flush now if appending will result in overflow. */ - if (le->p_len > (65535 - tcp_data_len)) { + if (le->p_len > (lc->lro_length_lim - tcp_data_len)) { SLIST_REMOVE(&lc->lro_active, le, lro_entry, next); tcp_lro_flush(lc, le); break; @@ -648,6 +650,15 @@ if (tcp_data_len == 0) { m_freem(m); + /* + * Flush this LRO entry, if this ACK should not + * be further delayed. + */ + if (le->append_cnt >= lc->lro_ackcnt_lim) { + SLIST_REMOVE(&lc->lro_active, le, lro_entry, + next); + tcp_lro_flush(lc, le); + } return (0); } @@ -668,7 +679,7 @@ * If a possible next full length packet would cause an * overflow, pro-actively flush now. */ - if (le->p_len > (65535 - lc->ifp->if_mtu)) { + if (le->p_len > (lc->lro_length_lim - lc->ifp->if_mtu)) { SLIST_REMOVE(&lc->lro_active, le, lro_entry, next); tcp_lro_flush(lc, le); } else EMAIL PREFERENCES https://reviews.freebsd.org/settings/panel/emailpreferences/ To: sepherosa_gmail.com, delphij, royger, decui_microsoft.com, honzhan_microsoft.com, howard0su_gmail.com, np, transport, hselasky, gallatin, adrian, network Cc: freebsd-virtualization-list, freebsd-net-list --b1_e7e8a43bd1e1132201af44f2d807a4da Content-Type: text/x-patch; charset=utf-8; name="D5185.13397.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="D5185.13397.patch" ZGlmZiAtLWdpdCBhL2hlYWQvc3lzL3N5cy9wYXJhbS5oIGIvaGVhZC9zeXMvc3lzL3BhcmFtLmgK LS0tIGEvaGVhZC9zeXMvc3lzL3BhcmFtLmgKKysrIGIvaGVhZC9zeXMvc3lzL3BhcmFtLmgKQEAg LTU4LDcgKzU4LDcgQEAKICAqCQlpbiB0aGUgcmFuZ2UgNSB0byA5LgogICovCiAjdW5kZWYgX19G cmVlQlNEX3ZlcnNpb24KLSNkZWZpbmUgX19GcmVlQlNEX3ZlcnNpb24gMTEwMDA5OAkvKiBNYXN0 ZXIsIHByb3BhZ2F0ZWQgdG8gbmV3dmVycyAqLworI2RlZmluZSBfX0ZyZWVCU0RfdmVyc2lvbiAx MTAwMDk5CS8qIE1hc3RlciwgcHJvcGFnYXRlZCB0byBuZXd2ZXJzICovCiAKIC8qCiAgKiBfX0Zy ZWVCU0Rfa2VybmVsX18gaW5kaWNhdGVzIHRoYXQgdGhpcyBzeXN0ZW0gdXNlcyB0aGUga2VybmVs IG9mIEZyZWVCU0QsCmRpZmYgLS1naXQgYS9oZWFkL3N5cy9uZXRpbmV0L3RjcF9scm8uaCBiL2hl YWQvc3lzL25ldGluZXQvdGNwX2xyby5oCi0tLSBhL2hlYWQvc3lzL25ldGluZXQvdGNwX2xyby5o CisrKyBiL2hlYWQvc3lzL25ldGluZXQvdGNwX2xyby5oCkBAIC05MSwxMSArOTEsMTYgQEAKIAl1 bnNpZ25lZAlscm9fY250OwogCXVuc2lnbmVkCWxyb19tYnVmX2NvdW50OwogCXVuc2lnbmVkCWxy b19tYnVmX21heDsKKwl1bnNpZ25lZCBzaG9ydAlscm9fYWNrY250X2xpbTsJCS8qIG1heCAjIG9m IGFnZ3JlZ2F0ZWQgQUNLcyAqLworCXVuc2lnbmVkIAlscm9fbGVuZ3RoX2xpbTsJCS8qIG1heCBs ZW4gb2YgYWdncmVnYXRlZCBkYXRhICovCiAKIAlzdHJ1Y3QgbHJvX2hlYWQJbHJvX2FjdGl2ZTsK IAlzdHJ1Y3QgbHJvX2hlYWQJbHJvX2ZyZWU7CiB9OwogCisjZGVmaW5lCVRDUF9MUk9fTEVOR1RI X01BWAk2NTUzNQorI2RlZmluZQlUQ1BfTFJPX0FDS0NOVF9NQVgJNjU1MzUJCS8qIHVubGltaXRl ZCAqLworCiBpbnQgdGNwX2xyb19pbml0KHN0cnVjdCBscm9fY3RybCAqKTsKIGludCB0Y3BfbHJv X2luaXRfYXJncyhzdHJ1Y3QgbHJvX2N0cmwgKiwgc3RydWN0IGlmbmV0ICosIHVuc2lnbmVkLCB1 bnNpZ25lZCk7CiB2b2lkIHRjcF9scm9fZnJlZShzdHJ1Y3QgbHJvX2N0cmwgKik7CmRpZmYgLS1n aXQgYS9oZWFkL3N5cy9uZXRpbmV0L3RjcF9scm8uYyBiL2hlYWQvc3lzL25ldGluZXQvdGNwX2xy by5jCi0tLSBhL2hlYWQvc3lzL25ldGluZXQvdGNwX2xyby5jCisrKyBiL2hlYWQvc3lzL25ldGlu ZXQvdGNwX2xyby5jCkBAIC04OCw2ICs4OCw4IEBACiAJbGMtPmxyb19tYnVmX2NvdW50ID0gMDsK IAlsYy0+bHJvX21idWZfbWF4ID0gbHJvX21idWZzOwogCWxjLT5scm9fY250ID0gbHJvX2VudHJp ZXM7CisJbGMtPmxyb19hY2tjbnRfbGltID0gVENQX0xST19BQ0tDTlRfTUFYOworCWxjLT5scm9f bGVuZ3RoX2xpbSA9IFRDUF9MUk9fTEVOR1RIX01BWDsKIAlsYy0+aWZwID0gaWZwOwogCVNMSVNU X0lOSVQoJmxjLT5scm9fZnJlZSk7CiAJU0xJU1RfSU5JVCgmbGMtPmxyb19hY3RpdmUpOwpAQCAt NjEwLDcgKzYxMiw3IEBACiAJCX0KIAogCQkvKiBGbHVzaCBub3cgaWYgYXBwZW5kaW5nIHdpbGwg cmVzdWx0IGluIG92ZXJmbG93LiAqLwotCQlpZiAobGUtPnBfbGVuID4gKDY1NTM1IC0gdGNwX2Rh dGFfbGVuKSkgeworCQlpZiAobGUtPnBfbGVuID4gKGxjLT5scm9fbGVuZ3RoX2xpbSAtIHRjcF9k YXRhX2xlbikpIHsKIAkJCVNMSVNUX1JFTU9WRSgmbGMtPmxyb19hY3RpdmUsIGxlLCBscm9fZW50 cnksIG5leHQpOwogCQkJdGNwX2xyb19mbHVzaChsYywgbGUpOwogCQkJYnJlYWs7CkBAIC02NDgs NiArNjUwLDE1IEBACiAKIAkJaWYgKHRjcF9kYXRhX2xlbiA9PSAwKSB7CiAJCQltX2ZyZWVtKG0p OworCQkJLyoKKwkJCSAqIEZsdXNoIHRoaXMgTFJPIGVudHJ5LCBpZiB0aGlzIEFDSyBzaG91bGQg bm90CisJCQkgKiBiZSBmdXJ0aGVyIGRlbGF5ZWQuCisJCQkgKi8KKwkJCWlmIChsZS0+YXBwZW5k X2NudCA+PSBsYy0+bHJvX2Fja2NudF9saW0pIHsKKwkJCQlTTElTVF9SRU1PVkUoJmxjLT5scm9f YWN0aXZlLCBsZSwgbHJvX2VudHJ5LAorCQkJCSAgICBuZXh0KTsKKwkJCQl0Y3BfbHJvX2ZsdXNo KGxjLCBsZSk7CisJCQl9CiAJCQlyZXR1cm4gKDApOwogCQl9CiAKQEAgLTY2OCw3ICs2NzksNyBA QAogCQkgKiBJZiBhIHBvc3NpYmxlIG5leHQgZnVsbCBsZW5ndGggcGFja2V0IHdvdWxkIGNhdXNl IGFuCiAJCSAqIG92ZXJmbG93LCBwcm8tYWN0aXZlbHkgZmx1c2ggbm93LgogCQkgKi8KLQkJaWYg KGxlLT5wX2xlbiA+ICg2NTUzNSAtIGxjLT5pZnAtPmlmX210dSkpIHsKKwkJaWYgKGxlLT5wX2xl biA+IChsYy0+bHJvX2xlbmd0aF9saW0gLSBsYy0+aWZwLT5pZl9tdHUpKSB7CiAJCQlTTElTVF9S RU1PVkUoJmxjLT5scm9fYWN0aXZlLCBsZSwgbHJvX2VudHJ5LCBuZXh0KTsKIAkJCXRjcF9scm9f Zmx1c2gobGMsIGxlKTsKIAkJfSBlbHNlCgo= --b1_e7e8a43bd1e1132201af44f2d807a4da--