From owner-freebsd-net@FreeBSD.ORG Mon Jun 23 02:27:29 2014 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 2DCFA79C for ; Mon, 23 Jun 2014 02:27:29 +0000 (UTC) Received: from mail-wi0-x22c.google.com (mail-wi0-x22c.google.com [IPv6:2a00:1450:400c:c05::22c]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id ADB91209C for ; Mon, 23 Jun 2014 02:27:28 +0000 (UTC) Received: by mail-wi0-f172.google.com with SMTP id hi2so3309676wib.17 for ; Sun, 22 Jun 2014 19:27:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:reply-to:date:message-id:subject:from:to:content-type; bh=/JyWymNNrXj55OhDjFtEBi0KFOmrLjbw40kr3qA96HA=; b=dcswcUYc8xHDY7n3No2BGx+xlSeMq00hXSZYny3wuKKSxLqrgdJHlNHknQWb54f5r5 zj8eayv8uoHOA8+diR/tXDn/TRLL5GJnaCNVWMLgCXzsHKnGTAkMGD9MOFbAClJewgYq qayNXTdlzefcuBLTdyTM5xXTdT2qChV4nlOIoBtbLy7QlPP+wozSUtl7o4oWtH8GFpD0 fRaf63KASPISnSqFjwC+WR8t4PplJLp8/Jr6rHgy1CVjVHI1rP40ICvjNZaeKl3Ds8hF Oop+HvOlBR09fXXftnW/uHujZKeeKeylkp8yajnG3HfOMI2FyshNtoDJM3QDdlAAHLBH Gyfw== MIME-Version: 1.0 X-Received: by 10.180.210.134 with SMTP id mu6mr17687187wic.18.1403490446952; Sun, 22 Jun 2014 19:27:26 -0700 (PDT) Received: by 10.217.9.134 with HTTP; Sun, 22 Jun 2014 19:27:26 -0700 (PDT) Reply-To: araujo@FreeBSD.org Date: Mon, 23 Jun 2014 10:27:26 +0800 Message-ID: Subject: [patch][lagg] - Set a better granularity and distribution on roundrobin protocol. From: Marcelo Araujo To: FreeBSD Net Content-Type: multipart/mixed; boundary=001a11c37bdc896b5204fc779588 X-Content-Filtered-By: Mailman/MimeDel 2.1.18 X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 23 Jun 2014 02:27:29 -0000 --001a11c37bdc896b5204fc779588 Content-Type: text/plain; charset=UTF-8 Hello guys, I made some changes on roundrobin protocol where from now you can via sysctl(8) set a better packets distribution among the interfaces that are part of the lagg(4) group. My motivation for this change was interfaces that use TSO, as example ixgbe(4), the performance is terrible, as we can't full fill the TSO buffer at once, the throughput drops expressively and we have much more sack between hosts. So, with this patch we can set the number of packets that will be send before switch to the next interface. In my testbed using ixgbe(4), I had a very good performance as you can see bellow: 1) Without patch: ------------------------------------------------------------ Client connecting to 192.168.1.2, TCP port 5001 TCP window size: 32.5 KByte (default) ------------------------------------------------------------ [ 3] local 192.168.1.1 port 32808 connected with 192.168.1.2 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0- 1.0 sec 406 MBytes 3.40 Gbits/sec [ 3] 1.0- 2.0 sec 391 MBytes 3.28 Gbits/sec [ 3] 2.0- 3.0 sec 406 MBytes 3.41 Gbits/sec [ 3] 3.0- 4.0 sec 585 MBytes 4.91 Gbits/sec [ 3] 4.0- 5.0 sec 477 MBytes 4.00 Gbits/sec [ 3] 5.0- 6.0 sec 429 MBytes 3.60 Gbits/sec [ 3] 6.0- 7.0 sec 520 MBytes 4.36 Gbits/sec [ 3] 7.0- 8.0 sec 385 MBytes 3.23 Gbits/sec [ 3] 8.0- 9.0 sec 414 MBytes 3.48 Gbits/sec [ 3] 9.0-10.0 sec 515 MBytes 4.32 Gbits/sec [ 3] 0.0-10.0 sec 4.42 GBytes 3.80 Gbits/sec 2) With patch: ------------------------------------------------------------ Client connecting to 192.168.1.2, TCP port 5001 TCP window size: 32.5 KByte (default) ------------------------------------------------------------ [ 3] local 192.168.1.1 port 10526 connected with 192.168.1.2 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0- 1.0 sec 694 MBytes 5.83 Gbits/sec [ 3] 1.0- 2.0 sec 999 MBytes 8.38 Gbits/sec [ 3] 2.0- 3.0 sec 1.17 GBytes 10.1 Gbits/sec [ 3] 3.0- 4.0 sec 1.34 GBytes 11.5 Gbits/sec [ 3] 4.0- 5.0 sec 1.15 GBytes 9.91 Gbits/sec [ 3] 5.0- 6.0 sec 1.19 GBytes 10.2 Gbits/sec [ 3] 6.0- 7.0 sec 1.08 GBytes 9.23 Gbits/sec [ 3] 7.0- 8.0 sec 1.10 GBytes 9.45 Gbits/sec [ 3] 8.0- 9.0 sec 1.27 GBytes 10.9 Gbits/sec [ 3] 9.0-10.0 sec 1.39 GBytes 12.0 Gbits/sec [ 3] 0.0-10.0 sec 11.3 GBytes 9.74 Gbits/sec So, basically we have a sysctl(8) called "net.link.lagg.rr_packets" where we can set the number of packets that will be send before the roundrobin move to the next interface. Any comment and review are very appreciated. Best Regards, -- Marcelo Araujo (__)araujo@FreeBSD.org \\\'',)http://www.FreeBSD.org \/ \ ^ Power To Server. .\. /_) --001a11c37bdc896b5204fc779588 Content-Type: application/octet-stream; name="if_lagg.patch" Content-Disposition: attachment; filename="if_lagg.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hwr5uz6s0 SW5kZXg6IGlmX2xhZ2cuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBpZl9sYWdnLmMJKHJldmlzaW9uIDI2NzY2 NikKKysrIGlmX2xhZ2cuYwkod29ya2luZyBjb3B5KQpAQCAtMTg5LDYgKzE4OSwxMCBAQAogU1lT Q1RMX0lOVChfbmV0X2xpbmtfbGFnZywgT0lEX0FVVE8sIGRlZmF1bHRfZmxvd2lkX3NoaWZ0LCBD VExGTEFHX1JXLAogICAgICZkZWZfZmxvd2lkX3NoaWZ0LCAwLAogICAgICJEZWZhdWx0IHNldHRp bmcgZm9yIGZsb3dpZCBzaGlmdCBmb3IgbG9hZCBzaGFyaW5nIik7CitzdGF0aWMgaW50IGxhZ2df cnJfcGFja2V0cyA9IDA7IC8qIERlZmF1bHQgdmFsdWUgZm9yIHVzaW5nIHJyX3BhY2tldHMgKi8K K1NZU0NUTF9JTlQoX25ldF9saW5rX2xhZ2csIE9JRF9BVVRPLCBycl9wYWNrZXRzLCBDVExGTEFH X1JXLAorICAgICZsYWdnX3JyX3BhY2tldHMsIDAsCisgICAgIkhvdyBtYW55IHBhY2tldHMgdG8g YmUgc2VuZCBwZXIgaW50ZXJmYWNlIik7CiAKIHN0YXRpYyBpbnQKIGxhZ2dfbW9kZXZlbnQobW9k dWxlX3QgbW9kLCBpbnQgdHlwZSwgdm9pZCAqZGF0YSkKQEAgLTE2ODksMTQgKzE2OTMsNjggQEAK IHsKIAlzdHJ1Y3QgbGFnZ19wb3J0ICpscDsKIAl1aW50MzJfdCBwOworCXVpbnQzMl90IHBrdF9z eXNjdGxfY291bnQ7CisJaW50IGlmcF9jb3VudCA9IDE7CiAKIAlwID0gYXRvbWljX2ZldGNoYWRk XzMyKCZzYy0+c2Nfc2VxLCAxKTsKIAlwICU9IHNjLT5zY19jb3VudDsKIAlscCA9IFNMSVNUX0ZJ UlNUKCZzYy0+c2NfcG9ydHMpOwotCXdoaWxlIChwLS0pCi0JCWxwID0gU0xJU1RfTkVYVChscCwg bHBfZW50cmllcyk7CiAKIAkvKgorCSAqIElmIHRoZXJlIGlzIG5vIHJlZmVyZW5jZSBmb3IgdGhl IElGUCwgd2UgbXVzdAorIAkgKiBjb3B5IGl0IG5vdy4KKwkgKi8KKwlpZiAoc3RybGVuKHNjLT5z Y19yZWZfaWZwKSA9PSAwKQorCQlzdHJuY3B5KHNjLT5zY19yZWZfaWZwLCBscC0+bHBfaWZwLT5p Zl94bmFtZSwgc2l6ZW9mKHNjLT5zY19yZWZfaWZwKSk7CisgICAgICAgICAgICAgIAorCS8qCisJ ICogSWYgaWZwX2NvdW50IHdhcyBub3QgeWV0IGluaXRpYWxpemVkLCB3ZSBtdXN0CisJICogaW5p dGlhbGl6ZSBub3cuCisJICovCisJaWYgKHNjLT5zY19pZnBfY291bnQgPT0gMCkKKwkJc2MtPnNj X2lmcF9jb3VudCA9IDE7CisKKwkvKgorCSAqIElmIHRoZSBzeXNjdGwgcnJfcGFja2V0cyBpcyBz ZXQgdG8gMCwgd2UgbXVzdCB1c2UgdGhlCisJICogcm91bmRyb2JpbiBhcyBpdCBpcywgb3Igb3Ro ZXJ3aXNlLCB3ZSBtdXN0IGFwcGx5IHRoZQorCSAqIGdyYW51bGFyaXR5IGJldHdlZW4gdGhlIGlu dGVyZmFjZXMgdGhhdCBhcmUgcGFydCBvZiB0aGUgZ3JvdXAuCisJICovCisJaWYgKCFsYWdnX3Jy X3BhY2tldHMpIHsKKwkJd2hpbGUgKHAtLSkKKwkJCWxwID0gU0xJU1RfTkVYVChscCwgbHBfZW50 cmllcyk7CisJCWdvdG8gc2VuZF9tYnVmOworCX0gZWxzZSB7CisJCXBrdF9zeXNjdGxfY291bnQg PSBhdG9taWNfZmV0Y2hhZGRfMzIoJnNjLT5zY19wa3RfY291bnQsIDEpOworCQlpZiAocGt0X3N5 c2N0bF9jb3VudCA9PSBsYWdnX3JyX3BhY2tldHMpIHsKKwkJCWlmIChzYy0+c2NfaWZwX2NvdW50 IDw9IHNjLT5zY19jb3VudCkgeworCQkJCXdoaWxlIChpZnBfY291bnQgPCBzYy0+c2NfaWZwX2Nv dW50KSB7CisJCQkJCWxwID0gU0xJU1RfTkVYVChscCwgbHBfZW50cmllcyk7CisJCQkJCWlmcF9j b3VudCsrOworCQkJCX0KKwkJCQlzYy0+c2NfaWZwX2NvdW50Kys7CisJCQkJaWYgKHNjLT5zY19p ZnBfY291bnQgPiBzYy0+c2NfY291bnQpCisJCQkJCXNjLT5zY19pZnBfY291bnQgPSAwOworCQkJ fQorCQkJc3RybmNweShzYy0+c2NfcmVmX2lmcCwgbHAtPmxwX2lmcC0+aWZfeG5hbWUsIHNpemVv ZihzYy0+c2NfcmVmX2lmcCkpOworCQkJc2MtPnNjX3BrdF9jb3VudCA9IDA7CisJCX0KKwl9CisK KwkvKgorCSAqIENoZWNrIGlmIHRoZSBjdXJyZW50IGludGVyZmFjZSB0byBiZSBlbnF1ZXVlIGlz IG5vdCB0aGUKKwkgKiBzYW1lIHVzZWQgaW4gdGhlIGxhc3Qgcm91bmQuCisJICovCisJbHAgPSBT TElTVF9GSVJTVCgmc2MtPnNjX3BvcnRzKTsKKwlmb3IgKDs7KSB7CisJCWlmIChzdHJjbXAobHAt PmxwX2lmcC0+aWZfeG5hbWUsIHNjLT5zY19yZWZfaWZwKSA9PSAwKQorCQkJYnJlYWs7CisJCWVs c2UKKwkJCWxwID0gU0xJU1RfTkVYVChscCwgbHBfZW50cmllcyk7CisJfQorCWdvdG8gc2VuZF9t YnVmOworCitzZW5kX21idWY6CisJLyoKIAkgKiBDaGVjayB0aGUgcG9ydCdzIGxpbmsgc3RhdGUu IFRoaXMgd2lsbCByZXR1cm4gdGhlIG5leHQgYWN0aXZlCiAJICogcG9ydCBpZiB0aGUgbGluayBp cyBkb3duIG9yIHRoZSBwb3J0IGlzIE5VTEwuCiAJICovCkluZGV4OiBpZl9sYWdnLmgKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gaWZfbGFnZy5oCShyZXZpc2lvbiAyNjc2NjYpCisrKyBpZl9sYWdnLmgJKHdvcmtp bmcgY29weSkKQEAgLTIzMiw2ICsyMzIsOSBAQAogCXN0cnVjdCBzeXNjdGxfb2lkCQkqc2Nfb2lk OwkvKiBzeXNjdGwgdHJlZSBvaWQgKi8KIAlpbnQJCQkJdXNlX2Zsb3dpZDsJLyogdXNlIE1fRkxP V0lEICovCiAJaW50CQkJCWZsb3dpZF9zaGlmdDsJLyogc2hpZnQgdGhlIGZsb3dpZCAqLworCXVp bnQzMl90CQkJc2NfcGt0X2NvdW50OyAvKiB1c2UgZm9yIGNvdW50IHBhY2thdGVzIHBlciBpZnAg Ki8KKwlpbnQJCQkJc2NfaWZwX2NvdW50OyAvKiBjb3VudGVyIHJlZmVyZW5jZSBvZiBpbnRlcmZh Y2VzIG9uIHJyICovCisJY2hhcgkJCQlzY19yZWZfaWZwW0lGTkFNU0laXTsgLyogbmFtZSBvZiB0 aGUgaWZwICovCiB9OwogCiBzdHJ1Y3QgbGFnZ19wb3J0IHsK --001a11c37bdc896b5204fc779588--