Bonjour à tous,
je rencontre actuellement un soucis concernant un tir de performance, je m'explique :
La machine que j'ai actuellement (AIX 5.3 TL12) est d'origine configurée ainsi :
-0,4 EC
-1 VCPU
- Mode SMT2
-2 CPU logique
-mode Uncapped
Lors des test je m'aperçois que ça ne va pas du tout et que c'est trop lent, je ragarde les courbes NMON, et je vois que la CPU travaille beaucoup, elle dépasse même la CPU garantie qui lui a été allouée, (monte à 1,2 EC constamment), je me dit OK il faudra en rajouter, puis je jette un coup à la runqueue, là je vois 70-80 thread en attente de cycle CPU, il est clair qu'il faut pas chercher midi à 14h....
D'après ce que j'ai pu voir, chaque runqueue par processeur peut prendre en charge maxi 5 threads, ce qui nous fait donc ici 5X2=10 threads au mieux, il est évident que cela est largement insuffisant pour 70-80 threads.
Je me dis donc qu'il faut rajouter de la CPU, et de la VCPU, donc je passe de 0,4EC à 1,4EC, ce qui me fait en vcpu max 14 (10x entitlement il me semble ?)
et ce qui ferait pas conséquent 14X2 = 28 cpus logiques et donc théoriquement prendre en charge 28X5= 140 threads (vous me dites si je me trompe ?)
La runqueue étant saturée à 80% je me dis que je vais mettre 12 VCPU pour 120 threads de gérable, or quand je refait les tests, je m'aperçois que sur les 12 vcpus de configurés seul 4 travaillent, et la runqueue est toujours à 70 threads en attente, comment est-ce possible ? Pourquoi le kernel ne dispatche pas le travaille sur les autres VCPUs ?
Ma théorie serait qu'un thread s'accapare tout le temps CPU, mais il serait en attente de quelque chose qui n'arrive jamais, ce qui fait que les autres threads s'accumulent en entendant que leurs tours, dès lors peut-on se dire que l'appli qui à générer ce thread est mal écrit ?
Merci pour vos réponses.
Partager