Le northbridge disparu : comment l’intégration a reconfiguré les PC

Cet article vous a aidé ?

Vous achetez deux serveurs « identiques », installez le même NVMe, lancez la même charge, et une machine s’envole tandis que l’autre tousse comme si elle mâchait du gravier.
Le graphique dit que le stockage est lent. Les logs disent que le noyau va bien. Le fournisseur répond « fonctionne comme prévu ». Bienvenue dans le PC moderne : le goulot d’étranglement a bougé,
et l’ancien modèle mental (le northbridge comme chef de la circulation) est mort.

Le northbridge ne s’est pas seulement réduit. Il a été absorbé par le CPU, emportant le contrôle mémoire, les E/S haut débit et parfois le graphique avec lui.
Ce changement d’architecture a reconfiguré tout : où la latence se cache, où la bande passante disparaît, et comment diagnostiquer quand la production flambe.

Ce que faisait réellement le northbridge

À l’époque classique des chipsets PC, deux puces importaient : northbridge et southbridge. Le nom n’avait jamais de rapport avec la géographie. Il indiquait la distance
par rapport au CPU et la vitesse des bus qu’elles géraient.

Le northbridge se situait entre le CPU et les éléments les plus rapides : la RAM, les graphismes haut débit (AGP, puis les premiers PCIe), et parfois le lien vers le southbridge.
C’était l’intersection haute fréquence où chaque cache miss venait être jugé. Le southbridge gérait les E/S « lentes » : SATA/PATA, USB, audio, PCI hérité,
et autres.

Cela avait de l’importance parce que les bus étaient plus étroits, les domaines d’horloge plus simples, et le CPU ne pouvait pas parler directement les signaux DDR ni négocier des liens PCIe.
Le chipset traduisait, arbitrerait et tamponnait. Si vous vous souvenez des jours de « overclocking FSB », vous trafiquiez l’autoroute du CPU vers le northbridge,
pas un quelconque mystérieux clock du cœur du CPU.

Le northbridge était aussi un domaine de défaillance. Il chauffait. Il était posé sous un petit dissipateur qui accumulait la poussière comme un travail syndical.
Quand il devenait instable, vous aviez la pire classe de problèmes : corruption intermittente, reset étranges, ou comportement « ne tombe en panne que sous charge ».

Blague n°1 : Le dissipateur du northbridge était l’accessoire de soutien émotionnel du PC — petit, décoratif et silencieusement submergé par la réalité.

Ce qu’il contrôlait, concrètement

  • Contrôleur mémoire : timings, arbitrage des canaux et ordonnancement lecture/écriture vers la DRAM.
  • Interconnexion CPU : le front-side bus (FSB) sur de nombreuses architectures Intel ; HyperTransport sur AMD se connectait différemment mais jouait des rôles « à la northbridge ».
  • Graphismes : AGP puis les premiers PCIe graphiques terminaient souvent au northbridge.
  • Pont vers les E/S « lentes » : une interface hub vers le southbridge, qui exposait ensuite SATA/USB/PCI, etc.

Comment il a disparu : chronologie de l’intégration

Le northbridge ne s’est pas éteint lors d’un lancement spectaculaire. Il a été absorbé fonctionnalité par fonctionnalité, poussé par la physique et l’économie : traces plus courtes, latence réduite,
moins de broches et moins de puces à valider. Vous pouvez appeler ça « intégration ». Moi j’appelle ça « déplacer le périmètre d’impact ».

Faits intéressants et contexte historique (court, concret)

  1. Le FSB était un bus partagé sur de nombreuses plates-formes Intel : plusieurs agents se battaient pour la bande passante, et la latence augmentait mal avec plus de cœurs.
  2. AMD a avancé sur le contrôle mémoire avec K8 (Athlon 64 / Opteron) : le contrôleur mémoire intégré a rendu la latence DRAM nettement meilleure.
  3. Intel a suivi avec Nehalem (ère Core i7), en déplaçant le contrôleur mémoire on-die et en abandonnant le FSB classique pour QPI sur de nombreux modèles haut de gamme.
  4. « Northbridge » est devenu « uncore » dans le vocabulaire Intel : le contrôleur mémoire, les tranches LLC et l’interconnexion vivaient en dehors des cœurs mais à l’intérieur du package CPU.
  5. Le Platform Controller Hub (PCH) a consolidé ce qui était autrefois le southbridge plus quelques logiques; le « chipset » est devenu essentiellement I/O et politique.
  6. DMI est devenu le nouveau point d’étranglement sur de nombreuses plates-formes Intel mainstream : un seul uplink reliant le PCH au CPU pour SATA, USB, NICs et le « PCIe du chipset ».
  7. PCIe est entré dans le CPU pour les lanes principales : GPU et NVMe haut débit se connectent souvent directement au CPU, contournant l’uplink du chipset.
  8. NUMA a cessé d’être exotique une fois que les serveurs multi-socket puis les designs en chiplet ont fait de « l’endroit où la mémoire vit » une variable de performance de premier ordre.
  9. Les fabrics on-die sont devenus le nouveau northbridge : le ring/mesh d’Intel et l’Infinity Fabric d’AMD sont désormais les autoroutes internes que vous ne pouvez pas toucher mais que vous devez respecter.

Pourquoi l’industrie l’a fait (et pourquoi vous ne pouvez pas revenir en arrière)

Si vous gérez des systèmes en production, la raison n’est pas « parce que c’est cool ». L’intégration réduit la latence aller-retour et la consommation d’énergie. Chaque saut hors puce
coûte de l’énergie. Chaque broche coûte de l’argent. Chaque longue piste sur une carte mère est une antenne et un casse-tête de timing.

Cela déplace aussi la responsabilité. Avec un northbridge externe, le fabricant de la carte mère pouvait choisir un chipset, ajuster le support mémoire, et parfois masquer des défauts derrière
un buffering agressif. Avec le contrôleur mémoire on-die, le fournisseur du CPU contrôle davantage l’histoire du timing. Bien pour la cohérence. Mauvais quand vous essayez de
raisonner sur des failures avec des instincts de 2006.

Ce qui l’a remplacé : PCH, DMI et fabrics on-die

Aujourd’hui, « chipset » signifie souvent « PCH » (Intel) ou un hub I/O équivalent sur d’autres plates-formes. Ce n’est plus le chef de la circulation pour la mémoire. C’est la réceptionniste : elle achemine
vos appels USB, prend les messages pour le SATA, et propose parfois des lanes PCIe supplémentaires — à la merci de l’uplink vers le CPU.

Le nouveau schéma bloc, traduit en modes de panne

Pensez à la plate-forme moderne comme ceci :

  • Package CPU : cœurs, caches, contrôleur mémoire intégré, et une portion de lanes PCIe (souvent les plus rapides).
  • Interconnexion on-die : ring/mesh/fabric connectant cœurs, LLC, contrôleurs mémoire et root complexes PCIe.
  • PCH/chipset : SATA, USB, audio, interfaces de management, et « PCIe supplémentaires » (généralement plus lents et partagés).
  • Uplink entre CPU et PCH : DMI (Intel) ou équivalent ; effectivement un lien de type PCIe avec un budget de bande passante fini.

C’est ici que les ingénieurs se font avoir : un périphérique peut être « PCIe x4 Gen3 » sur le papier mais se trouver en réalité derrière l’uplink du chipset. Cela signifie qu’il
concurrence tous les autres périphériques connectés au chipset : les disques SATA, les NIC embarqués, les contrôleurs USB, parfois même des emplacements NVMe supplémentaires. Le northbridge
était autrefois une grande fête partagée aussi — mais maintenant la fête est divisée : certains invités sont VIP connectés directement au CPU, d’autres coincés dans le couloir derrière DMI.

L’intégration n’a pas supprimé la complexité ; elle l’a enterrée

Sur le papier, c’est plus simple : moins de puces. En production, vous avez remplacé un northbridge visible par des fabrics internes invisibles et des politiques firmware :
états d’alimentation, PCIe ASPM, entraînement mémoire (memory training) et bifurcation des lanes. Si vous diagnostiquez des pics de latence, vous négociez désormais avec du microcode et de l’ACPI,
pas avec une puce discrète que vous pouvez pointer du doigt.

Une citation à garder sur votre écran :

« L’espoir n’est pas une stratégie. » — General Gordon R. Sullivan

Pourquoi cela compte en 2026

Parce que les goulots d’étranglement que vous observez dans les systèmes réels correspondent rarement à la fiche marketing. L’intégration a changé où la contention se produit et ce que « proche »
signifie. Votre tableau de monitoring peut afficher une latence disque élevée, alors que le vrai problème est des transactions PCIe mises en file derrière un uplink de chipset saturé — ou un package CPU
bridant parce que l’« uncore » est limité en énergie.

Ce qui a changé pour le travail sur la performance

  • La latence mémoire dépend désormais du CPU : le temps d’accès DRAM dépend du contrôleur mémoire du CPU et du comportement du fabric interne, pas seulement des spécifications DIMM.
  • La topologie PCIe compte à nouveau : « Quel emplacement ? » n’est pas une question de débutant ; c’est une question de cause racine.
  • NUMA est partout : même les systèmes mono-socket peuvent se comporter comme NUMA à cause des chiplets et des multiples contrôleurs mémoire.
  • La gestion d’énergie est une caractéristique de performance : états C, états P, limites du package et scaling de fréquence de l’uncore peuvent rendre la latence instable.

Ce qui a changé pour la fiabilité

Moins de puces signifie moins de joints de soudure, certes. Mais quand quelque chose casse, ça casse « à l’intérieur du package CPU », ce qui n’est pas réparable sur site.
De plus, le firmware participe désormais à la correction. Les bugs d’entraînement mémoire et les problèmes de lien PCIe peuvent ressembler à du matériel instable. Parfois, ils le sont.

Blague n°2 : Rien ne forge le caractère comme déboguer des problèmes « matériels » qui disparaissent après une mise à jour du BIOS — soudainement votre silicium a appris les bonnes manières.

Playbook de diagnostic rapide

Quand la performance chute ou que la latence pique, vous n’avez pas le temps de devenir archéologue. Vous avez besoin d’un ordre de vérifications premier/deuxième/troisième répétable qui vous dise rapidement
si vous êtes face à un CPU, mémoire, topologie PCIe, stockage ou un choke de l’uplink chipset.

Premier : prouver où se situe l’attente (CPU vs I/O vs mémoire)

  • Vérifier la saturation CPU et la run queue. Si la charge est élevée mais l’utilisation CPU faible, vous pouvez être limité par l’I/O-wait ou bloqué sur la mémoire.
  • Vérifier la latence disque et les profondeurs de file. Si la latence est élevée mais l’utilisation du périphérique faible, le goulot peut être en amont (PCIe/DMI) ou en aval (verrous du système de fichiers).
  • Contrôler la pression mémoire. Le swap simulera un « problème de stockage » alors que le vrai problème est une RAM insuffisante ou un cache parti en cacahuète.

Second : valider la topologie (qui se connecte où)

  • Cartographier les chemins PCIe. Confirmez si le périphérique « rapide » est attaché au CPU ou au chipset.
  • Confirmer vitesse et largeur du lien négociés. Un périphérique fonctionnant en x1 ou Gen1 vous ruine la journée en silence.
  • Vérifier la localité NUMA. L’accès mémoire distant ou des interruptions assignées au mauvais nœud augmenteront la latence.

Troisième : vérifier la politique d’alimentation et le firmware

  • Comportement de fréquence CPU. La latence en pic peut corréler avec une économie d’énergie agressive ou un downclock de l’uncore.
  • Gestion d’énergie PCIe. ASPM peut ajouter de la latence sur certaines plates-formes ; le désactiver est un outil, pas une religion.
  • Paramètres BIOS. Bifurcation des lanes, Above 4G decoding, SR-IOV et interleaving mémoire peuvent changer les résultats drastiquement.

Tâches pratiques : commandes, sorties et décisions

Voici les tâches que je lance réellement quand j’essaie de répondre : « Où est passé le northbridge, et que fait-il à ma charge ? »
Chaque tâche inclut une commande, une sortie d’exemple, ce que cela signifie et la décision que vous prenez.

Task 1: Identify CPU model and basic topology

cr0x@server:~$ lscpu
Architecture:                         x86_64
CPU(s):                               32
Thread(s) per core:                   2
Core(s) per socket:                   16
Socket(s):                            1
NUMA node(s):                         1
Vendor ID:                            GenuineIntel
Model name:                           Intel(R) Xeon(R) CPU
CPU MHz:                              1200.000
L3 cache:                             30 MiB

Ce que cela signifie : Vous apprenez si vous avez plusieurs sockets/nœuds NUMA et si le CPU est en train de tourner à faible fréquence maintenant.

Décision : Si NUMA nodes > 1, prévoyez de vérifier la localité des processus et des IRQ. Si CPU MHz est bas sous charge, vérifiez le governor et les limites du package.

Task 2: Check current CPU frequency governor (latency vs power trade)

cr0x@server:~$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
powersave

Ce que cela signifie : « powersave » peut convenir pour des charges orientées débit, mais il est souvent hostile aux latences de queue.

Décision : Pour des systèmes sensibles à la latence, envisagez « performance » ou des réglages plateforme-spécifiques. Validez avec des benchmarks ; ne faites pas de cargo-culting.

Task 3: Quick check for I/O wait and run queue

cr0x@server:~$ vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 412312  81216 921344    0    0    12    40  510  980 12  4 81  3  0
 5  1      0 401120  81216 920512    0    0    20   300  720 1200 10  5 60 25  0

Ce que cela signifie : Une augmentation de wa indique du temps d’attente sur l’I/O. Une montée de r avec us bas peut signifier des threads exécutables bloqués ailleurs.

Décision : Si wa est constamment élevé, pivotez vers les vérifications stockage/PCIe. Si si/so sont non nuls, vous swappez et devez traiter cela en priorité.

Task 4: See which block devices exist and their scheduler

cr0x@server:~$ lsblk -o NAME,MODEL,TRAN,TYPE,SIZE,MOUNTPOINT
NAME        MODEL            TRAN TYPE  SIZE MOUNTPOINT
nvme0n1     Samsung SSD      nvme disk  3.5T
├─nvme0n1p1                  part  512M /boot
└─nvme0n1p2                  part  3.5T /
sda         ST4000NM000A     sas  disk  3.6T

Ce que cela signifie : Vous distinguez NVMe (probablement PCIe) de SATA/SAS (possiblement derrière un HBA, potentiellement derrière le chipset).

Décision : Pour le chemin « rapide », concentrez-vous sur le placement NVMe et le chemin PCIe. Pour des baies HDD, focalisez-vous sur le lien HBA et le comportement des files.

Task 5: Measure per-device latency and utilization

cr0x@server:~$ iostat -x 1 3
Device            r/s     w/s   rkB/s   wkB/s  await  svctm  %util
nvme0n1         220.0   180.0  28000   24000   2.10   0.20  12.0
sda              10.0    80.0    640    8200  45.00   2.10  80.0

Ce que cela signifie : await est la latence bout en bout. Un %util élevé avec un await élevé indique une saturation du périphérique. Un %util faible avec un await élevé suggère une contention en amont.

Décision : Si NVMe affiche un await élevé mais un %util faible, suspectez un problème de lien PCIe, d’interruptions ou de contention derrière l’uplink du chipset.

Task 6: Confirm NVMe health and error counters

cr0x@server:~$ sudo nvme smart-log /dev/nvme0
SMART/Health Information (NVMe Log 0x02)
critical_warning                    : 0x00
temperature                         : 41 C
available_spare                     : 100%
percentage_used                     : 3%
media_errors                        : 0
num_err_log_entries                 : 0

Ce que cela signifie : C’est votre vérification de sanity : si vous voyez des erreurs média ou beaucoup d’entrées de log d’erreur, arrêtez de blâmer « la plate-forme ».

Décision : Périphérique sain ? Montez dans la pile vers la topologie et le chemin kernel. Périphérique malade ? Planifiez un remplacement et réduisez l’amplification d’écriture.

Task 7: Map PCIe devices and look for negotiated link width/speed

cr0x@server:~$ sudo lspci -nn | grep -E "Non-Volatile|Ethernet|RAID|SATA"
17:00.0 Non-Volatile memory controller [0108]: Samsung Electronics Co Ltd NVMe SSD Controller [144d:a808]
3b:00.0 Ethernet controller [0200]: Intel Corporation Ethernet Controller [8086:10fb]
00:1f.2 SATA controller [0106]: Intel Corporation SATA Controller [8086:2822]

Ce que cela signifie : Vous identifiez les périphériques qui vous intéressent et leurs adresses PCI pour des inspections plus approfondies.

Décision : Interrogez ensuite chaque adresse pour l’état du lien. Si le lien est dégradé, vous avez trouvé une coupable fumante.

Task 8: Read PCIe link status (speed/width) for a device

cr0x@server:~$ sudo lspci -s 17:00.0 -vv | grep -E "LnkCap:|LnkSta:"
LnkCap: Port #0, Speed 16GT/s, Width x4
LnkSta: Speed 8GT/s (downgraded), Width x2 (downgraded)

Ce que cela signifie : Le périphérique est capable de Gen4 x4 mais fonctionne en Gen3 x2. Ce n’est pas « un peu plus lent ». C’est un plafond dur.

Décision : Reseat, changez d’emplacement, vérifiez la bifurcation BIOS, examinez les risers, et inspectez le partage de lanes avec d’autres emplacements.

Task 9: Visualize PCIe topology to see whether a device sits behind the chipset

cr0x@server:~$ sudo lspci -t
-[0000:00]-+-00.0
           +-01.0-[0000:17]----00.0
           +-1c.0-[0000:3b]----00.0
           \-1f.0

Ce que cela signifie : Les bridges et root ports vous montrent l’arborescence. Certains root ports sont attachés au CPU ; d’autres pendent du PCH selon la plate-forme.

Décision : Si votre NVMe pend d’un chemin qui partage l’uplink avec plusieurs périphériques, attendez-vous à de la contention ; placez les périphériques critiques sur les lanes CPU en priorité.

Task 10: Check kernel logs for PCIe and NVMe link errors

cr0x@server:~$ sudo dmesg -T | grep -E "AER|pcie|nvme" | tail -n 8
[Tue Jan  9 10:12:01 2026] pcieport 0000:00:01.0: AER: Corrected error received: id=00e0
[Tue Jan  9 10:12:01 2026] nvme 0000:17:00.0: PCIe bus error: severity=Corrected, type=Physical Layer
[Tue Jan  9 10:12:01 2026] nvme 0000:17:00.0: AER: [ 0] RxErr

Ce que cela signifie : Les erreurs corrigées restent des erreurs. Les problèmes de couche physique pointent souvent vers l’intégrité du signal : slot, riser, carte mère ou alimentation.

Décision : Traitez les erreurs corrigées répétées comme un problème de fiabilité. Planifiez une maintenance pour reseater/déplacer le matériel et envisagez de forcer une vitesse Gen inférieure si nécessaire.

Task 11: Inspect NUMA layout and memory locality

cr0x@server:~$ numactl --hardware
available: 1 nodes (0)
node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
node 0 size: 128709 MB
node 0 free: 41212 MB

Ce que cela signifie : Ici nœud unique, donc le NUMA classique n’est pas le coupable. Sur les systèmes multi-nœuds, cette sortie vous dit où se trouve la mémoire et combien est libre.

Décision : Si plusieurs nœuds existent, épinglez les workloads et les interruptions pour éviter le trafic mémoire distant, ou assurez-vous que l’application est NUMA-aware.

Task 12: Find which CPUs are handling interrupts for NVMe or NIC

cr0x@server:~$ grep -E "nvme|ixgbe|mlx|enp" /proc/interrupts | head
 98:          0          0          0      81234   PCI-MSI 524288-edge      nvme0q0
 99:          0          0          0      40112   PCI-MSI 524289-edge      nvme0q1
100:          0          0          0      39998   PCI-MSI 524290-edge      nvme0q2

Ce que cela signifie : Si toutes les interruptions tombent sur un seul CPU, vous avez construit un générateur de latence. Surveillez aussi l’activité « 0 » : cela peut indiquer un chemin mort.

Décision : Si la répartition est biaisée, configurez l’affinité IRQ (ou corrigez la politique irqbalance) pour que les queues se répartissent sur des cœurs proches du périphérique.

Task 13: Verify storage queue depth behavior (NVMe)

cr0x@server:~$ cat /sys/block/nvme0n1/queue/nr_requests
1023

Ce que cela signifie : Ce n’est pas « performance ». C’est la concurrence potentielle. Trop bas peut bottlenecker le débit ; trop haut peut gonfler la latence sous contention.

Décision : Pour des charges sensibles à la latence, évitez d’augmenter les queues aveuglément. Tondez selon la latence tail mesurée, pas selon l’intuition.

Task 14: Check whether your “fast” filesystem is actually blocked by flushes

cr0x@server:~$ sudo blktrace -d /dev/nvme0n1 -o - | blkparse -i - | head -n 6
  8,0    0        1     0.000000000  1234  Q  WS 0 + 8 [postgres]
  8,0    0        2     0.000120000  1234  G  WS 0 + 8 [postgres]
  8,0    0        3     0.000300000  1234  D  WS 0 + 8 [postgres]
  8,0    0        4     0.001900000  1234  C  WS 0 + 8 [0]
  8,0    0        5     0.002000000  1234  Q  F  0 + 0 [postgres]
  8,0    0        6     0.004800000  1234  C  F  0 + 0 [0]

Ce que cela signifie : Vous pouvez voir les flushes (F) et les motifs de write sync (WS) qui peuvent sérialiser la performance indépendamment de la bande passante PCIe brute.

Décision : Si des tempêtes de flushs coïncident avec la latence, ajustez les paramètres de durabilité de l’application, les options de montage du système de fichiers, ou utilisez un pattern WAL/commit aligné avec le périphérique.

Trois mini-récits d’entreprises issus du terrain

Mini-récit 1 : L’incident causé par une hypothèse erronée

Une entreprise de taille moyenne exécutait des jobs d’analytics sur deux serveurs de rack « identiques ». Même modèle CPU, même taille RAM, même modèle NVMe, même version du noyau. Un serveur
manquait systématiquement sa fenêtre de batch et provoquait un embouteillage en aval. L’équipe a fait la danse habituelle : blâmer le job, blâmer les données, blâmer l’ordonnanceur.
Puis ils ont blâmé le stockage parce que les graphiques étaient rouges et que le stockage est toujours coupable par association.

Ils ont échangé les NVMe entre les machines. Le lent est resté lent. C’était le premier point de donnée utile : ce n’était pas le SSD. Ensuite, quelqu’un a remarqué que le NVMe sur l’hôte lent
avait négocié PCIe Gen3 x2, alors que l’autre tournait en Gen4 x4. Même disque, chemin différent. Il s’est avéré que la configuration « identique » avait une version de riser différente parce que les achats
« avaient trouvé un équivalent moins cher ».

L’hypothèse erronée était que PCIe est comme l’Ethernet : on le branche et on obtient la vitesse payée. PCIe est plus comme une conversation dans un bar bruyant ; si l’intégrité du signal est marginale,
le lien se dégrade vers quelque chose de stable et personne ne vous demande votre avis.

La solution fut ennuyeuse : standardiser le SKU du riser, mettre à jour le BIOS vers une version avec un meilleur link training, et ajouter un script de validation au démarrage qui échoue l’hôte
si des périphériques critiques sont downtrainés. La fenêtre de batch est revenue immédiatement. Le postmortem fut sans détour : « identique » est une promesse que vous devez vérifier, pas une étiquette.

Mini-récit 2 : L’optimisation qui s’est retournée contre eux

Une autre organisation faisait tourner une API à faible latence soutenue par NVMe local. Ils cherchaient le p99 et ont décidé « d’optimiser » en poussant plus de concurrence I/O :
files plus profondes, plus de threads worker, plus gros batchs. Le débit a augmenté dans les tests synthétiques. En production, le p99 a empiré, puis le p999 est devenu une horreur.

La plate-forme était moderne : NVMe attaché au CPU, plein de lanes, pas d’évident goulot DMI. Le problème était à l’intérieur du package CPU : scaling de fréquence de l’uncore et politique d’énergie.
Avec la concurrence accrue, le système passait plus de temps en état haut-débit mais déclenchait aussi des pauses périodiques pendant que le package CPU gérait la thermique et l’énergie. La distribution de latence
a développé une longue queue.

Pire, ils avaient épinglé leurs threads workers les plus chargés à un sous-ensemble de cœurs pour la localité cache. Idée louable. Mais les interruptions pour les queues NVMe arrivaient sur un autre ensemble de cœurs,
forçant du trafic inter-cœur et augmentant la contention sur l’interconnect interne. Ils avaient recréé un petit problème de northbridge à l’intérieur du CPU : trop d’agents concourant pour les mêmes chemins internes.

La correction n’était pas « annuler l’optimisation ». C’était optimiser comme un adulte : ajuster les profondeurs de file pour correspondre au SLO de latence, aligner l’affinité IRQ avec l’épinglage CPU,
et choisir des objectifs de débit qui n’ouvrent pas des falaises de throttling énergétique. Ils ont obtenu un débit de pointe légèrement inférieur mais une latence tail bien meilleure.
La victoire n’était pas un chiffre plus élevé ; c’était moins de clients en colère.

Mini-récit 3 : La pratique ennuyeuse mais correcte qui a sauvé la mise

Une entreprise financière-ish (noms masqués parce que les avocats ont des hobbies) exploitait des workloads mixtes sur une flotte de stations de travail réutilisées comme agents de build.
Elles n’étaient pas glamours. Elles n’étaient pas non plus uniformes : différents modèles de cartes mères, différentes révisions de chipset, différents agencements d’emplacements PCIe. Un terrain idéal pour la confusion « northbridge disparu ».

L’équipe avait une pratique ennuyeuse : au moment du provisioning, ils capturaient une empreinte matérielle incluant les largeurs de lien PCIe, la topologie NUMA et les chemins des périphériques de stockage.
Ils la stockaient dans leur CMDB et la diferenciaient à chaque démarrage. Si une machine déviait — lien downtrainé, périphérique manquant, topologie inattendue — elle était mise en quarantaine.

Une semaine, un lot d’agents a commencé à échouer des builds de manière intermittente avec des symptômes de corruption système de fichiers. Les logs étaient confus. Les périphériques de stockage paraissaient sains. Mais
la diff d’empreinte a signalé des erreurs PCIe corrigées répétées et une renégociation de la vitesse du lien après des redémarrages à chaud. Les machines ont été retirées du service avant que les pannes ne se propagent.
Le coupable : un rail PSU marginal provoquant de l’instabilité PCIe sous des pics de charge.

Rien d’héroïque ne s’est passé. Pas de patch kernel astucieux. La pratique ennuyeuse a fait le travail : détecter la dérive, mettre en quarantaine tôt, et garder la flotte prévisible. Voilà à quoi ressemble la fiabilité quand elle fonctionne : sans histoire.

Erreurs courantes (symptôme → cause racine → correctif)

L’intégration a supprimé le northbridge en tant que composant nommé, pas en tant que concept. Le concept — ressources partagées et arbitrage — s’est simplement déplacé. Voici les pièges que je vois
réapparaître dans les revues d’incidents.

1) NVMe plus lent que le SATA « d’une façon ou d’une autre »

Symptôme : NVMe affiche un débit inférieur à l’attendu ; la latence pique sous charge modérée.

Cause racine : lien PCIe downtrainé (x1/x2, Gen1/Gen2) ou périphérique placé derrière l’uplink du chipset en compétition avec d’autres E/S.

Correctif : Vérifier LnkSta, déplacer le périphérique vers un slot attaché au CPU, reseater/remplacer le riser, ajuster la bifurcation BIOS, envisager de forcer une vitesse Gen stable.

2) « Latence stockage » qui est en réalité un comportement du package CPU

Symptôme : pics de latence I/O corrélés à des événements d’énergie CPU ; le débit est correct mais p99/p999 dégradés.

Cause racine : downclock de l’uncore, états C du package, ou throttling thermique/énergétique affectant le fabric interne et le contrôleur mémoire.

Correctif : Ajuster le governor, revoir les paramètres BIOS d’énergie, améliorer le refroidissement, et valider avec des tests de charge contrôlés.

3) Erreurs I/O aléatoires sous charge, puis « tout va bien » après reboot

Symptôme : erreurs PCIe corrigées, timeouts occasionnels, resets ; disparaît après reseat ou reboot.

Cause racine : problèmes d’intégrité du signal : slot marginal, riser, câble ou alimentation ; parfois bugs d’entraînement firmware.

Correctif : Collecter les logs AER, remplacer les composants suspects, mettre à jour le BIOS, et éviter de faire passer des périphériques critiques par des risers douteux.

4) Système multi-socket sous-performe par rapport aux attentes mono-socket

Symptôme : plus de cœurs n’aide pas ; performance pire que sur une machine plus petite.

Cause racine : effets NUMA : allocations mémoire et interruptions traversant les sockets ; trafic mémoire distant saturant l’interconnect.

Correctif : Utiliser des allocations conscientes du NUMA, épingler les workloads aux nœuds, aligner l’affinité IRQ, et placer les périphériques PCIe près des CPU consommateurs.

5) « Nous avons ajouté un second NVMe et tout ralentit »

Symptôme : Ajouter des périphériques réduit la performance de chaque périphérique ; stalls intermittents.

Cause racine : lanes PCIe partagées, mauvaise configuration de bifurcation, ou saturation de l’uplink partagé (chipset/DMI ou root port partagé).

Correctif : Cartographier la topologie, assurer des root ports indépendants pour les périphériques haut-débit, et éviter d’accumuler des lanes PCIe du chipset pour des baies de stockage.

6) Débit réseau qui s’effondre quand le stockage est occupé

Symptôme : le NIC perd du débit lors d’I/O disque lourd ; le CPU n’est pas saturé.

Cause racine : NIC et stockage derrière le même uplink chipset, ou gestion d’interruptions concurrente sur les mêmes cœurs.

Correctif : Placer le NIC sur des lanes CPU si possible, séparer les affinités, et vérifier la distribution des IRQ et la configuration des queues.

Listes de contrôle / plan étape par étape

Checklist A : Lors de l’achat ou de la construction de systèmes (prévenir les surprises de topologie)

  1. Exiger un diagramme de topologie PCIe du fournisseur (ou le dériver) et marquer quels emplacements sont attachés au CPU vs au chipset.
  2. Réserver des lanes CPU pour vos périphériques les plus précieux : NVMe primaire, NIC haut-débit, GPU/accélérateur.
  3. Supposer que l’uplink chipset est un budget partagé ; éviter d’empiler des E/S « critiques » derrière lui.
  4. Standardiser les risers et backplanes ; traitez-les comme des composants de performance, pas comme des accessoires.
  5. Établir une validation au démarrage : échouer le provisioning si des liens sont downtrainés ou si des périphériques apparaissent sur des bus inattendus.

Checklist B : Lorsqu’une performance régresse après un changement

  1. Capturer le statut des liens PCIe « avant/après » (lspci -vv) pour les périphériques critiques.
  2. Capturer le comportement de fréquence CPU sous charge (governor + MHz observés).
  3. Capturer la latence I/O et l’utilisation (iostat -x) et comparer à la baseline.
  4. Vérifier les logs kernel pour AER et resets de périphériques.
  5. Valider le placement NUMA des processus et des IRQ.

Checklist C : Quand vous suspectez une contention sur l’uplink chipset

  1. Lister tous les périphériques probablement derrière le chipset : SATA, contrôleurs USB, NIC embarqués, slots M.2 supplémentaires.
  2. Déplacer le périphérique le plus exigeant vers un slot attaché au CPU si possible.
  3. Désactiver temporairement les périphériques non essentiels dans le BIOS pour voir si la performance revient (test d’isolation rapide).
  4. Re-tester débit et latence ; si cela s’améliore, vous avez de la contention, pas un « SSD défectueux ».

FAQ

1) Le northbridge a-t-il vraiment « disparu », ou est-ce juste renommé ?

Fonctionnellement, il a été scindé et absorbé. Le contrôleur mémoire et les root complexes PCIe primaires sont passés dans le package CPU ; le hub I/O restant est devenu le PCH.
Le rôle du « northbridge » existe toujours, mais c’est désormais des fabrics internes plus des contrôleurs on-die.

2) Pourquoi est-ce important que le NVMe soit attaché au CPU ou au chipset ?

Parce que les périphériques attachés au chipset partagent un uplink vers le CPU. Sous charge, ils peuvent être en concurrence avec SATA, USB et parfois le trafic NIC embarqué.
Les périphériques attachés au CPU ont un accès plus direct et généralement une latence plus basse et plus stable.

3) Le DMI est-il le nouveau goulot northbridge ?

Sur de nombreuses plates-formes Intel mainstream, oui : c’est le point d’étranglement pour tout ce qui pend du PCH. Ce n’est pas toujours le goulot, mais c’est un cas fréquent.
Traitez-le comme une ressource finie que l’on peut saturer.

4) Si le PCIe est intégré dans le CPU, pourquoi vois-je encore des lanes PCIe du chipset ?

Le CPU a un nombre limité de lanes. Les lanes du chipset existent pour fournir plus de connectivité à moindre coût, mais elles sont généralement derrière l’uplink et partagent la bande passante.
Idéal pour les cartes Wi‑Fi et contrôleurs USB supplémentaires. Risqué pour les matrices de stockage critiques en performance.

5) Une mise à jour BIOS peut-elle réellement changer la performance à ce point ?

Oui, car le BIOS/firmware gouverne le memory training, le link training PCIe, les valeurs par défaut des politiques d’énergie et parfois le microcode.
Il peut corriger des downtrainings, réduire les erreurs corrigées, ou changer le comportement de boost — parfois pour le mieux, parfois pour une « surprise ».

6) Dois-je toujours désactiver ASPM et l’économie d’énergie pour la performance ?

Non. Faites-le comme expérience contrôlée lors du diagnostic de pics de latence. Si cela aide, vous saurez où la sensibilité se situe.
Ensuite, décidez si le coût énergétique est acceptable pour votre SLO.

7) Quel est le lien avec l’ingénierie du stockage spécifiquement ?

La performance stockage est souvent limitée par le chemin jusqu’au périphérique, pas par le NAND. L’intégration a changé le chemin : topologie PCIe, comportement du package CPU et routage des interruptions peuvent dominer.
Si vous ne benchmarkez que le disque, vous benchmarquez le mauvais système.

8) Quel est le moyen le plus rapide pour détecter un problème de « mauvais slot » ?

Vérifier la largeur et la vitesse du lien négociées avec lspci -vv et comparer à ce que vous attendez. Si vous voyez « downgraded », arrêtez et corrigez cela avant de tuner le logiciel.

9) La disparition du northbridge rend-elle les PC globalement plus fiables ?

Moins de puces et des traces plus courtes aident. Mais plus de comportements ont migré dans le firmware et la logique du package CPU, ce qui crée de nouveaux modes de défaillance : problèmes d’entraînement,
interactions politiques d’énergie et surprises de topologie. La fiabilité s’est améliorée, la diagnostiquabilité est devenue plus étrange.

Conclusion : prochaines étapes applicables dès demain

Le northbridge n’a pas disparu ; il s’est déplacé à l’intérieur du CPU et s’est transformé en politiques, fabrics et uplinks. Si vous continuez à diagnostiquer la performance comme s’il y avait
un chef de la circulation discret sur la carte mère, vous continuerez à chasser des fantômes.

Prochaines étapes pratiques :

  1. Baseliner votre topologie : enregistrez lspci -t et lspci -vv pour les périphériques critiques sur des hôtes sains.
  2. Rendre la dérive visible : alerter sur les liens PCIe downtrainés et les erreurs AER corrigées récurrentes.
  3. Séparer les I/O critiques : placer les NVMe et NICs top-tier sur les lanes CPU ; traiter l’uplink chipset comme partagé et fragile.
  4. Tuner pour les SLO, pas le pic : la profondeur de file et la concurrence peuvent acheter du débit et vendre votre latence tail.
  5. Écrire le runbook : utilisez l’ordre de diagnostic rapide — type d’attente, topologie, puis énergie/firmware — pour que votre équipe arrête de deviner sous pression.
← Précédent
PL1, PL2 et Tau expliqués : les trois chiffres qui décident de tout
Suivant →
volblocksize ZFS : le réglage de stockage VM qui détermine les IOPS et la latence

Laisser un commentaire