From owner-svn-src-head@FreeBSD.ORG Wed Apr 2 13:24:19 2014 Return-Path: Delivered-To: svn-src-head@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 9649D7C2; Wed, 2 Apr 2014 13:24:19 +0000 (UTC) Received: from mho-02-ewr.mailhop.org (mho-02-ewr.mailhop.org [204.13.248.72]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 689DEF6B; Wed, 2 Apr 2014 13:24:19 +0000 (UTC) Received: from c-24-8-230-52.hsd1.co.comcast.net ([24.8.230.52] helo=damnhippie.dyndns.org) by mho-02-ewr.mailhop.org with esmtpsa (TLSv1:AES256-SHA:256) (Exim 4.72) (envelope-from ) id 1WVL9O-000HpC-B9; Wed, 02 Apr 2014 13:24:18 +0000 Received: from [172.22.42.240] (revolution.hippie.lan [172.22.42.240]) by damnhippie.dyndns.org (8.14.3/8.14.3) with ESMTP id s32DOGDQ085894; Wed, 2 Apr 2014 07:24:16 -0600 (MDT) (envelope-from ian@FreeBSD.org) X-Mail-Handler: Dyn Standard SMTP by Dyn X-Originating-IP: 24.8.230.52 X-Report-Abuse-To: abuse@dyndns.com (see http://www.dyndns.com/services/sendlabs/outbound_abuse.html for abuse reporting information) X-MHO-User: U2FsdGVkX1/XrjcLd/duG2bujG03jVgs Subject: Re: svn commit: r264025 - head/sys/dev/iscsi From: Ian Lepore To: Edward Tomasz Napierala In-Reply-To: <201404012203.s31M34Gr007384@svn.freebsd.org> References: <201404012203.s31M34Gr007384@svn.freebsd.org> Content-Type: text/plain; charset="us-ascii" Date: Wed, 02 Apr 2014 07:24:15 -0600 Message-ID: <1396445055.81853.233.camel@revolution.hippie.lan> Mime-Version: 1.0 X-Mailer: Evolution 2.32.1 FreeBSD GNOME Team Port Content-Transfer-Encoding: 7bit Cc: svn-src-head@FreeBSD.org, svn-src-all@FreeBSD.org, src-committers@FreeBSD.org X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.17 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 02 Apr 2014 13:24:19 -0000 On Tue, 2014-04-01 at 22:03 +0000, Edward Tomasz Napierala wrote: > Author: trasz > Date: Tue Apr 1 22:03:03 2014 > New Revision: 264025 > URL: http://svnweb.freebsd.org/changeset/base/264025 > > Log: > Get rid of the "autoscaling", instead just set socket buffer sizes > in the usual way. The only thing the old code did was making things > less predictable. > > Sponsored by: The FreeBSD Foundation > > Modified: > head/sys/dev/iscsi/icl.c > > Modified: head/sys/dev/iscsi/icl.c > ============================================================================== > --- head/sys/dev/iscsi/icl.c Tue Apr 1 21:54:20 2014 (r264024) > +++ head/sys/dev/iscsi/icl.c Tue Apr 1 22:03:03 2014 (r264025) > @@ -68,6 +68,14 @@ TUNABLE_INT("kern.icl.partial_receive_le > SYSCTL_INT(_kern_icl, OID_AUTO, partial_receive_len, CTLFLAG_RW, > &partial_receive_len, 1 * 1024, "Minimum read size for partially received " > "data segment"); > +static int sendspace = 1048576; > +TUNABLE_INT("kern.icl.sendspace", &sendspace); > +SYSCTL_INT(_kern_icl, OID_AUTO, sendspace, CTLFLAG_RW, > + &sendspace, 1048576, "Default send socket buffer size"); > +static int recvspace = 1048576; > +TUNABLE_INT("kern.icl.recvspace", &recvspace); > +SYSCTL_INT(_kern_icl, OID_AUTO, recvspace, CTLFLAG_RW, > + &recvspace, 1048576, "Default receive socket buffer size"); > > static uma_zone_t icl_conn_zone; > static uma_zone_t icl_pdu_zone; > @@ -1008,7 +1016,7 @@ icl_conn_free(struct icl_conn *ic) > static int > icl_conn_start(struct icl_conn *ic) > { > - size_t bufsize; > + size_t minspace; > struct sockopt opt; > int error, one = 1; > > @@ -1029,18 +1037,28 @@ icl_conn_start(struct icl_conn *ic) > ICL_CONN_UNLOCK(ic); > > /* > - * Use max available sockbuf size for sending. Do it manually > - * instead of sbreserve(9) to work around resource limits. > + * For sendspace, this is required because the current code cannot > + * send a PDU in pieces; thus, the minimum buffer size is equal > + * to the maximum PDU size. "+4" is to account for possible padding. > * > - * XXX: This kind of sucks. On one hand, we don't currently support > - * sending a part of data segment; we always do it in one piece, > - * so we have to make sure it can fit in the socket buffer. > - * Once I've implemented partial send, we'll get rid of this > - * and use autoscaling. > + * What we should actually do here is to use autoscaling, but set > + * some minimal buffer size to "minspace". I don't know a way to do > + * that, though. > */ > - bufsize = (sizeof(struct iscsi_bhs) + > - ic->ic_max_data_segment_length) * 8; > - error = soreserve(ic->ic_socket, bufsize, bufsize); > + minspace = sizeof(struct iscsi_bhs) + ic->ic_max_data_segment_length + > + ISCSI_HEADER_DIGEST_SIZE + ISCSI_DATA_DIGEST_SIZE + 4; > + if (sendspace < minspace) { > + ICL_WARN("kern.icl.sendspace too low; must be at least %jd", > + minspace); > + sendspace = minspace; > + } > + if (recvspace < minspace) { > + ICL_WARN("kern.icl.recvspace too low; must be at least %jd", > + minspace); > + recvspace = minspace; > + } > + The %jd on these is causing build failures on 32-bit arches due to size_t being only 32 bits. -- Ian > + error = soreserve(ic->ic_socket, sendspace, recvspace); > if (error != 0) { > ICL_WARN("soreserve failed with error %d", error); > icl_conn_close(ic); >