Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 23 Mar 2010 00:36:07 +0100
From:      Pawel Jakub Dawidek <pjd@FreeBSD.org>
To:        Poul-Henning Kamp <phk@phk.freebsd.dk>
Cc:        Alexander Motin <mav@FreeBSD.org>, freebsd-current@FreeBSD.org, Andriy Gapon <avg@icyb.net.ua>, freebsd-arch@FreeBSD.org
Subject:   Re: Increasing MAXPHYS
Message-ID:  <20100322233607.GB1767@garage.freebsd.pl>
In-Reply-To: <5754.1269246223@critter.freebsd.dk>
References:  <4BA633A0.2090108@icyb.net.ua> <5754.1269246223@critter.freebsd.dk>

next in thread | previous in thread | raw e-mail | index | archive | help

--LpQ9ahxlCli8rRTG
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Mon, Mar 22, 2010 at 08:23:43AM +0000, Poul-Henning Kamp wrote:
> In message <4BA633A0.2090108@icyb.net.ua>, Andriy Gapon writes:
> >on 21/03/2010 16:05 Alexander Motin said the following:
> >> Ivan Voras wrote:
> >>> Hmm, it looks like it could be easy to spawn more g_* threads (and,
> >>> barring specific class behaviour, it has a fair chance of working out=
 of
> >>> the box) but the incoming queue will need to also be broken up for
> >>> greater effect.
> >>=20
> >> According to "notes", looks there is a good chance to obtain races, as
> >> some places expect only one up and one down thread.
> >
> >I haven't given any deep thought to this issue, but I remember us discus=
sing
> >them over beer :-)
>=20
> The easiest way to obtain more parallelism, is to divide the mesh into
> multiple independent meshes.
>=20
> This will do you no good if you have five disks in a RAID-5 config, but
> if you have two disks each mounted on its own filesystem, you can run
> a g_up & g_down for each of them.

A class is suppose to interact with other classes only via GEOM, so I
think it should be safe to choose g_up/g_down threads for each class
individually, for example:

	/dev/ad0s1a (DEV)
	       |
	g_up_0 + g_down_0
	       |
	     ad0s1a (BSD)
	       |
	g_up_1 + g_down_1
	       |
	     ad0s1 (MBR)
	       |
	g_up_2 + g_down_2
	       |
	     ad0 (DISK)

We could easly calculate g_down thread based on bio_to->geom->class and
g_up thread based on bio_from->geom->class, so we know I/O requests for
our class are always coming from the same threads.

If we could make the same assumption for geoms it would allow for even
better distribution.

--=20
Pawel Jakub Dawidek                       http://www.wheelsystems.com
pjd@FreeBSD.org                           http://www.FreeBSD.org
FreeBSD committer                         Am I Evil? Yes, I Am!

--LpQ9ahxlCli8rRTG
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.14 (FreeBSD)

iEYEARECAAYFAkun/uYACgkQForvXbEpPzSKuwCguhkymDDx/xptSf8zaU8rQI/5
qmAAoIMNpThV3uN+larfBnQ/ZI3pqElZ
=QCWg
-----END PGP SIGNATURE-----

--LpQ9ahxlCli8rRTG--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20100322233607.GB1767>