Le 28/11/2012 14:16, Aurélien a écrit :
>
> Allez, câdo, drop in /etc/network/if-up.d et chmod +x, et ifdown/ifup
> une des cartes. Y'a sûrement mieux à faire, mais ça marche bien pour
> moi. Le mieux que j'ai trouvé c'est 3 cartes réseaux intel 8 files en
> LAG LACP pour 24 coeurs sur mon matériel. La regex est sûrement à
> tuner.
>
> #!/bin/bash
>
> # This script balances the interrupts statically.
>
> # It only touches the interrupts specified by this regular expressions
> (grepped in /proc/interrupts)
> # Only active interrupts will be grepped, so please re-run the script
> on post-up.
>
> NETWORK_INTERRUPTS=' (gbe|bnx|eth|igb)[0-9]+(-TxRx)?-[0-7]$'
>
> # Balance the interrupts on all the cores, in round-robin fashion.
> total_cores=$(cat /proc/cpuinfo | grep '^processor' | wc -l)
> interrupts=$(cat /proc/interrupts | egrep "${NETWORK_INTERRUPTS}" |
> awk -F: "{ print \$1 }" | tr '\n' ' ')
>
> let current_core=0;
> for irq in ${interrupts};
> do
>         affinity="$(printf "%08x" $((1 << ($current_core % $total_cores))))"
>         # echo "IRQ #${irq} will have affinity to ${affinity}"
>         echo "${affinity}" > "/proc/irq/${irq}/smp_affinity"
>         let current_core=$(($current_core+1))
> done
>
Petit retour sur le script, déjà merci, j'avais déjà vu passer des infos
à ce sujet mais je ne m'étais pas encore penché sur cette optimisation.

Pour ma part sur une Debian avec kernel 3.4.19 la regexp ne marche pas.
Voilà ce que j'ai dans le interrupts pour eth0 par exemple

         CPU0               CPU1
307:  116542899          0  xen-pirq-msi-x     eth0-rx-0
308:   98413431          0  xen-pirq-msi-x     eth0-rx-1
309:  160018027          0  xen-pirq-msi-x     eth0-tx-0
310:   88439060          0  xen-pirq-msi-x     eth0-tx-1

J'ai modifié la regexp comme cela (gbe|bnx|eth|igb)[0-9]+-(tx|rx)-[0-7]$

Par contre avant d'appliquer la modification j'ai trouvé une valeur à 3
dans le /proc/irq/(307-310)/smp_affinity

La machine est un xeon 4 core 8 en HT qui héberge du xen où j'ai
spécialement réservé 2 core pour l'hyperviseur. Du coup la valeur 3
m'interpelle un peu sachant que cela devrait être 1 ou 2 comme le
confirme d'ailleurs /proc/irq/307/smp_affinity_list 1-2

Par contre une fois les modifications appliquées j'ai
/proc/irq/(307-310)/smp_affinity_list à 0 ou 1
/proc/irq/(307-310)/smp_affinity à 1 ou 2

Depuis que j'ai fait la modification j'ai bien le cpu1 qui bosse pour
les irq donnés
307:  116646799          0  xen-pirq-msi-x     eth0-rx-0
308:   98452617      46945  xen-pirq-msi-x     eth0-rx-1
309:  160194164          0  xen-pirq-msi-x     eth0-tx-0
310:   88450878      16109  xen-pirq-msi-x     eth0-tx-1


Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Liste de diffusion du FRsAG
http://www.frsag.org/

Répondre à