Disque dur
Deux facteurs de latences (“seek” = attente pour récupérer la donnée d’environ 20 ms) :
- déplacement de la tête
- rotation des disques pour amener la donnée sous la tête
L’OS possède son système de cache logiciel pour répondre + rapidement aux reqûetes
D’où le fseek
à faire avant de débrancher une clé USB.
- Connecteur SATA 3 = (Serial AT Attachment) : 500Mo/s (ou 6Gb/s)
- Un disque dur c’est max 100 Mo/s
Tête qui se déplace
Entre 4 et 15 ms.
Disque qui tourne
- Il tourne à quelle vitesse (RPM) ? Souvent 7200 rotations par minutes. Donc 120 révolutions (tours) par seconde ; donc 1 seul tour = 8,33 ms \approx 4 ms
SSD
wear leveling = les transistors s’usent et il faut répartir la charge sur les transistors
- Port PCIe = minimum 1Go/s
Sur un port SATA, il va le saturer et faire le max (500Mo/s) et sur un PCIe il va s’approche des 1Go/s (genre 700-900Mo/s)
OS
Tout est fichiers, et les fichiers ne font pas 4kb.
file extent : suite consécutive du LBA.
Un fichier, c’est une séquence de extent (parce qu’il peut être fragmenté en plusieurs morceaux sur le disque)
Il y a du cache en lecture (read caching) et du cache en écriture (write caching).
Read Caching : Les lectures séquentielles sont rapides (contrairement aux lectures randomisées, merci la cache).
Write Caching : Quand on écrit sur le disque, c’est déjà envoyé dans la cache (écriture instantanée côté user) et il écrira sur le disque + tard. Pour s’assurer que tout est écrit sur le disque, il faut flush avec fsync
.
Exemple
Programme A
- 10 write de 1Mo chacun
Programme B
- Lit 64 Ko sur le disque
latence de B : 10(t_{\text{seek}} + t_{\text{write}})+ 1 \times (t_{\text{seek}} + t_{\text{read}})
But du Mini Projet 3
Mesure ce temps de latence pour aller chercher une donnée (seek)
On va pouvoir utiliser le temps (clock_t
)
Si on voit des valeurs + rapide que le disque, alors on est dans le cache du disque.
\ra si on reçoit tous les blocs d’un coup, alors cest qu’on est dans le cache
Le mieux c’est de le faire sur une partition non utilisée, mais c’est pas obligatoire (réduction du bruit)
Disgression
Half-useful principle
table t
: startup T secondes.
Il faut que le temps d’exécution de t
soit supérieur à T : temps(t)> T
- Sinon, on prend plus de temps à lancer la tâche par rapport à la tâche elle-même
- Sinon ça veut dire qu’on fait un truc “qui ne sert à rien”, afin de rentabiliser le temps et éviter de perdre des performances.