Disque dur

dessin_dd
Deux facteurs de latences (“seek” = attente pour récupérer la donnée d’environ 20 ms) :

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.

Tête qui se déplace

Entre 4 et 15 ms.

Disque qui tourne

SSD

dessin_ssd
wear leveling = les transistors s’usent et il faut répartir la charge sur les transistors

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

Programme B

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.
MP3

\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