Date: Tue, 19 Oct 2010 08:07:54 +0200 From: David Naylor <naylor.b.david@gmail.com> To: Luigi Rizzo <rizzo@iet.unipi.it> Cc: freebsd-current@freebsd.org Subject: Re: geom_sched usage Message-ID: <201010190807.59491.naylor.b.david@gmail.com> In-Reply-To: <20101018195125.GA46115@onelab2.iet.unipi.it> References: <201010180943.37042.naylor.b.david@gmail.com> <20101018195125.GA46115@onelab2.iet.unipi.it>
next in thread | previous in thread | raw e-mail | index | archive | help
--nextPart4209501.PVuBcdrAFh Content-Type: multipart/mixed; boundary="Boundary-01=_7WTvMoIkzLmYVWS" Content-Transfer-Encoding: 7bit --Boundary-01=_7WTvMoIkzLmYVWS Content-Type: Text/Plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline On Monday 18 October 2010 21:51:25 Luigi Rizzo wrote: > On Mon, Oct 18, 2010 at 09:43:28AM +0200, David Naylor wrote: > > Hi, > >=20 > > I've used geom_sched to some success. Normally I do not notice anything > > but today I was copying big files over a gigabit ethernet and my laptop > > was not very responsive. I loaded gsched and the responsiveness > > improved (although still rather bad for anything requiring something > > from the HDD). > >=20 > > Thank you for all this work :-) > >=20 > > Some questions I have: > > - with a gmirror should the gsched be attached to the underlying devic= es > > (aka > >=20 > > /dev/ad?) or to the mirror device (aka /dev/mirror/?)? >=20 > always attach as close as possible to the hardware. Thanks. =20 > > - is there anyway to automatically attach gsched to a device on startup > > (i.e. > >=20 > > in rc.conf)? >=20 > no, you have to build some script yourself. Would there be any interest in having a rc.d/ script? I would find it=20 conveniant to specify a single rc.conf line and get scheduling for all my=20 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 in= to=20 shape. =20 > > - is there a way to prioritise random IO (vs sequential reads from big > >=20 > > files)? >=20 > no way to do that, but you can modify the quantum size and time to > let sequential reads get shorter chunks >=20 > kern.geom.sched.rr.quantum_kb: 8192 > kern.geom.sched.rr.quantum_ms: 100 > kern.geom.sched.rr.wait_ms: 10 >=20 > e.g. on a laptop it might make sense to set > quantum_ms=3D50 and quantum_kb=3D2048 Is there a manual page that describes these sysctls? It looks like, in my= =20 case, scp just hogs resources. =20 I do perceive some improvements in normal usage. Thanks > > - gsched_as does not appear to be installed. >=20 > true, gsched_as was just a proof of concept and gsched_rr > includes anticipation and round robin, so it is a superset of gsched_as Thanks for clarity. Regards, David --Boundary-01=_7WTvMoIkzLmYVWS 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. If empty all # storage devices are used # # gsched_$dev specifies the sheduling algorithm to use (e.g. `rr') # TODO: # - add gsched profiles, such as `desktop' for kern.geom.sched.rr tunables # 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_start_dev() { local _gsched_dev _gsched_profile _gsched_args _gsched_dev=3D$1 # Check if sched algo was specified # eval _gsched_profile=3D\$gsched_${_gsched_dev} if [ -n "${_gsched_profile}" ]; then _gsched_args=3D"-a ${_gsched_profile}" fi =09 # Start gsched for ${_gsched_dev} ${command} insert ${_gsched_args} ${_gsched_dev} } gsched_all_devs() { local _dev # Only supports upto 100 devices per device class # XXX: what other storage devices are there? for _dev in `cd /dev; echo *`; do case ${_dev} in ad[0-9]|ad[0-9][0-9]) echo ${_dev} ;; ada[0-9]|ada[0-9][0-9]) echo ${_dev} ;; da[0-9]|da[0-9][0-9]) echo ${_dev} ;; esac done } gsched_start() { local _gsched_devs _g _gsched_devs_recon _gsched_devs=3D$* if [ -z "${_gsched_devs}" ]; then # Use devices specified by gsched_devs _gsched_devs=3D${gsched_devs} # If no devices are specified then use all we can find if [ -z "${_gsched_devs}" ]; then _gsched_devs=3D`gsched_all_devs` fi elif [ -n "${gsched_devs}" ]; then # Make sure the custom device is one of the accepted for _g in ${_gsched_devs}; do case ${gsched_devs} in # _g is either by itself, at the start, middle # or the end of gsched_devs ${_g}|${_g}\ *|*\ ${_g}\ *|*\ ${_g}) _gsched_devs_recon=3D"${_gsched_devs_recon} ${_g}" ;; esac done _gsched_devs=3D${_gsched_devs_recon} fi echo -n "Starting gsched devices:" for _g in ${_gsched_devs}; do echo -n " $_g" gsched_start_dev $_g done echo "." } gsched_stop_dev() { local _gsched_dev _gsched_dev=3D$1 ${command} destroy ${_gsched_dev}.sched. } gsched_stop() { local _gsched_devs _g _gsched_devs=3D$* if [ -z "${_gsched_devs}" ]; then # Use devices specified by gsched_devs _gsched_devs=3D${gsched_devs} # If no devices are specified then use all we can find if [ -z "${_gsched_devs}" ]; then _gsched_devs=3D`gsched_all_devs` fi fi echo -n "Stopping gsched devices:" for _g in ${_gsched_devs}; do echo -n " $_g" gsched_stop_dev $_g done echo "." } load_rc_config $name run_rc_command $* --Boundary-01=_7WTvMoIkzLmYVWS-- --nextPart4209501.PVuBcdrAFh 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) iEYEABECAAYFAky9Nb8ACgkQUaaFgP9pFrJ14ACfRTmC+Z7Zw2VwWe02A93OcAdW SOQAnRzJMtyMUd6eM0EVZLVG3/HNdpmm =wvam -----END PGP SIGNATURE----- --nextPart4209501.PVuBcdrAFh--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201010190807.59491.naylor.b.david>