mikrosaft
Member
Huhu,
ich wollte mein Mehrprozessorsystem mit einem Bashscript etwas optimaler auslasten und das Ergebnis ist nicht wie erwartet (für die Entwicklung des Scriptes steht mir leider kein MP-System zur Verfügung - nur ein P4 mit HT. Vielleicht liegts ja auch daran?).
Es geht um ein Backup-Script. Wenn ich auf konventionelle Art und Weise jede Datei nacheinander bearbeite
kommt folgendes heraus:
Soweit, so gut. Jetzt habe ich das Script abgeändert, um mehrere Prozesse parallel laufen zu lassen. Damit will ich die Auslastung des MP-Systems erhöhen:
Funktionieren tut es, die Auslastung des Systems ist gestiegen, aber:
Warum dauert die Scriptausführung länger? Liegt es daran, dass das Testsystem nur ein P4 mit Hyperthreading ist, und die Änderung wird auf dem echten Multiprozessor-System schneller laufen?
Das System auf dem das Script dann laufen soll kann ich leider nicht zum testen nehmen...
Oder hab ich mir da selber ins Knie gescriptet? Wie kann man Multithreading sonst mit der Bash nutzen?
Gruss
ich wollte mein Mehrprozessorsystem mit einem Bashscript etwas optimaler auslasten und das Ergebnis ist nicht wie erwartet (für die Entwicklung des Scriptes steht mir leider kein MP-System zur Verfügung - nur ein P4 mit HT. Vielleicht liegts ja auch daran?).
Es geht um ein Backup-Script. Wenn ich auf konventionelle Art und Weise jede Datei nacheinander bearbeite
Code:
...
( cat ."$FILE" | gzip -9 > /backup/sync"$FILE".gz )
...
Code:
$_ time backup.sh
...
real 25m53.720s
user 13m17.548s
sys 2m54.359s
Soweit, so gut. Jetzt habe ich das Script abgeändert, um mehrere Prozesse parallel laufen zu lassen. Damit will ich die Auslastung des MP-Systems erhöhen:
Code:
function fwaitfor()
{
PROC=$(jobs | grep Running | wc -l)
clear; jobs
# echo;echo
if [ "$PROC" -gt "4" ]
then
usleep 50000
fwaitfor
fi
}
...
fwaitfor
( cat ."$FILE" | gzip -9 > /backup/sync"$FILE".gz ) &
...
Funktionieren tut es, die Auslastung des Systems ist gestiegen, aber:
Code:
$_ time backup.sh
...
real 26m42.508s
user 18m9.664s
sys 6m47.853s
Warum dauert die Scriptausführung länger? Liegt es daran, dass das Testsystem nur ein P4 mit Hyperthreading ist, und die Änderung wird auf dem echten Multiprozessor-System schneller laufen?
Das System auf dem das Script dann laufen soll kann ich leider nicht zum testen nehmen...
Oder hab ich mir da selber ins Knie gescriptet? Wie kann man Multithreading sonst mit der Bash nutzen?
Gruss