|
|
Gestion des processus
Exercice 1 : Parallélisme calcul et E/S
NB : Cet exercice est issu de
http://deptinfo.cnam.fr/Enseignement/CycleProbatoire/SRI/Systemes/polyEDSIB.pdf
. Avec l'aimable autorisation de Catherine COQUERY (CNAM,
Département d'Informatique), il a été
adapté par Michel SIMATIC au contexte de l'INT.
La commande time permet de connaître le temps
d'exécution d'un programme. Exemple :
$
/usr/bin/time
calcul
5.96user 0.00system
0:06.35elapsed 93%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (86major+8minor)pagefaults 0swaps
Noter qu'on tape "/usr/bin/time" et non "time" de manière
à éviter d'invoquer la commande "time"
intégrée au shell. En effet, celle-ci donne la sortie
suivante :
$ time
calcul
6.51s real 5.99s
user 0.00s system
La version de time (/usr/bin/time) utilisée ici affiche
dans l'ordre les résultats suivants :
- U: (user) temps CPU pour le processus
- S: (system) temps CPU que le noyau a consacré au
processus
- E: (elapsed) temps total d'exécution du processus
- P: rapport (U+S)/E en pourcentage
- X+D: mémoire partagée (X) ou non (D)
utilisée en moyenne par le processus (en Ko)
- R: Taille résidente maximale
- I+O: nombre de lectures (I) et d'écritures (0) de blocs
sur le disque
- pF: nombre de défauts de page se divisant en (Cf.
Exercice 1 du TP "Gestion de la mémoire") :
-
- m: mineur (la page est en RAM, mais elle n'est pas dans un
cadre de page)
- M: Majeur (la page n'est pas en RAM, il faut aller la chercher
sur disque)
- sw: Nombre de swaps
NB :
- La plupart de ces informations sont issues d'appels à la
fonction getrusage (Cf. Exercice 1 du TP "Gestion de la
mémoire")
- Sous Linux, seuls U, S, E, P et pF sont renseignés (Cf.
"man getrusage")
PréparationPour cet
exercice, vous avez besoin que tous les processus soient
exécutés sur le même coeur de processeur. Sur une
machine multi-coeur, vous avez deux solutions : soit vous utilisez la
commande taskset (qui
permet d'imposer le coeur sur lequel on souhaite exécuter un
processus), soit vous utilisez une machine virtuelle qui vous offre la
garantie que nous utiliserons un noyau qui n'est
pas SMP (Symmetric
MultiProcessing). Voyez avec l'enseignant-chercheur qui anime ce Cours Intégré la solution qu'il préfère.
S'il vous demande d'utiliser la commande taskset, passez directement au paragraphe "
Se placer dans un répertoire de travail" ci-dessous.
S'il vous demande d'utiliser la solution à base de machine
virtuelle, vous allez réutiliser un disque dur de machine
virtuelle Xubuntu :
- cp ~simatic/.VirtualBox/HardDisks/Xubuntu.vdi /var/tmp
(NB : La copie prend plusieurs minutes, puisque ce fichier fait 5,3 Go) - Lancer Oracle VirtualBox via l'interface graphique
- Dans VirtualBox, cliquer sur Nouveau
- Mettre
- Nom : Xubuntu
- Système d'exploitation : Linux
- Version : Ubuntu (64 bit)
- Cliquer sur Suivant
- Mettre 1024 Mo pour la mémoire de base
- Cliquer sur Suivant
- Disque
dur d'amorçage doit être coché. Sélectionner
"Utiliser disque dur existant", puis cliquer sur l'icône de
sélection de dossier, puis cliquer sur "Ajouter"et enfin
sélectionner /var/tmp/Xubuntu.vdi (i.e. le fichier que vous avez recopié).
- Cliquer sur Suivant
- Cliquer sur "Terminer" : La machine virtuelle "Xubuntu" est créée.
- Double-cliquer sur la machine virtuelle "Xubuntu" : elle démarre.
Dans la suite, nous appellerons machine hôte (host machine) la machine sur laquelle vous avez lancé VirtualBox et machine invitée (guest machine) la machine virtuelle Xubuntu. - Se connecter à la machine invitée en tant que "csc4508", mot de passe "csc4508" (Ce compte est "sudoer").
- Les
étapes suivantes sont destinées à vous permettre
d'accéder au répertoire de votre compte Unix (fourni par la DISI) à partir
de la machine invitée :
- Dans la fenêtre VirtualBox (qui héberge la machine invitée), menu Périphériques / Dossiers partagés
- Cliquer sur le "+"
- Chemin du répertoire : Chemin vers votre répertoire DISI
- Nom du répertoire : [votreNomDeUserUnix]
- Cocher "Montage automatique" et "Configuration permanente"
- Redémarrer la machine invitée.
- La machine invitée
peut désormais accéder (en lecture/écriture)
à votre répertoire DISI en accédant à /media/sf_votreNomDeUserUnix
- NB : ne travaillez que dans votre répertoire DISI ! En effet, si vous stockez des choses sur le disque de votre machine invitée, dès que vous effacerez le fichier /var/tmp/Xubuntu.vdi, le contenu du disque de votre machine invitée sera perdu !
Se placer dans un répertoire de travail
tar xvfz cmpCpuES.tgz
cd CmpCpuES
make
Question 1Lancer le programme calcul pour vérifier que vous n'avez pas besoin de taper ./calcul dans les commandes suivantes (Dit autrement, le répertoire courant (.) est dans votre PATH). Si le lancement de calcul donne lieu à une erreur, modifier votre PATH en tapant la commande suivante : export PATH=.:$PATH
Lancer /usr/bin/time calcul Modifier la constante NBFOIS dans calcul.c pour que le temps d'exécution soit d'environ 20 secondes.
NB : n'oubliez pas de recompiler calcul.c à chaque fois que vous modifiez NBFOIS.
Interpréter les résultats affichés par time.
Répéter une ou deux fois l'opération. Que
constate-t'on ?
Question 2
Lancer /usr/bin/time disque
Adapter la constante NBFOIS dans le fichier disque.c pour que la commande
/usr/bin/time disque
affiche un temps total d'exécution égal (à +/- 10%) du temps total d'exécution de /usr/bin/time calcul
Calculer le temps passé en E/S
Question 3
Si vous êtes sur machine virtuelle, lancer (calcul&);/usr/bin/time calcul Sinon lancer (taskset -c 0 calcul&);/usr/bin/time taskset -c 0 calcul
NB : dans la commande précédente, le "&" indique que le processus doit être lancé en tâche de fond. Ainsi, on a deux processus calcul qui s'exécutent en parallèle.
Interpréter les résultats.
Question 4Si vous êtes sur machine virtuelle :
- Lancer (/usr/bin/time calcul&);disque &
-
Lancer (calcul&);/usr/bin/time disque &
Sinon
- Lancer (/usr/bin/time taskset - c 0 calcul&);taskset -c 0 disque &
-
Lancer (taskset -c 0 calcul&);/usr/bin/time taskset -c 0 disque &
Interpréter les résultats
Question 5Si vous êtes sur machine virtuelle, reprendre toutes les questions précédentes hors de
la machine virtuelle (donc sur un noyau SMP).
Sinon, lancez les commandes précédentes sans utiliser la commande taskset.
Observez les différences
de performances.
Rangement
Si vous n'avez plus besoin d'utiliser votre machine invitée (NB : l'exercice suivant en a besoin), arrêtez-là. Puis supprimez le fichier /var/tmp/Xubuntu.vdi
(une manière plus propre de faire est de supprimer la machine
virtuelle de VirtualBox et surtout son disque associé !).Exercice 2 : A propos des priorités
PréparationSi vous pouvez vous connecter à une machine sur laquelle vous avez les droits root ou bien vous êtes "sudoer" et si vous avez déjà manipulé des machines virtuelles, réalisez cet exercice sur cette machine. Sinon réalisez cet exercice sur une machine Linux virtuelle (sur laquelle vous serez "sudoer"). Pour ce faire, reportez-vous à la section Préparation de l'Exercice 1
Se placer dans un répertoire de travail
tar xvfz rtSleep.tgz
cd RtSleep
make
Question 1
Dans une fenêtre "utilisateur standard", taper
- sleep 1000 &
- nice sleep 1000 &
- nice -n 19 sleep 1000 &
- ps -al
Observer les colonnes PRI et NI. À quelles priorités
correspondent-elles ?
Taper
Pourquoi avez-vous un message d'erreur ?
Taper
- sudo nice -n -1 sleep 1000
Question 2
Taper :
- sudo nice -n -1 sleep 1000 &
(et fournir le mot de passe pour pouvoir effectuer sudo)
- sudo nice -n -20 sleep 1000 &
(et fournir le mot de passe pour pouvoir effectuer sudo)
- ps -al
Observer les colonnes PRI et NI.
Question 3
Taper :
- aller dans le répertoire RtSleep
- sudo nice -n 19 ./rtSleep 99 1000 &
- ps -al
Commenter l'affichage de rtSleep et de ps
Question 4Allez dans le répertoire CmpCpuES de l'exercice 1.
Lancez la commande : (/usr/bin/time calcul &) ; nice -n 10 /usr/bin/time calcul
Observez la différence de temps d'exécution entre les deux processus.
Question 5
Lancez la commande : cp calcul.c calculPrioStat.c
En vous inspirant du contenu du fichier rtSleep.c, modifiez calculPrioStat.c pour qu'il puisse s'exécuter en priorité statique 1.
Lancez la commande : (/usr/bin/time calculPrioStat &) ; /usr/bin/time calcul
Observez la différence de temps d'exécution entre les deux processus.
RangementSi vous n'avez plus besoin d'utiliser votre machine invitée (NB : l'exercice suivant en a besoin), arrêtez-là. Puis supprimez le fichier /var/tmp/Xubuntu.vdi
(une manière plus propre de faire est de supprimer la machine
virtuelle de VirtualBox et surtout son disque associé !). Exercice 3 : De l'ordonnancement temps-réel
PréparationSi vous pouvez vous connecter à une machine sur laquelle vous avez les droits root ou bien vous êtes "sudoer" et si vous avez déjà manipulé des machines virtuelles, réalisez cet exercice sur cette machine. Sinon réalisez cet exercice sur une machine Linux virtuelle (sur laquelle vous serez "sudoer"). Pour ce faire, reportez-vous à la section Préparation de l'Exercice 1.
Se placer dans un répertoire de travail
tar xvfz polOrdo.tgz
cd PolOrdo
Question 1
Ouvrir le fichier polOrdo.c Adaptez la valeur
de la constante NBFOIS en fonction de l'environnement dans lequel vous
vous exécutez (machine virtuelle ou bien machine native). Chercher
les différents points d'interrogation (?)
correspondant aux instructions (ou texte quand ces points
d'interrogation apparaissent à l'intérieur d'une
chaîne de caractères) à ajouter. Y
répondre.
Taper "make" pour compiler polOrdo.c
Question 2Si vous avez le droit de passer "root", exécuter
"polOrdo" (NB : si vous êtes sur une machine invitée, les performances sont évidemment moins bonnes que si vous étiez sur une machine hôte).
Sinon utiliser les résultats ci-dessous obtenus sur une
machine équipé d'un Pentium à 900 Mhz munie de
512 Mo de RAM et 900 Mo de swap. La machine tournait sous RedHat
7.3 (Linux 2.4.20-18.7 (résultat de la commande uname -sr))
:
Temps mesure 1
= 0.568704 s
Temps mesure 2 =
0.907726 s
Temps mesure 3 =
0.000173 s
Temps mesure 4 =
2.708345 s
Temps mesure 5 =
0.052389 s
Temps mesure 6 =
1.009992 s
Temps CPU intensif =
2.843138 s
Valeur de ts (pour le fils)
= 0.060000000 s
(attention Nanosecondes !)
Interpréter les résultats obtenus
RangementSi vous n'avez plus besoin d'utiliser votre machine invitée, arrêtez-là. Puis supprimez le fichier /var/tmp/Xubuntu.vdi
(une manière plus propre de faire est de supprimer la machine
virtuelle de VirtualBox et surtout son disque associé !).
|