Développer avec l’IA

Linus Torvalds utilise l'IA pour corriger le cache de pages Linux, mais les relecteurs détectent une condition de course

Linus Torvalds a utilisé Claude Code pour rédiger un correctif du noyau Linux qui augmentait le débit en lecture par 23, mais les mainteneurs du noyau ont identifié une condition de course avant la fusion.

Une puce électronique avec des circuits imprimés et une loupe mettant en évidence un détail.
Illustration générée pour cet article

Traduit automatiquement depuis l'original anglais.

Le créateur de Linux, Linus Torvalds, a récemment eu recours à Claude Code d'Anthropic pour résoudre un goulot d'étranglement persistant des performances dans le cache de pages du noyau Linux. La série de correctifs résultante a démontré des gains massifs de débit lors de benchmarks synthétiques, mais les relecteurs du noyau ont rapidement identifié une condition de course critique empêchant une intégration immédiate.

Ce qui s'est passé

Torvalds a soumis une série de dix correctifs visant à résoudre un problème de contention sur le comptage de références qui tourmente les développeurs du noyau depuis plus de deux ans. Il avait personnellement lutté pendant dix-huit mois avec une version défectueuse de sa propre correction, tandis que d'autres ingénieurs rencontraient des obstacles similaires. La nouvelle approche, générée avec l'aide d'un outil de codage IA, supprimait les opérations de comptage de références des folios d'un chemin courant de lecture tamponnée. Sur son système AMD Ryzen Threadripper à 64 threads, le correctif a augmenté le débit en lecture de 13,3 millions à 304 millions de lectures par seconde.

Malgré ces chiffres impressionnants, Torvalds a averti que les charges de travail réelles verraient des améliorations nettement moindres. L'environnement de benchmark était très synthétique, conçu pour stresser des points de contention spécifiques plutôt que de refléter le comportement typique des utilisateurs. Néanmoins, le potentiel d'amélioration des performances a immédiatement attiré l'attention de la communauté du noyau, déclenchant un processus de revue rigoureux, standard pour les modifications apportées aux sous-systèmes centraux de gestion de la mémoire.

Les relecteurs n'ont pas tardé à trouver des problèmes. Matthew Wilcox, développeur historique de la gestion de la mémoire du noyau, a exprimé des inquiétudes concernant la conception du nouveau mécanisme de réclamation. Kiryl Shutsemau, un autre développeur du noyau ayant précédemment travaillé sur ce goulot d'étranglement, a identifié une condition de course dans le code. Par conséquent, Torvalds a confié le développement ultérieur du correctif à Shutsemau, reconnaissant que la solution générée par l'IA nécessite des raffinements importants avant d'être sûre pour une utilisation en production.

Comment cela fonctionne

Le problème central impliquait une contention sur le comptage de références des folios, qui représentait presque tous les hits inter-cœurs dans certains tests multi-threadés. Les tentatives précédentes pour corriger cela consistaient à copier les données sans tenir une référence de folio et à vérifier la validité après coup, ce qui laissait le système vulnérable aux conditions de course lors de la réclamation de mémoire. La nouvelle série de correctifs introduit un indicateur PG_rcu_free et utilise la réclamation différée via RCU. Cette méthode protège le folio pendant qu'il est copié vers l'espace utilisateur, à condition qu'aucune faute de page ne se produise.

Claude Code a écrit l'implémentation, les tests et la documentation initiale sous la direction de Torvalds. L'assistant IA a aidé à naviguer dans la logique complexe requise pour éliminer la surcharge liée au comptage de références. Cependant, les choix de conception faits par l'IA, tels que l'implémentation spécifique de l'indicateur, ont suscité des débats parmi les mainteneurs humains. Wilcox a suggéré d'utiliser un type de page au lieu d'un indicateur et de réclamer les folios de la liste inactive après une période de grâce RCU, mais Torvalds a rejeté ces idées en raison de lacunes de couverture dans les opérations de troncature et de perçage de trous (hole-punch).

Détails clés

  • Torvalds a utilisé Claude Code pour générer l'implémentation, les tests et la documentation pour la correction du cache de pages.
  • Les benchmarks sur un Threadripper à 64 threads ont montré une augmentation du débit en lecture par 23, passant de 13,3 millions à 304 millions de lectures par seconde.
  • Les cycles du noyau par lecture sont passés de près de 20 000 à 735 dans le scénario de benchmark à forte contention.
  • Le relecteur Kiryl Shutsemau a trouvé une condition de course dans filemap_read_rcu_batch() où le remplacement de folio pourrait exposer des données non écrites.
  • Le correctif introduit un nouvel indicateur PG_rcu_free, que Torvalds juge nécessaire pour gérer correctement les mappages vers l'espace utilisateur.
  • Les performances mono-thread ont régressé dans les premières versions, les lectures de 16 octets passant d'environ 4 150 à 6 550 cycles en raison de fautes supplémentaires.

Pourquoi c'est important

Cet incident sert d'étude de cas réaliste pour les ingénieurs intégrant des assistants IA dans la programmation de systèmes complexes. Bien que l'IA ait réussi à produire du code atteignant des améliorations spectaculaires des performances dans un environnement contrôlé, elle n'a pas pris en compte des subtilités de concurrence que des relecteurs humains expérimentés ont repérées immédiatement. Cela souligne que l'IA peut accélérer la rédaction de solutions, mais ne peut pas encore remplacer l'examen architectural approfondi requis pour le développement au niveau du noyau.

Pour les constructeurs logiciels, cette histoire souligne l'importance de maintenir des processus de revue rigoureux même lors de l'utilisation d'outils de codage avancés. La vitesse à laquelle l'IA a généré le correctif ne s'est pas traduite par une préparation à la fusion. L'élément humain reste crucial pour identifier les cas limites, comme la condition de course impliquant l'extension de i_size, qui pourrait entraîner une corruption des données si elle n'était pas corrigée.

Ce que vous pouvez faire

  • Traitez le code généré par l'IA comme un premier brouillon nécessitant une revue manuelle approfondie, surtout dans les systèmes concurrents ou bas niveau.
  • Vérifiez les affirmations de performance avec des charges de travail réalistes, car les benchmarks synthétiques peuvent ne pas refléter les compromis du monde réel comme les régressions mono-thread.
  • Maintenez des normes strictes de revue de code pour les chemins critiques, en veillant à ce que plusieurs experts valident les modifications apportées aux ressources partagées.
  • Soyez prêt à itérer sur les suggestions de l'IA, car les implémentations initiales peuvent contenir des défauts de conception nécessitant des ajustements architecturaux.
  • Surveillez les conditions de course subtiles dans les opérations asynchrones, telles que la réclamation de mémoire et la gestion des fautes de page.
  • Documentez le rôle de l'IA dans votre processus de développement pour assurer la transparence et faciliter les revues ciblées par les membres de l'équipe.

Outils de la Boutique Bytechap

$89

DocBento

Gestion documentaire auto-hébergée qui analyse chaque scan et répond avec des citations de pages.

Démo en ligne

Continuer la lecture

Tous les articles