Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 20 Oct 2010 19:38:54 +0200
From:      David Naylor <naylor.b.david@gmail.com>
To:        Luigi Rizzo <rizzo@iet.unipi.it>
Cc:        freebsd-current@freebsd.org, Miroslav Lachman <000.fbsd@quip.cz>
Subject:   Re: geom_sched usage
Message-ID:  <201010201938.58687.naylor.b.david@gmail.com>
In-Reply-To: <20101019081824.GB54147@onelab2.iet.unipi.it>
References:  <201010180943.37042.naylor.b.david@gmail.com> <201010190807.59491.naylor.b.david@gmail.com> <20101019081824.GB54147@onelab2.iet.unipi.it>

next in thread | previous in thread | raw e-mail | index | archive | help
--nextPart2844468.XcjDmbjXDk
Content-Type: multipart/mixed;
  boundary="Boundary-01=_ukyvMrk5pPo7POE"
Content-Transfer-Encoding: 7bit


--Boundary-01=_ukyvMrk5pPo7POE
Content-Type: Text/Plain;
  charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

On Tuesday 19 October 2010 10:18:24 Luigi Rizzo wrote:
> On Tue, Oct 19, 2010 at 08:07:54AM +0200, David Naylor wrote:
> > Would there be any interest in having a rc.d/ script?  I would find it
> > conveniant to specify a single rc.conf line and get scheduling for all =
my
> > devices.  PC-BSD might find such functionality useful.
> >=20
> > See attached for my first draft at such a script, I'm willing to hash it
> > into shape.
>=20
> it would surely be useful but try to keep it simple and user-driven
> (this is a general comment on rc.d scripts).
> Some things i think you should simplify in your script:
> - remove support for guessing which devices should get the scheduler.
>   This is really a user decision and if the user names no devices then
>   i believe it is better/safer not to install any scheduler.

I agree but I do think there is a case for an 'ALL' command as the user may=
=20
want scheduling on newly attached devices without knowning their device nam=
es=20
(i.e. attached USB storage devices). =20

I would also like to add a ``gsched_nodev'' that allows one to use 'ALL'=20
without having to apply gsched to everything. =20

See attached for a devd.conf file that add supports for that. =20

> - use standard names such as gsched_flags or gsched_flags_${dev} to hold
>   generic and specific flags for the insert command.
>   It is neither useful nor flexible to have the script insert '-a'
>   in front of the algorithm;

I've changed the variable names.  See attached for the rc.d script. =20

@Miroslav: thanks for the tip

--Boundary-01=_ukyvMrk5pPo7POE
Content-Type: text/plain;
  charset="ISO-8859-1";
  name="gsched.conf.txt"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
	filename="gsched.conf.txt"

notify 100 {
	match "system"		"DEVFS";
	match "subsystem"	"CDEV";
	match "type"		"CREATE";
	match "cdev"		"(ad|ada|cd|da)[0-9]+";
	action "/etc/rc.d/gsched start $cdev";
};

--Boundary-01=_ukyvMrk5pPo7POE
Content-Type: text/plain;
  charset="ISO-8859-1";
  name="gsched.txt"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="gsched.txt"

#!/bin/sh
#
# $FreeBSD$
#
# Specify gsched_enable=3D"YES" in /etc/rc.conf(.local) to activate schedul=
ing on
# storage devices. =20
#=20
# gsched_devs is a space separated list of accepted devices.  `ALL' may be =
used=20
# to indicate all storage devices. =20
#
# gsched_flags_$dev specifies storage device specific flags (i.e. ``-a rr''=
 to
# use rr scheduling, see gsched(8) insert command). =20

# TODO:
# - add gsched profiles, such as `desktop' for kern.geom.sched.rr tunables
# - add rejected list

# PROVIDE: gsched
# KEYWORD: nojail

=2E /etc/rc.subr

gsched_enable=3D${gsched_enable:-NO}

name=3D"gsched"
rcvar=3D`set_rcvar`
command=3D"/sbin/${name}"
start_cmd=3D"gsched_start"
stop_cmd=3D"gsched_stop"

gsched_filter() {
	local _gsched_devs _devs _devs_recon _kern_disks

	_kern_disks=3D`sysctl -n kern.disks`

	_devs=3D$*
	if [ -z "${_devs}" ]; then
		_devs=3D${_kern_disks}
	fi

	_gsched_devs=3D${gsched_devs}
	case ${_gsched_devs} in
		[aA][lL][lL])
			_gsched_devs=3D${_kern_disks}
			;;
	esac

	for _g in ${_devs}; do
		# Filter all devs that are part of gsched_devs
		case " ${_gsched_devs} " in
		    *\ ${_g}\ *)
			# Filter all devs that exist
			case " ${_kern_disks} " in
			    *\ ${_g}\ *)
				# ${_g} is part of ${gsched_dev} and it exists
				_devs_recon=3D"${_devs_recon} ${_g}"
				;;
			esac
			;;
		esac
	done

	echo ${_devs_recon}
}

gsched_start()
{
	local _devs _g _gsched_flags

	# Make sure only accepted (and existing) devices are used
	#
	_devs=3D`gsched_filter $*`

	echo -n "Starting gsched devices:"

	for _g in ${_devs}; do
		echo -n " $_g"
		eval _gsched_flags=3D\$gsched_flags_${_g}
		${command} insert ${_gsched_flags} ${_g}
	done

	echo "."
}

gsched_stop() {
	local _devs _g

	# Make sure only accepted (and existing) devices are used
	#
	_devs=3D`gsched_filter $*`

	echo -n "Stopping gsched devices:"

	for _g in ${_devs}; do
		echo -n " $_g"
		${command} destroy ${_g}.sched.
	done

	echo "."
}

load_rc_config $name
run_rc_command $*

--Boundary-01=_ukyvMrk5pPo7POE--

--nextPart2844468.XcjDmbjXDk
Content-Type: application/pgp-signature; name=signature.asc 
Content-Description: This is a digitally signed message part.

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

iEYEABECAAYFAky/KTIACgkQUaaFgP9pFrKINwCeOqM9aIPT3/nVAAM3IEXDlc0J
HVgAoIUXmVzFHqNGaLF/NgUZObcJVXPK
=jnBA
-----END PGP SIGNATURE-----

--nextPart2844468.XcjDmbjXDk--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201010201938.58687.naylor.b.david>