Appels système : le coût caché des performances

2025-09-20
Appels système : le coût caché des performances

Cet article examine en détail la surcharge de performances des appels système Linux, révélant qu’il s’agit de bien plus qu’un simple appel de fonction du noyau. Les appels système perturbent les optimisations microarchitecturales du processeur, telles que le pipeline d’instructions et la prédiction de branche, entraînant des pertes de performances bien supérieures à ce qui apparaît dans le code source. L’article analyse le code du noyau, explique l’impact sur les performances de diverses mesures d’atténuation logicielles et matérielles et propose des stratégies d’optimisation telles que l’utilisation de vDSO, la mise en cache des valeurs, l’optimisation des E/S, les opérations par lots et le transfert de travail vers le noyau afin de réduire la fréquence des appels système et d’améliorer les performances des logiciels.

Lire plus
Développement

Écrire du code optimisé pour le CPU : Guide de la programmation consciente du matériel

2025-03-23
Écrire du code optimisé pour le CPU : Guide de la programmation consciente du matériel

Cet article utilise l'analogie d'un restaurant au volant pour expliquer trois concepts cruciaux de l'architecture des CPU : le pipeline d'instructions, la mise en cache mémoire et l'exécution spéculative. L'auteur soutient que la compréhension de ces mécanismes et l'écriture de code qui fonctionne avec eux (programmation consciente du matériel) peuvent améliorer considérablement les performances des logiciels. L'article explore des techniques d'optimisation du code, telles que le déroulement des boucles pour tirer parti de l'exécution superscalaire, et l'optimisation de la disposition des structures de données et des schémas d'accès pour utiliser au maximum le cache, afin d'augmenter l'efficacité. En fin de compte, l'auteur souligne que l'écriture de code efficace revient à écrire d'abord du code propre et maintenable, puis à profiler pour identifier les goulots d'étranglement des performances, et enfin à appliquer les principes de la programmation consciente du matériel pour cibler ces goulots d'étranglement.

Lire plus

Unix Spell : Le miracle des 64 Ko de RAM

2025-01-19
Unix Spell : Le miracle des 64 Ko de RAM

Dans les années 1970, le correcteur orthographique d'Unix a relevé un défi incroyable : intégrer un dictionnaire de 250 Ko dans seulement 64 Ko de RAM sur un ordinateur PDP-11. L'ingénieuse solution de Douglas McIlroy a impliqué une approche en plusieurs étapes. Initialement, un filtre de Bloom permettait des recherches rapides, mais à mesure que le dictionnaire augmentait, il a développé un nouveau schéma de compression de hachage. En reconnaissant que les différences entre les codes de hachage triés suivaient une distribution géométrique et en utilisant le codage de Golomb, il a atteint des limites de compression presque théoriques. Enfin, le partitionnement des données compressées a encore amélioré la vitesse de recherche. Cette histoire est une leçon magistrale d'optimisation sous contraintes, montrant comment des algorithmes intelligents peuvent surmonter des limitations apparemment impossibles.

Lire plus
Développement

Internes de commutation de contexte Linux : état du processus et mémoire

2025-01-02
Internes de commutation de contexte Linux : état du processus et mémoire

Cet article explore en détail la manière dont le noyau Linux représente les processus et leurs états, en se concentrant sur les structures de données clés : task_struct et mm_struct. task_struct gère l’état d’exécution, notamment l’état du processus, le suivi du temps CPU et les informations d’ordonnancement. mm_struct gère l’état de la mémoire, comprenant les tables de pages, les limites des segments mémoire et les détails spécifiques à l’architecture. L’article explique minutieusement les champs de ces structures et leurs rôles dans la commutation de contexte, offrant une compréhension approfondie du fonctionnement interne du noyau Linux.

Lire plus

Le théorème d'impossibilité du clustering : pourquoi les algorithmes parfaits n'existent pas

2024-12-26
Le théorème d'impossibilité du clustering : pourquoi les algorithmes parfaits n'existent pas

Cet article explore le problème du « triangle impossible » dans les algorithmes de clustering. Parallèlement au théorème CAP, l'auteur soutient que tout algorithme de clustering doit sacrifier l'une des trois propriétés souhaitables : l'invariance d'échelle, la richesse et la cohérence. L'article définit chaque propriété et illustre comment des algorithmes comme k-means en compromettent une pour atteindre les autres. La conclusion souligne que les développeurs doivent choisir les algorithmes en fonction des besoins spécifiques de leur application, en acceptant qu'un algorithme de clustering parfait est mathématiquement impossible.

Lire plus