Une fiche technique compare des mégaoctets par seconde, et un serveur web ne lit presque jamais un gros fichier de bout en bout. Il lit des milliers de petits morceaux à la fois - des lignes, des pages d'index, des fichiers de session - et c'est une tout autre mesure.

Le chiffre qui compte

  • Un disque à plateaux - quelques centaines d'opérations par seconde, parce qu'un bras physique doit se déplacer.
  • Un SSD SATA - des dizaines de milliers, bridées par une interface conçue pour des disques à plateaux.
  • Le NVMe - des centaines de milliers, en dialogue direct avec le processeur par de nombreuses files à la fois.

La profondeur de file est la vraie différence : SATA a une file de 32 ; le NVMe a des milliers de files, profondes de milliers. Vingt workers PHP qui demandent tous quelque chose au même instant, c'est exactement cette forme.

Où cela se sent

  • Une base qui fait beaucoup de petites lectures : presque chaque page d'un CMS.
  • Les sessions et les caches écrits sous forme de fichiers.
  • Une sauvegarde, un import ou une grosse suppression, où tout le travail est fait de petites opérations.

Où cela ne se sent pas

Si l'ensemble de travail tient en mémoire, le disque est à peine touché et le NVMe change très peu. Acheter du stockage plus rapide quand la réponse est plus de RAM est une erreur fréquente et coûteuse.

Mesurez le vôtre

fio --name=rand --rw=randread --bs=4k --size=1G --numjobs=4 --iodepth=32 --runtime=30 --time_based --group_reporting

Cela mesure de petites lectures aléatoires en profondeur, le motif que produit une base de données. Les tests séquentiels mesurent quelque chose que votre serveur ne fait jamais.

Regardez d'abord l'iowait : top, la valeur %wa. Proche de zéro veut dire que le stockage n'est pas votre goulot, quel que soit le disque.