Présentation de l'accès NUMA (Non-uniform Memory Access)

MicrosoftSQL Server est compatible avec la technologie NUMA (Non-Uniform Memory Access) et fonctionne correctement avec l'accès NUMA matériel sans configuration particulière. À mesure que la vitesse et le nombre de processeurs augmentent, il devient de plus en plus difficile de réduire le temps de réponse de la mémoire requis pour exploiter cette puissance de traitement supplémentaire. Pour contourner ce problème, les fournisseurs de matériel proposent des caches L3 de grande capacité, mais cette solution présente des limites. Face à ce problème, l'architecture NUMA (Non-Uniform Memory Access) offre une solution évolutive. SQL Server a été conçu pour tirer parti des ordinateurs reposant sur la technologie NUMA sans qu'il soit nécessaire d'apporter des modifications aux applications.

Concepts NUMA

La tendance veut que le matériel dispose de plusieurs bus système, chacun au service d'un petit ensemble de processeurs. Chaque groupe de processeurs dispose de sa propre mémoire et, éventuellement, de ses propres canaux d'E/S. Toutefois, chaque unité centrale peut accéder à la mémoire associée aux autres groupes, et ce de façon cohérente. Chaque groupe est appelé nœud NUMA. Le nombre d'unités centrales par nœud NUMA varie en fonction des caractéristiques du matériel. Il est plus rapide d'accéder à la mémoire locale qu'à la mémoire associée aux autres nœuds NUMA. D'où le nom d'architecture NUMA, Non-Uniform Memory Access, c'est-à-dire, accès mémoire non uniforme.

Dans l'accès NUMA matériel, certaines zones de mémoire résident sur des bus physiquement différents de ceux des autres zones. Étant donné que NUMA utilise de la mémoire locale et distante, l'accès à certaines zones de mémoire nécessite plus de temps que pour d'autres zones. Les termes mémoire locale et mémoire distante sont généralement employés en référence à un thread en cours d'exécution. La mémoire locale est généralement assimilée à la mémoire qui réside sur le nœud où l'UC exécute le thread. La mémoire distante désigne la mémoire qui n'appartient pas au nœud sur lequel le thread est en cours d'exécution. La mémoire étrangère est également appelée mémoire distante. Le rapport du coût d'accès à la mémoire distante via la mémoire locale est appelé rapport NUMA. Si ce rapport est égal à 1, il s'agit d'une architecture SMP (Symmetric Multiprocessing). Plus ce rapport est élevé, plus le coût d'accès à la mémoire des autres nœuds est important. Les applications Windows non compatibles avec la technologie NUMA (y compris SQL Server 2000 SP3 et versions antérieures) offrent parfois des performances médiocres avec l'accès NUMA matériel.

L'évolutivité constitue le principal avantage de l'accès NUMA. L'architecture NUMA a été conçue pour outrepasser les limites de l'architecture SMP (Symmetric Multiprocessing) en termes d'évolutivité. Avec la technologie SMP, tous les accès mémoire sont transmis au même bus de mémoire partagé. Si ce système fonctionne correctement avec un nombre relativement restreint d'UC, les problèmes liés au bus partagé se manifestent quand des dizaines, voire des centaines d'UC rivalisent pour accéder au bus de mémoire partagé. NUMA atténue ces engorgements en limitant le nombre d'UC par bus de mémoire et en reliant les différents nœuds au moyen d'une interconnexion très rapide.

Nœud NUMA avec 4 processeurs

Différences entre l'accès NUMA matériel et soft-Numa

NUMA peut mettre en correspondance la mémoire avec les UC via des matériels spécialisés (matériels NUMA) ou via la configuration de la mémoire (soft-NUMA) SQL Server. Au démarrage, SQL Server se configure automatiquement en fonction du système d'exploitation sous-jacent et de la configuration matérielle ou du paramétrage soft-NUMA. Aussi bien pour le matériel NUMA que pour soft-NUMA, quand SQL Server démarre dans une configuration NUMA, le journal SQL Server enregistre un message de configuration multimode pour chaque nœud, en même temps que le masque de l'UC.

Matériels NUMA

Les ordinateurs équipés de matériels NUMA possèdent plusieurs bus système, chacun au service d'un petit ensemble de processeurs. Chaque groupe de processeurs possède sa propre mémoire et, éventuellement, ses propres canaux d'E/S, mais chaque UC peut accéder à la mémoire associée aux autres groupes d'une façon cohérente. Chaque groupe est appelé nœud NUMA. Le nombre d'unités centrales par nœud NUMA varie en fonction des caractéristiques du matériel. Le constructeur de votre matériel est à même de vous dire si votre ordinateur prend en charge les matériels NUMA.

Si vous possédez un matériel NUMA, il peut être configuré de façon à utiliser la mémoire entrelacée au lieu de l'accès NUMA. Dans ce cas, Windows, et de ce fait SQL Server, ne le reconnaît pas comme NUMA. Exécutez la requête suivante pour trouver le nombre de nœuds mémoire disponibles pour SQL Server :

SELECT DISTINCT memory_node_id
FROM sys.dm_os_memory_clerks

Si SQL Server retourne un seul nœud mémoire (nœud 0), soit vous ne possédez pas de matériel NUMA, soit le matériel est configuré comme entrelacé (non-NUMA). Si vous pensez que votre matériel NUMA n'est pas configuré correctement, contactez le fournisseur du matériel pour activer NUMA. SQL Server ignore la configuration NUMA si le matériel NUMA possède quatre UC au plus et qu'au moins un nœud possède une seule UC.

Soft-NUMA

SQL Server permet de regrouper les UC en nœuds auxquels il est fait référence en tant que soft-NUMA. Généralement, vous configurez soft-NUMA quand vous avez plusieurs UC et aucun matériel NUMA, mais vous pouvez également utiliser soft-NUMA pour subdiviser les nœuds des matériels NUMA en groupes plus petits. Seuls le planificateur SQL Server et l'interface réseau SQL Server sont compatibles soft-NUMA. Les nœuds de mémoire sont créés en fonction du matériel NUMA et, par conséquent, ne sont pas affectés par soft-NUMA. Ainsi, si votre ordinateur SMP est équipé de huit UC et que vous créez quatre nœuds soft-NUMA ayant chacun deux UC, vous n'aurez qu'un seul nœud de mémoire desservant les quatre nœuds NUMA. Soft-NUMA ne fournit pas de mémoire à l'affinité de l'UC.

La réduction des E/S et des goulots d'étranglement des écritures différées sur les ordinateurs équipés de nombreuses UC mais sans matériel NUMA constitue l'un des avantages de soft-NUMA. Il existe un seul thread d'E/S et un seul thread d'écriture différée pour chaque nœud de mémoire. Selon l'utilisation de la base de données, ces threads uniques peuvent constituer un important goulet d'étranglement des performances. La configuration de quatre nœuds NUMA fournit quatre threads d'E/S et quatre threads d'écriture différée, ce qui peut accroître les performances.

Il n'est pas possible de créer un soft-NUMA incluant des UC provenant de différents nœuds NUMA matériels. Par exemple, si votre matériel possède huit UC (numérotées de 0 à 7) et que vous avez deux nœuds NUMA matériels (0-3 et 4-7), alors vous pouvez créer soft-NUMA en associant UC(0,1) et UC(2,3). Il n'est pas possible de créer soft-NUMA utilisant UC (1,5), mais vous pouvez utiliser l'affinité de l'UC pour définir l'affinité d'une instance de SQL Server avec les UC de différents nœuds NUMA. Ainsi dans l'exemple ci-dessus, si SQL Server utilise les UC de 0 à 3, vous n'aurez qu'un seul thread d'E/S et un seul thread d'écriture différée. Si, dans ce même exemple, SQL Server utilise les UC 1, 2, 5 et 6, vous pouvez alors accéder aux deux nœuds NUMA et vous disposerez de deux thread d'E/S et de deux threads d'écriture différée.

[!REMARQUE]

Certaines configurations matérielles partagent des ressources communes comme le cache L3/L4. Les processeurs peuvent être regroupés autour de ces ressources partagées afin de créer des nœuds soft-NUMA.

Pour plus d'informations, consultez Procédure : configurer SQL Serveur pour utiliser soft-NUMA.