Page 1 of 1

ionice vs. Software-RAID

Posted: 11. Nov 2009 14:00
by der_flo
Funktioniert ionice in einer Software-RAID-Umgebung korrekt? Ich kann den CFQ-Scheduler für die md-Devices nicht setzen, weil es im Sysfs keine entsprechenden Einträge (z.B. /sys/block/md0/queue/scheduler) gibt. Es sieht so aus, als würden die Einstellungen nicht von den darunterliegenden Festplatten zum RAID-Device propagiert:

Code: Select all

$ cat /sys/block/*/queue/scheduler
noop anticipatory deadline [cfq] 
noop anticipatory deadline [cfq] 
none
none
<snip>
none
none
noop anticipatory deadline &#91;cfq&#93; 
noop anticipatory deadline &#91;cfq&#93;

Code: Select all

# Zwei "dd"s parallel
$ ionice -c3 dd if=/dev/zero of=test1 bs=10M count=100 oflag=dsync
100+0 records in
100+0 records out
1048576000 bytes &#40;1,0 GB&#41; copied, 29,9719 s, 35,0 MB/s
 
$ ionice -c2 -n1 dd if=/dev/zero of=test2 bs=10M count=100 oflag=dsync
100+0 records in
100+0 records out
1048576000 bytes &#40;1,0 GB&#41; copied, 37,251 s, 28,1 MB/s
  
#############
# Oder auch diese&#58;
$ ionice -c3 dd if=/dev/zero of=test1 bs=14M count=1000
1000+0 records in
1000+0 records out
14680064000 bytes &#40;15 GB&#41; copied, 255,732 s, 57,4 MB/s
 
$ ionice -c2 -n1 dd if=/dev/zero of=test2 bs=14M count=1000
1000+0 records in
1000+0 records out
14680064000 bytes &#40;15 GB&#41; copied, 254,077 s, 57,8 MB/s

Posted: 12. Nov 2009 11:43
by hjb
Hi!

Schwierige Frage. Ich kenne ionice auch erst seit 5 Minuten. Ich nehme an, du hast die Manpage bereits gelesen. Es verwendet den Systemaufruf ioprio_set, und dieser bezieht sich auf Prozesse oder Prozessgruppen. Es sollte eigentlich egal sein, welche Geräte benutzt werden, solange der CFQ-Scheduler verwendet wird.

Ein MD-Gerät braucht keinen Scheduler, weil es die Requests einfach an die beteilgten Platten weiterreicht.

Grüße,
hjb

Posted: 12. Nov 2009 12:17
by Janka
Du musst den CFQ-Scheduler für die Platte(n) setzen, nicht für das multi-device.

Janka

Posted: 13. Nov 2009 15:14
by der_flo
Janka wrote:Du musst den CFQ-Scheduler für die Platte(n) setzen, nicht für das multi-device.
Wie du im oberen Listing siehst, ist CFQ für alle Devices konfiguriert, also die beiden Platten sda und sdb, außerdem für ominöse dm-0 bis dm-3 (LVM?). Ich denke also nicht, dass mir hier ein Fehler unterlaufen ist.

Die Manpage habe ich natürlich gelesen und auf meiner Workstation scheinte das auch zu funktionieren, bei den neuen Server mit Software-RAID allerdings nicht.
Oder benchmarke ich falsch? Wie benchmarkt ihr konkurrierende Zugriffe?


Danke vorab für euere Meinungen!
Ciao,
der Flo

Posted: 13. Nov 2009 20:07
by Janka
Ich vermute auch, dass hineinspielt, dass du ein File erzeugst, das nur aus Nullen besteht, evtl. wird das ein Sparse-File.

Janka

Posted: 16. Nov 2009 11:38
by der_flo
Jetzt werde ich komplett verrückt. Selbst auf meiner Workstation funktioniert auf einmal ionice nicht mehr.

Shell 1:

Code: Select all

ionice -p $$ -c 2 -n 1
time cp -r source copy1
Shell 2:

Code: Select all

ionice -p $$ -c 3
time cp -r source copy2
Die beiden "cp"s synchronisiere ich einigermaßen, trotz alledem kommt bei beiden die gleiche Laufzeit heraus. "source" ist ein Verzeichnis mit 3*Linux-Source hat belegt ca. 1,2GB Speicher.

Mache ich eurer Meinung nach etwas falsch? Wie benchmarkt ihr sowas?

Danke vorab,
der Flo

Posted: 16. Nov 2009 12:16
by Janka
Wird ionice denn auf Kindprozesse (cp) vererbt?

Janka

Posted: 16. Nov 2009 19:16
by der_flo
IMHO: Wäre ja schlimm wenn nicht. Normale Nice-Werte werden doch auch vererbt, oder? Sonst könnte ja ein Prozeß locker seine eigenen Beschränkungen lockern, er bräuchte nur forken.