2011-04-08 3 views
3

Je travaille sur une architecture NUMA, où chaque nœud de calcul a 2 sockets et 4 cœurs par socket, pour un total de 8 cœurs par nœud de calcul, et 24 Go de RAM par nœud. Je dois prouver que le réglage processor affinity peut avoir un impact significatif sur les performances.Impact de l'affinité du processeur de benchmark

Avez-vous un programme à suggérer que je pourrais utiliser comme référence pour montrer la différence d'impact entre l'utilisation de l'affinité processeur ou non? Je pourrais aussi écrire un simple programme de test C, en utilisant MPI, ou OpenMP, ou pthreads, mais quelle opération serait la meilleure pour faire ce test? Ce doit être quelque chose qui tirerait avantage de la localisation du cache, mais qui déclencherait aussi le changement de contexte (opérations de blocage), de sorte que le processus pourrait potentiellement migrer vers un autre noyau, ou pire, vers un autre socket. Il doit fonctionner sur un multiple de 8 cœurs.

Répondre

0

Vous pouvez simplement utiliser un processus monothread simple qui écrit puis lit de façon répétée un ensemble de données modeste. Le processus doit durer beaucoup plus longtemps qu'une seule tranche de temps, évidemment, et assez longtemps pour que les processus puissent migrer d'un noyau vers un autre, par ex. 100 secondes.

Vous pouvez ensuite exécuter deux cas de test:

  1. exécution 8 instances du processus sans affinité CPU

    $ for p in 0 1 2 3 4 5 6 7 ; do time ./my_process & ; done

  2. terme 8 instances du processus avec une affinité CPU

    $ for p in 0 1 2 3 4 5 6 7 ; do time taskset -c $p ./my_process & ; done

+0

Mais dans ce cas, qu'est-ce qui entraînerait la migration des processus vers un autre core? Il y a des chances raisonnables que si OS prend le contrôle d'un noyau, alors le processus continuera son exécution du même noyau quand il reprend le contrôle, même sans définir d'affinité. –

+0

@Charles: ceci est juste basé sur des observations empiriques - J'ai fait des tests simlar et j'ai vu des différences significatives avec/sans affinité CPU. Je peux seulement deviner que les différents processus d'arrière-plan qui s'exécutent sur un système typique sont responsables du déclenchement de la migration d'un noyau à l'autre. –

3

J'ai essayé d'écrire un programme qui compare l'asymétrie de la latence de la mémoire sur l'architecture NUMA, et avec l'aide de la communauté StackOverflow, j'ai réussi. Vous pouvez obtenir le programme à partir de mon message StackOverflow.

Measuring NUMA (Non-Uniform Memory Access). No observable asymmetry. Why?

Quand je lance mon programme de référence sur le matériel très semblable à la vôtre, je vois sur une pénalité de performance de 30% quand un noyau est en train de lire/écrire à la mémoire qui ne sont pas dans le nœud NUMA du noyau (région de affinité). Le programme doit lire et écrire dans un motif qui détruit délibérément la mise en cache et la pré-lecture, sinon il n'y a pas d'asymétrie observable.

+0

+1 sur ce point. Compte tenu des spécifications que vous avez (2 sockets, 24 Go), il semble que vous ayez le même type de système que celui de cette question. – Mysticial