Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 3 Apr 2014 01:11:54 +0200
From:      =?iso-8859-2?Q?Edward_Tomasz_Napiera=B3a?= <trasz@FreeBSD.org>
To:        Ian Lepore <ian@FreeBSD.org>
Cc:        svn-src-head@FreeBSD.org, svn-src-all@FreeBSD.org, src-committers@FreeBSD.org
Subject:   Re: svn commit: r264025 - head/sys/dev/iscsi
Message-ID:  <B658255F-931B-43B2-9BFC-D853A7DE58CC@FreeBSD.org>
In-Reply-To: <1396445055.81853.233.camel@revolution.hippie.lan>
References:  <201404012203.s31M34Gr007384@svn.freebsd.org> <1396445055.81853.233.camel@revolution.hippie.lan>

next in thread | previous in thread | raw e-mail | index | archive | help
Wiadomo=B6=E6 napisana przez Ian Lepore w dniu 2 kwi 2014, o godz. =
15:24:

> 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
>>=20
>> 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.
>>=20
>>  Sponsored by:	The FreeBSD Foundation
>>=20
>> Modified:
>>  head/sys/dev/iscsi/icl.c
>>=20
>> Modified: head/sys/dev/iscsi/icl.c
>> =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
>> --- 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 =3D 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 =3D 1048576;
>> +TUNABLE_INT("kern.icl.recvspace", &recvspace);
>> +SYSCTL_INT(_kern_icl, OID_AUTO, recvspace, CTLFLAG_RW,
>> +    &recvspace, 1048576, "Default receive socket buffer size");
>>=20
>> 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 =3D 1;
>>=20
>> @@ -1029,18 +1037,28 @@ icl_conn_start(struct icl_conn *ic)
>> 	ICL_CONN_UNLOCK(ic);
>>=20
>> 	/*
>> -	 * 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 =3D (sizeof(struct iscsi_bhs) +
>> -            ic->ic_max_data_segment_length) * 8;
>> -	error =3D soreserve(ic->ic_socket, bufsize, bufsize);
>> +	minspace =3D 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 =3D minspace;
>> +	}
>> +	if (recvspace < minspace) {
>> +		ICL_WARN("kern.icl.recvspace too low; must be at least =
%jd",
>> +		    minspace);
>> +		recvspace =3D minspace;
>> +	}
>> +
>=20
> The %jd on these is causing build failures on 32-bit arches due to
> size_t being only 32 bits.

Right.  Should be fixed now, sorry for breakage.




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?B658255F-931B-43B2-9BFC-D853A7DE58CC>