Chapter 1.4 : Identifier les ressources matérielles limitantes (#9) (WIP)
Les performances des ordinateurs ont toutes sortes de limites physiques (capacités de calcul, bandes passantes mémoire/disque/réseau/PCIe, latences d'interconnection...), et en tout point de l'exécution d'un programme, les performances dudit programme sont dictées par une de ces limites.
La limite qui est en jeu peut changer au cours de l'exécution d'un programme (ex: disque au début, CPU au milieu, réseau à la fin), parfois de nombreuses fois et à un rythme rapide (ex: traitement des données par morceaux, algorithmes itératifs distribués entre plusieurs ordinateurs où chaque itération nécessite une synchronisation réseau). Dans ce dernier cas, il est souvent préférable d'aborder le point de vue simplificateur selon lequel plusieurs ressources limitent simultanément les performances.
Il est indispensable d'identifier correctement les ressource système qui limitent la performance, car la plupart des outils de profilage n'analysent que l'utilisation de ressources matérielles spécifiques.
En utilisant un outil inadapté (ex: un profileur CPU user-mode sur un programme limité par les entrées/sorties ou la synchronisation entre threads), on obtiendra des résultats qui ne concernent qu'une petite partie du temps d'exécution du programme et ne sont donc pas significatifs. Tenter d'optimiser sur la base de tels résultats sera une perte de temps.
A ce stade, le but doit au contraire être d'avoir un aperçu de l'activité système aussi large que possible, avant de se concentrer sur les ressources limitantes identifiées dans un deuxième temps.