Bon, voilà, j'ai fais un script qui déroule des "make" en balayant les trois paramètres possibles sur mon kernel : noop, deadline, cfq.
J'ai pris pour "stresser" un peu mon SSD ce qui traînait dans mon home, la recompilation des exemples de la libgtkada, ce qui génère un usage intensif de gcc.
Les résultats sont anormalement identiques, en particulier le temps perçu par l'utilisateur (voir première colonne ci-dessous).
IO scheduler (elevator)
Real (s)
User (s)
Sys (s)
Nb of file system inputs
Nb of file system outputs
Average total memory (in KB)
Nb of voluntary context-switch
noop
27.71
25.48
1.51
0
17048
0
1050
noop
27.69
25.35
1.62
0
17048
0
1046
noop
27.71
25.38
1.60
0
17056
0
1046
noop
27.68
25.42
1.54
0
17048
0
1052
noop
27.69
25.49
1.48
0
17056
0
1050
deadline
27.69
25.38
1.59
0
17056
0
1047
deadline
27.65
25.35
1.59
0
17048
0
1045
deadline
27.69
25.44
1.52
0
17048
0
1050
deadline
27.72
25.48
1.50
0
17048
0
1050
deadline
27.72
25.35
1.62
0
17048
0
1045
cfq
27.74
25.37
1.64
0
17048
0
1049
cfq
27.69
25.49
1.48
0
17048
0
1044
cfq
27.59
25.22
1.68
0
17048
0
1044
cfq
27.63
25.41
1.50
0
17048
0
1043
cfq
27.56
25.38
1.48
0
17048
0
1042
Ça me laisse perplexe.
J'y vois deux explications possibles :
- ma façon de changer l'algo n'est pas prise en compte au vol par le kernel, et donc j'ai fait tous les tests avec le même algo;
- ces optimisations n'ont réellement aucun impact sur des systèmes aussi petit que les notre, et même une grosse compilation ne secoue pas vraiment le bouzin, car les caches du kernel, le tmpfs en RAM, le cache du SSD et son propre réordonnancement des écritures aplatissent les résultats.
Mon programme de test (qui fait donc 27 secondes de compilations), n'est sans doute pas assez gros.
D'un autre côté, j'ai trouvé un article qui comparait les temps de compilations du kernel, et pareil, il n'y avait pas de différences notables : Linux I/O schedulers benchmarked - anticipatory vs CFQ vs deadline vs noop
Et là, on parle de 9 minutes de compilation...
Des idées?
De mon côté, il ne reste plus qu'a le refaire tourner avec noatime, pour voir.
Le voici, libre à vous de le faire tourner chez vous :
#! /bin/bash
#
#------------------------------------------------------------------------------
# Lionel Draghi, 1 janvier 2014, v0
#
# Ce script permet de comparer l'impact du choix de l'algo d'ordonnancement du
# scheduler d'IO sur une tache quelconque (il faut juste avoir un "make" et un
# "make clean" executable à l'endroit du test).
#
# Attention :
# 1 - il faut adapter le device X dans /sys/block/X/queue/scheduler
# (ici "sda") à sa propre situation;
# 2 - il faut donner les droits en écriture à l'utilisateur courant sur le
# fichier en question : sudo chmod o+w /sys/block/X/queue/scheduler.
#
# Le fichier de résultat s'importe directement dans votre tableur préféré.
#------------------------------------------------------------------------------
# création de la ligne de header : elle doit bien sûr correspondre au paramètre
# "--format" passé ci-dessous à la commande time.
echo "IO scheduler (elevator=);\
Real (s);\
User (s);\
Sys (s);\
Nb of file system inputs;\
Nb of file system outputs;\
Average total memory (in KB);\
Nb of voluntary context-switch" > 0ドル.log
for i in noop deadline cfq
do
echo $i > /sys/block/sda/queue/scheduler
# pour vérifier qu'on a effectivement changé l'algo :
echo
echo
echo '-----------------------------------------------------------------------------------'
cat /sys/block/sda/queue/scheduler
echo '-----------------------------------------------------------------------------------'
echo
echo
for j in 1 2 3 4 5
do
make -s clean
/usr/bin/time --output=0ドル.log --append --format "$i;%e;%U;%S;%I;%O;%K;%w" make -s
done
done
[^] # Re: noatime et deadline
Posté par Lionel Draghi (site web personnel) . En réponse au journal Migrer vers un SSD simplement avec lvm. Évalué à 2.
Bon, voilà, j'ai fais un script qui déroule des "make" en balayant les trois paramètres possibles sur mon kernel : noop, deadline, cfq.
J'ai pris pour "stresser" un peu mon SSD ce qui traînait dans mon home, la recompilation des exemples de la libgtkada, ce qui génère un usage intensif de gcc.
Les résultats sont anormalement identiques, en particulier le temps perçu par l'utilisateur (voir première colonne ci-dessous).
Ça me laisse perplexe.
J'y vois deux explications possibles :
- ma façon de changer l'algo n'est pas prise en compte au vol par le kernel, et donc j'ai fait tous les tests avec le même algo;
- ces optimisations n'ont réellement aucun impact sur des systèmes aussi petit que les notre, et même une grosse compilation ne secoue pas vraiment le bouzin, car les caches du kernel, le tmpfs en RAM, le cache du SSD et son propre réordonnancement des écritures aplatissent les résultats.
Mon programme de test (qui fait donc 27 secondes de compilations), n'est sans doute pas assez gros.
D'un autre côté, j'ai trouvé un article qui comparait les temps de compilations du kernel, et pareil, il n'y avait pas de différences notables :
Linux I/O schedulers benchmarked - anticipatory vs CFQ vs deadline vs noop
Et là, on parle de 9 minutes de compilation...
Des idées?
De mon côté, il ne reste plus qu'a le refaire tourner avec noatime, pour voir.
Le voici, libre à vous de le faire tourner chez vous :