From owner-freebsd-arch@FreeBSD.ORG Mon Jul 31 17:05:34 2006 Return-Path: X-Original-To: arch@freebsd.org Delivered-To: freebsd-arch@FreeBSD.ORG Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 6B42816A4DA; Mon, 31 Jul 2006 17:05:34 +0000 (UTC) (envelope-from jdp@polstra.com) Received: from blake.polstra.com (blake.polstra.com [64.81.189.66]) by mx1.FreeBSD.org (Postfix) with ESMTP id E801843D4C; Mon, 31 Jul 2006 17:05:33 +0000 (GMT) (envelope-from jdp@polstra.com) Received: from strings.polstra.com (strings.polstra.com [64.81.189.67]) by blake.polstra.com (8.13.6/8.13.6) with ESMTP id k6VH5XKG038776; Mon, 31 Jul 2006 10:05:33 -0700 (PDT) (envelope-from jdp@polstra.com) Message-ID: X-Mailer: XFMail 1.5.5 on FreeBSD X-Priority: 3 (Normal) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 8bit MIME-Version: 1.0 In-Reply-To: <20060730141642.D16341@fledge.watson.org> Date: Mon, 31 Jul 2006 10:05:33 -0700 (PDT) From: John Polstra To: Robert Watson Cc: arch@freebsd.org, net@freebsd.org Subject: RE: Changes in the network interface queueing handoff model X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 31 Jul 2006 17:05:34 -0000 > Attached is a patch that maintains the current if_start, but adds > if_startmbuf. If a device driver implements if_startmbuf and the global > sysctl net.startmbuf_enabled is set to 1, then the if_startmbuf path in the > driver will be used. Otherwise, if_start is used. I have modified the if_em > driver to implement if_startmbuf also. If there is no packet backlog in the > if_snd queue, it directly places the packet in the transmit descriptor ring. > If there is a backlog, it uses the if_snd queue protected by driver mutex, > rather than a separate ifq mutex. I question whether you need a fallback software if_snd queue at all for modern devices such as the Intel and Broadcom gigabit chips. The hardware transmit descriptor rings typically have sizes of the order of 256 descriptors. I think if the ring fills up, you could simply drop the packet with ENOBUFS. That's what happens if the if_snd queue fills up, and its maximum size is comparable to the sizes of modern descriptor rings. It would simplify things quite a bit to eliminate the if_snd queue entirely for such devices. In any case, I'm glad you're looking at making this change. I think it's the right thing to do. John