Rechercher

29.4. Aperçu d'une demande d'interruption

download PDF

Une demande d'interruption ou IRQ est un signal d'attention immédiate envoyé par un matériel à un processeur. Chaque périphérique d'un système se voit attribuer un ou plusieurs numéros d'IRQ qui lui permettent d'envoyer des interruptions uniques. Lorsque les interruptions sont activées, un processeur qui reçoit une demande d'interruption interrompt immédiatement l'exécution de l'application en cours afin de répondre à la demande d'interruption.

Étant donné que les interruptions interrompent le fonctionnement normal, des taux d'interruption élevés peuvent gravement dégrader les performances du système. Il est possible de réduire le temps pris par les interruptions en configurant l'affinité d'interruption ou en envoyant un certain nombre d'interruptions de moindre priorité dans un lot (coalescence d'un certain nombre d'interruptions).

Les demandes d'interruption sont associées à une propriété d'affinité, smp_affinity, qui définit les processeurs qui traitent la demande d'interruption. Pour améliorer les performances de l'application, attribuez l'affinité d'interruption et l'affinité de processus au même processeur ou aux processeurs du même cœur. Cela permet aux threads d'interruption et d'application spécifiés de partager des lignes de cache.

Sur les systèmes qui prennent en charge le pilotage des interruptions, la modification de la propriété smp_affinity d'une demande d'interruption configure le matériel de telle sorte que la décision de gérer une interruption avec un processeur particulier est prise au niveau du matériel, sans intervention du noyau.

29.4.1. Équilibrer les interruptions manuellement

Si votre BIOS exporte sa topologie NUMA, le service irqbalance peut automatiquement servir les demandes d'interruption sur le nœud local du matériel demandant le service.

Procédure

  1. Vérifiez quels appareils correspondent aux demandes d'interruption que vous souhaitez configurer.
  2. Recherchez les spécifications matérielles de votre plate-forme. Vérifiez si le chipset de votre système prend en charge la distribution des interruptions.

    1. Si c'est le cas, vous pouvez configurer la distribution des interruptions comme décrit dans les étapes suivantes. En outre, vérifiez l'algorithme utilisé par votre chipset pour équilibrer les interruptions. Certains BIOS disposent d'options permettant de configurer l'acheminement des interruptions.
    2. Si ce n'est pas le cas, votre chipset achemine toujours toutes les interruptions vers une seule unité centrale statique. Vous ne pouvez pas configurer l'unité centrale utilisée.
  3. Vérifiez le mode APIC (Advanced Programmable Interrupt Controller) utilisé sur votre système :

    $ journalctl --dmesg | grep APIC

    Here,

    • Si votre système utilise un mode autre que flat, vous pouvez voir une ligne similaire à Setting APIC routing to physical flat.
    • Si vous ne voyez aucun message de ce type, votre système utilise le mode flat.

      Si votre système utilise le mode x2apic, vous pouvez le désactiver en ajoutant l'option nox2apic à la ligne de commande du noyau dans la configuration bootloader.

      Seul le mode plat non physique (flat) permet de distribuer les interruptions à plusieurs CPU. Ce mode n'est disponible que pour les systèmes comportant jusqu'à 8 CPU.

  4. Calculez le smp_affinity mask. Pour plus d'informations sur la manière de calculer le smp_affinity mask, voir Définition du masque d'affinité smp_affinity.

Ressources supplémentaires

  • journalctl(1) et taskset(1) pages de manuel

29.4.2. Définition du masque d'affinité smp_affinity

La valeur smp_affinity est stockée sous la forme d'un masque de bits hexadécimaux représentant tous les processeurs du système. Chaque bit configure un processeur différent. Le bit le moins significatif correspond à l'unité centrale 0.

La valeur par défaut du masque est f, ce qui signifie qu'une demande d'interruption peut être traitée par n'importe quel processeur du système. La valeur 1 signifie que seul le processeur 0 peut gérer l'interruption.

Procédure

  1. En binaire, utilisez la valeur 1 pour les unités centrales qui gèrent les interruptions. Par exemple, pour configurer l'unité centrale 0 et l'unité centrale 7 afin qu'elles gèrent les interruptions, utilisez 0000000010000001 comme code binaire :

    Tableau 29.1. Bits binaires pour les CPU

    UNITÉ CENTRALE

    15

    14

    13

    12

    11

    10

    9

    8

    7

    6

    5

    4

    3

    2

    1

    0

    Binaire

    0

    0

    0

    0

    0

    0

    0

    0

    1

    0

    0

    0

    0

    0

    0

    1

  2. Convertir le code binaire en hexadécimal :

    Par exemple, pour convertir le code binaire en utilisant Python :

    >>> hex(int('0000000010000001', 2))
    
    '0x81'

    Sur les systèmes comportant plus de 32 processeurs, vous devez délimiter les valeurs smp_affinity pour des groupes discrets de 32 bits. Par exemple, si vous souhaitez que seuls les 32 premiers processeurs d'un système à 64 processeurs répondent à une demande d'interruption, utilisez 0xffffffff,00000000.

  3. La valeur d'affinité d'interruption pour une demande d'interruption particulière est stockée dans le fichier /proc/irq/irq_number/smp_affinity associé. Définissez le masque smp_affinity dans ce fichier :

    # echo mask > /proc/irq/irq_number/smp_affinity

Ressources supplémentaires

  • journalctl(1), irqbalance(1), et taskset(1) pages de manuel
Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.