Post

Linux 7.0 et PostgreSQL sur ARM64 - analyse d'une régression

Pourquoi pgbench chute presque de moitié sur Linux 7.0-rc avec ARM64, et quoi vérifier avant la mise en production.

Linux 7.0 et PostgreSQL sur ARM64 - analyse d’une régression

Dans la branche de test Linux 7.0, une régression importante a été observée par Salvatore Dipietro (Amazon): sur PostgreSQL (pgbench simple-update), la performance sur ARM64 chute presque de moitié (LKML).

D’après les chiffres publiés, le résultat passe d’environ 98 565 à 50 751 opérations. Comme Linux 7.0 est en phase finale de validation (v7.0-rc6), ce sujet concerne directement les admins et les équipes dev (kernel.org).

Comparaison des performances PostgreSQL sur Linux 7.0

Ce qui a cassé

La cause principale est liée à l’ordonnanceur (commit, analyse LKML):

  • le mode de préemption par défaut est passé de PREEMPT_NONE à PREEMPT_LAZY sur les architectures concernées,
  • PostgreSQL en user space passe alors beaucoup plus de CPU dans s_lock() (jusqu’à 55% du temps CPU selon l’analyse publiée),
  • la conséquence est une baisse nette du débit et de la réactivité sous charge OLTP typique.

C’est un exemple classique: un changement kernel peut impacter fortement une application, même sans modification du code applicatif.

Pistes de correction discutées

Deux approches ressortent des échanges:

  1. Revenir à un comportement par défaut proche de PREEMPT_NONE pour corriger la régression côté noyau (proposition de patch).
  2. Adapter PostgreSQL aux mécanismes récents du noyau (dont rseq slice) pour réduire la probabilité de préemption en section critique (réponse de Peter Zijlstra, thread rseq slice).

En clair: rollback côté kernel ou adaptation côté user space. Le même arbitrage est aussi souligné côté OpenNET, avec la décision finale attendue côté mainteneur principal (OpenNET).

Échanges entre développeurs Linux et Amazon

Pourquoi c’est important en production

  • PostgreSQL est l’un des SGBD les plus déployés en production.
  • ARM64 n’est plus un segment de niche: cloud, edge et serveurs généralistes.
  • Une chute proche de x2 en fin de cycle de release est un vrai risque prod, pas une micro-variation.

Ce que je recommande avant migration

Avant de passer à Linux 7.0 (ou à une distribution qui l’intègre):

  • exécutez votre profil pgbench réel sur ARM64,
  • comparez les résultats entre votre noyau actuel et 7.0-rc,
  • surveillez les workloads lock-heavy et la latence p95/p99,
  • n’acceptez pas la migration prod sans benchmark direct sur votre charge.

Il n’existe pas de réponse universelle du type “on met à jour partout”. La bonne séquence est: mesurer sur votre workload, puis déploiement progressif.

Sources

Cet article est sous licence CC BY 4.0 par l'auteur.