- Deux questions souvent posées en entretien
- Écrivez un programme qui compte les mots dans un fichier texte
- Où se situe le goulot d’étranglement des performances dans ce programme ?
- Beaucoup répondent souvent « la lecture du fichier », mais ce n’est plus vraiment le cas aujourd’hui
- C’était vrai il y a 10 à 20 ans, mais en 2022 la lecture séquentielle depuis le disque est très rapide (l’auteur ne le savait pas non plus avant de faire le test)
- Le goulot d’étranglement se trouve dans le traitement/l’analyse de l’entrée et l’allocation en mémoire : découper en mots, convertir en minuscules, compter les fréquences avec une table de hachage, etc.
- En testant avec Python/Go sur un fichier texte de 413 Mo (la Bible du roi Jacques concaténée 100 fois)
- La lecture ne prend que 0,1 à 0,2 seconde, tandis que le traitement prend entre 7 et 2 secondes
- En conclusion, lorsqu’on traite du « big data », l’I/O disque peut ne pas être le goulot d’étranglement
14 commentaires
Même dans le cas d’un accès séquentiel, il existe selon le langage et la bibliothèque des différences dans l’utilisation des pipelines d’I/O, ainsi que des facteurs comme la fréquence des requêtes d’API d’I/O par les développeurs. Dire que l’I/O n’est plus un goulot d’étranglement suppose donc, à mon avis, certaines conditions préalables.
Le
ioréseau, ce n'est pas de l'ionon plus ? 😂Même si les E/S deviennent plus rapides, les E/S restent des E/S, c’est bien pour cela qu’il existe des solutions dédiées uniquement à cette partie en programmation.
Remplacer tout le stockage big data par des SSD NVMe ? mdr, mais ça coûte combien au juste...
Pour quelqu’un comme moi qui souffre énormément des E/S disque et doit travailler à faire bouger les plateaux le moins possible, c’est une histoire étonnante.
Le texte parle de « séquentiel ».
S’il n’y a absolument aucun seek, alors ce n’est peut-être pas complètement faux.
C'est une expérience fondée sur une prémisse erronée.
Merci de fournir des explications supplémentaires.
Le concept même de goulot d'étranglement est une question de temps relatif.
Il est pertinent de comparer la vitesse du CPU et les I/O.
Même si les I/O sont devenues plus rapides qu'autrefois, elles ne peuvent pas être plus rapides que le CPU.
Il est possible d’utiliser
mmappour simplement charger dans la mémoire virtuelle, puis que les lectures réelles se fassent au fur et à mesure que le CPU exécute ses calculs.La communication entre le CPU et toutes les mémoires (registres, mémoire principale, disque) est elle aussi entièrement de l’I/O.
https://stackoverflow.com/questions/5877797/how-does-mmap-work
Je me demande quel sera désormais le critère déterminant pour le big data.
C'est fascinant.
J’apprends encore quelque chose aujourd’hui.
L’URL du premier commentaire sur https://news.ycombinator.com/item?id=33751266 est assez amusante.
Napkin Math (des maths simplifiées)
L’I/O séquentielle se rapproche presque de la vitesse de la mémoire, apparemment..
Le terme « napkin math » est vraiment trop séduisant. On dit que, lors de la création de l’UTF-8, Rob Pike l’aurait griffonné sur une serviette pour le montrer, non ?