From owner-freebsd-net@FreeBSD.ORG Fri Oct 24 22:15:29 2014 Return-Path: <owner-freebsd-net@FreeBSD.ORG> Delivered-To: freebsd-net@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 22897C2D for <freebsd-net@FreeBSD.org>; Fri, 24 Oct 2014 22:15:29 +0000 (UTC) Received: from kenobi.freebsd.org (kenobi.freebsd.org [IPv6:2001:1900:2254:206a::16:76]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 0936E6CC for <freebsd-net@FreeBSD.org>; Fri, 24 Oct 2014 22:15:29 +0000 (UTC) Received: from bugs.freebsd.org ([127.0.1.118]) by kenobi.freebsd.org (8.14.9/8.14.9) with ESMTP id s9OMFStD046656 for <freebsd-net@FreeBSD.org>; Fri, 24 Oct 2014 22:15:28 GMT (envelope-from bugzilla-noreply@freebsd.org) From: bugzilla-noreply@freebsd.org To: freebsd-net@FreeBSD.org Subject: [Bug 194453] [dummynet] pipe config bw parameter is limited to 2Gbits per second Date: Fri, 24 Oct 2014 22:15:29 +0000 X-Bugzilla-Reason: AssignedTo X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: Base System X-Bugzilla-Component: kern X-Bugzilla-Version: 10.0-STABLE X-Bugzilla-Keywords: X-Bugzilla-Severity: Affects Many People X-Bugzilla-Who: rizzo@iet.unipi.it X-Bugzilla-Status: In Discussion X-Bugzilla-Priority: Normal X-Bugzilla-Assigned-To: freebsd-net@FreeBSD.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: cc Message-ID: <bug-194453-2472-DfANNkG9ba@https.bugs.freebsd.org/bugzilla/> In-Reply-To: <bug-194453-2472@https.bugs.freebsd.org/bugzilla/> References: <bug-194453-2472@https.bugs.freebsd.org/bugzilla/> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org> List-Unsubscribe: <http://lists.freebsd.org/mailman/options/freebsd-net>, <mailto:freebsd-net-request@freebsd.org?subject=unsubscribe> List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net/> List-Post: <mailto:freebsd-net@freebsd.org> List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help> List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/freebsd-net>, <mailto:freebsd-net-request@freebsd.org?subject=subscribe> X-List-Received-Date: Fri, 24 Oct 2014 22:15:29 -0000 https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=194453 rizzo@iet.unipi.it changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rizzo@iet.unipi.it --- Comment #6 from rizzo@iet.unipi.it --- (In reply to Hiren Panchasara from comment #5) > (In reply to boba from comment #4) > > (In reply to Hiren Panchasara from comment #2) > > > (In reply to boba from comment #0) > > > > It's impossible to create "pipe" with bandwidth higher than 2Gbits per > > > > second. Possible due to "signed" type of variable. > > > > > > > > # ipfw pipe 1 config bw 2700mbit/s > > > > ipfw: bandwidth too large > > > > > > I think you are right that its overflowing because of "signed" type. > > > > > > A simple change like this may fix the problem: > > > > > > Index: dummynet.c > > > =================================================================== > > > --- dummynet.c (revision 270969) > > > +++ dummynet.c (working copy) > > > @@ -546,7 +546,7 @@ > > > if_name[namelen] = '\0'; > > > *bandwidth = 0; > > > } else { /* read bandwidth value */ > > > - int bw; > > > + uint32_t bw; > > > char *end = NULL; > > > > > > bw = strtoul(arg, &end, 0); > > > > This patch will not work at all because of following check few lines after > > it: > > > > if (bw < 0) > > errx(EX_DATAERR, "bandwidth too large"); > > This patch is incomplete. But the check above is needed exactly for the > reason of catching overflowing values. > > Afaik, a couple of things need to be done to make the patch complete: > 1) make sure whatever datatype we use for bandwidth is uniform across entire > dummynet codebase. i.e. in struct dn_link inside netinet/ip_dummynet.h > > 2) It currently only handles Mb/s and b/s and not Gb/s while setting > bandwidth. > > If someone else doesn't beat me to it, I'll try to spend some time next week > on this. I think it is a waste of time to work on just extending the input range unless one revises the internals so that dummynet can do shaping with reasonable accuracy in the Gbit/s range. By that i mean the following: First of all change the internals of dummynet to opportunistically check the timer whenever there is traffic, rather than relying on a one-tick granularity. When dummynet was first implemented the timer was the 8254, reading it took forever, and 250-1000us granularity was adequate for the <10Mbit/s range it was meant to emulate. Second, the default parameters (1ms, 50 slots queue) limit the capacity of a pipe to some 600 Mbit/s with 1500-byte packets. Probably the code should print warnings if queue_capacity/tick is too far from the desired rate. Third, the bandwidth value is internally multiplied by other factor in the execution of the scheduling algorithms. If you bump the data type from 31 to 32 or 64 bits, you also need to check that the other computations do not overflow. In any case if you decide to go through this route please pass the code by me for review before committing. -- luigi -- You are receiving this mail because: You are the assignee for the bug.