BigAdmin System Administration Portal
Article de fond
Print-friendly VersionPrint-friendly Version

Appréhender la taille de charge utile (payload) maximale PCI Express sur OpenSolaris

Alan Adamson, décembre 2008

La performance maximale pouvant être observée avec une structure PCI Express (PCIe) dépend grandement de l'efficacité du protocole. Le rapport entre la charge utile, l'en-tête et les autres symboles de temps système détermine l'écart de la performance par rapport au maximum théorique. En augmentant la quantité de données de la charge utile, on pourra se rapprocher plus près de la limite de la bande passante.

Par défaut, les périphériques PCIe ne sont pas autorisés à créer des charges utiles supérieures à 128 octets. Il s'agit de la charge utile maximale du périphérique (maximum payload size : MPS). La spécification PCIe exige que chaque périphérique, dès sa mise sous tension, soit en mesure de créer et de recevoir des charges utiles ne dépassant pas 128 octets. La MPS de chaque périphérique est un paramètre réglable avec un logiciel qui, sans modification, restera de 128 octets.

Même si la spécification PCIe permet aux périphériques de supporter des charges utiles aussi volumineuses que 4096 octets, elle ne l'exige pas. Les tailles maximales valides de la charge utile sont de 128, 256, 512, 1024, 2048 et 4096 octets. Les tailles maximales de la charge utile de chaque périphérique sont exportées via la registre des capacités de chaque périphérique.

OpenSolaris a été modifié pour régler la MPS de chaque périphérique automatiquement en commençant par Nevada Build 99 (et cette modification est prévue dans la prochaine mise à jour de Solaris). Le SE doit "comprendre" les capacités de chaque périphérique avant d'augmenter la MPS. Au démarrage du système d'exploitation, chaque périphérique de chaque structure subit une analyse de ses capacités de charge utile. Cela inclut les extrémités et les périphériques de port du commutateur, ainsi que le complexe de la racine. Lorsque tous les périphériques ont été analysés, la taille de la charge utile qui est supportable par chaque dispositif est programmée dans le registre des capacités de chaque périphérique.

Configuration PCI Express appropriée

Comme indiqué précédemment, une charge utile supportable par tous les périphériques de la structure est utilisée. Par exemple, cela signifie qu'un périphérique de stockage haute performance, pouvant supporter une charge utile de 4096 octets, sera limité s'il est installé sur le même système qu'un périphérique basse performance, comme un pont USB qui supporte une charge utile de seulement 128 octets. Dans cet exemple, le périphérique de stockage haute performance se verra attribué une MPS de 128 octets et non une valeur plus élevée. Les systèmes doivent être configurés de sorte que les périphériques basse performance ne partagent pas la même structure que ceux de haute performance.

Enfichage à chaud

Si un périphérique PCIe Express est enfiché à chaud sur une structure active, les capacités de ce périphérique n'ont pas été prises en compte lors de la programmation de la MPS dans la structure. Si les capacités MPS du périphérique sont supérieures ou égales à celles qui ont été programmées dans la structure, le périphérique utilisera la même MPS que le reste de la structure. Si les capacités MPS du périphérique sont moindres que celles du reste de la structure, une autre configuration devra être effectuée pour éviter que le périphérique ne reçoive une charge utile trop volumineuse pour le périphérique.

Si la MPS d'un périphérique ne peut pas prendre en charge celle du reste de la structure, sa MPS sera définie sur la valeur la plus élevée qu'il supporte. Dans le cas d'écritures initiées par ce périphérique, les charges utiles des écritures ne dépasseront pas la MPS du périphérique, qui sera inférieure à celle du reste de la structure (et par conséquent supportable). Dans le cas des lectures, la charge utile de complétion de lecture est créée par le complexe de racine et sa taille est dictée par la MPS du complexe de racine. Dans ce cas d'enfichage à chaud, la charge utile (payload) de complétion de lecture risque d'être trop volumineuse pour être reçue par le périphérique enfiché à chaud. Vous pouvez résoudre facilement ce problème en n'émettant jamais de lecture pour plus de données que la MPS du périphérique.

Par défaut, la lecture la plus volumineuse effectuée par un périphérique est de 512 octets. Cela peut être modifié en programmant le paramètre de configuration taille maximale de la requête de lecture (Maximum Read Request Size, MRRS). Lorsque la MRRS du périphérique est égale à la MPS du périphérique, cela empêche que le complexe de racine ne génère des charges utiles (payload) de complétion de lecture plus volumineuse que la MPS du périphérique. Si la taille de chaque lecture est limitée, cela peut avoir pour effet secondaire une réduction de la performance de lecture du périphérique enfiché à chaud, jusqu'à ce qu'OpenSolaris soit réinitialisé.

Conclusion

Lorsque les structures PCI Express sont correctement configurées, OpenSolaris est apte à augmenter l'efficacité du protocole PCIe et à en améliorer les performances. Sur certaines configurations, il a été observé que la bande passante PCIe en lecture et en écriture s'améliore de 10 à 15 % juste en augmentant la taille de la charge utile. Les personnes en charge de la configuration du système doivent prendre en compte les capacités de la charge utile des périphériques comme un des facteurs de performance lors de la configuration de chaque structure.

Pour en savoir plus

Voici quelques ressources supplémentaires :

À propos de l'auteur

Alan Adamson est un ingénieur logiciel du groupe systèmes de Sun.

BigAdmin
  
 
BigAdmin Upgrade Hub