Geom sched
De Diablotins.org.
| Geom Scheduler
|
| ||
| Ce document décrit l'utilisation du module geom scheduler(8) sous FreeBSD 8.X. Geom sched (par la suite gsched) est un module de geom(8) qui ordonnance les entrées sorties disques. |
Sommaire |
geom sched
Sous forte charge en entrées sorties du disque, vous aurez certainement remarqué un manque de réactivité de la machine.
Non pas en raison d'un manque de CPU, mais parce que les applications sont en attente du disque.
Gsched(8) répartit la charge sur un tourniquet ( round robin) pour gérer les queues d'entrées sorties et fournir une part équitable pour chacun de leurs clients.
Pour plus d'info là dessus, voir GEOM based disk schedulers for FreeBSD.
Mise en œuvre
gsched(8) est un service d’ordonnancement de geom(8), au niveau du disque; il s'insère dans la chaîne des fournisseurs de service (provider) de geom(8).
Gsched(8) est un module du noyau qui peut-être chargé et libéré à la volée.
Il ajoute les variables kern.geom.sched au système ( en fait à geom):
david:~>sysctl -N kern.geom.sched kern.geom.sched.expire_secs kern.geom.sched.debug kern.geom.sched.alg_count kern.geom.sched.algorithms kern.geom.sched.requests kern.geom.sched.done kern.geom.sched.in_flight kern.geom.sched.in_flight_w kern.geom.sched.in_flight_b kern.geom.sched.in_flight_wb kern.geom.sched.rr.wait_miss kern.geom.sched.rr.wait_hit kern.geom.sched.rr.queue_depth kern.geom.sched.rr.quantum_kb kern.geom.sched.rr.w_anticipate kern.geom.sched.rr.bypass kern.geom.sched.rr.quantum_ms kern.geom.sched.rr.wait_ms kern.geom.sched.rr.queues kern.geom.sched.rr.units
Pout l'utiliser, il suffit simplement de suivre la page d'aide de gsched(8).
| |
Note : l'algorithme «as» mentionné dans la page de man n'existe plus. |
exemple
Mon disque est attaché au périphérique /dev/ada0:
# kldload geom_sched # kldload gsched_rr # geom sched insert -a rr ada0
C'est tout!
Gsched crée un provider nommé ada0.sched comme le signalent les messages de la console:
GEOM_SCHED: Initializing global data. GEOM_SCHED: Loading: mp = 0xc8c540e0, g_sched_class = 0xc8c540e0. GEOM_SCHED: Modevent 0. GEOM_SCHED: Loaded module rr error 0. GEOM_SCHED: Device ada0.sched. created.
Ce que l'on peut vérifier avec gsched(8) list
$ gsched list Geom name: ada0.sched. Providers: 1. Name: ada0 Mediasize: 1000204886016 (932G) Sectorsize: 512 Mode: r5w5e13 Consumers: 1. Name: ada0.sched. Mediasize: 1000204886016 (932G) Sectorsize: 512 Mode: r5w5e13
Et dans gstat(8):
#gstat -f ada0.sched -b
dT: 1.000s w: 1.000s filter: ada0.sched
L(q) ops/s r/s kBps ms/r w/s kBps ms/w %busy Name
0 83 82 416 4.1 1 128 1.5 33.6 ada0.sched.
rc.conf
Il n'existe pas de script de démarrage pour gsched(8), vous devez donc en créer un vous même.
Je suggère celui ci dessous (que j'ai pompé), à placer dans /usr/local/etc/rc.d/gsched.
#!/bin/sh # PROVIDE: gsched # REQUIRE LOGIN # KEYWORD: nojail shutdown . /etc/rc.subr name="gsched" rcvar=${name}_enable load_rc_config $name : ${gsched_enable:="NO"} start_cmd=${name}_start stop_cmd=${name}_stop gsched_start() { for device in ${gsched_devices} ; do gsched insert -a ${gsched_policy} /dev/${device} done } gsched_stop() { for device in ${gsched_devices} ; do gsched destroy ${device}.sched. done } load_rc_config $name run_rc_command "$1"
Puis, rendez ce fichier exécutable:
chmod +x /usr/local/etc/rc.d/gsched
Ajoutez les entrées suivantes dans /etc/rc.conf:
gsched_enable="YES" gsched_devices="ada0" #liste des disques exemple : "ada0 ada1" gsched_policy="rr"
Résultat
Il y a une réelle amélioration de la réactivité sous forte charge en entrées sorties. C'est agréable sur une machine en desktop.
Mon cas de test :
# cd /usr/ports/editor/libreoffice # make extract
Pendant l'extraction, lancement d'appli (firefox/claws-mail/libreoffice). Y'a pas photo c'est bien plus réactif.

