Hyper-Threading et htop / Surveillance du système

Je lance un grand ensemble de simulations sur quad-core Xenon E5520 avec inclus Hyper-Threading. Mon logiciel détermine automatiquement 8 (Virtuel) nuclei et lance 8 Simulations pour un fonctionnement parallèle. mais htop et system-monitor montrer que chacun des 8 Les cœurs sont chargés par ~ 50%.

Est-ce présumé comportement? En quelque sorte, il est logique, car la charge globale sera 400% ou 100% Pour chaque noyau physique, mais devrais-je en avoir un peu plus? Je veux dire que c'est un objectif HT, droit? Utilisation SMT, Utiliser des blocs non utilisés autrement pour commencer un autre flux. Alors, la bande passante devrait être plus élevée?

Je dois noter que la charge est très stable, 50% Sur chaque noyau, tout le temps. La modélisation est effectuée Java, une JVM, GC Pas un problème, je suis beaucoup plus bas que la limite du tas JVM. La modélisation n'est pas liée à la mémoire, il existe de nombreuses possibilités et aucun remplacement. La simulation écrit beaucoup de données sur le disque, mais il y a de gros tampons (Enregistrement tampon 128 MB pour chaque courant), et activité de disque comme indiqué gkrellm, - Ce sont des éclats fréquents ~ 90 Mb / C, mais ce n'est pas une charge permanente, et je ne peux pas croire que cela pourrait être un goulot d'étranglement.

Quelqu'un peut-il faire la lumière dessus?
Invité:

Catherine

Confirmation de:

mais htop et system-monitor montrer que chacun des 8 Les cœurs sont chargés par ~ 50%.

Eh bien, cela signifie simplement que vous ne courez pas assez de simulations en même temps. Il existe de nombreux éléments qui peuvent conduire à la modélisation sans utiliser le noyau sur 100%. Ou vous les corrigez, ou simplement ajouter plus de simulations.

Mais devrais-je en avoir un peu plus?

Vous devez être capable d'obtenir 100% Sur chaque noyau.

Maintenant, si vous lisez la moitié de la connaissance de Khaledda ... C'est vrai:

Hyper-Threading Cela signifie que les deux noyaux n'ont pas tout, c'est vrai, donc les cœurs, par exemple, ne peuvent pas effectuer certaines opérations en même temps.

Cependant, malheureusement pour lui, pour OS- Ce n'est pas apparemment. Les facteurs de la "charge" de la CPU sont basés sur le "que% du temps occupé par le noyau dans le planificateur de système d'exploitation". Ainsi, si le noyau de la CPU avait une tâche active 400 Msek par seconde, il est occupé 40%.

Ressources épuisantes Hyper-Threading (celles. Le noyau virtuel devrait attendre la ressource) Cela signifie simplement que le noyau virtuel nécessite plus de temps pour effectuer l'opération, mais il n'est pas visible pour le planificateur de système d'exploitation. Si le noyau dépense 100 Ms pour l'attente intérieure, la tâche prendra 500 MS à la place 400 m / s. Il est assez difficile d'essayer de découvrir lorsque vous avez rencontré un manque de ressources, et ce n'est pas ce que le système d'exploitation peut faire (celles. C'est ici que vous exécutez un code spécial et comparez le temps d'exécution pour voir qu'il faut plus de temps que = Hyper-threading "mal". Si la CPU ne transmettra pas les statistiques d'utilisation interne détaillée, vous pouvez grand dire au revoir à toute performance pour commencer - C'est un chemin trop de données.

En conséquence, le deuxième noyau n'ajoutera simplement pas 100% Performance - Par conséquent, si quelque chose occupe 100 MS sur un noyau, avec hyperpottitude et 2 Les noyaux peuvent être nécessaires 75, mais non 50. Cependant, cela dépend fortement du code.

Dans votre cas, je commencerais d'un flux et découvrez si vous pouvez apporter un noyau à 100%. Sinon, il suffit simplement d'attendre quelque chose - C'est un problème avec le débordement de la pile, s'il existe du tout (Le programme doit être changé). Si c'est vrai (Introduction, enregistrement / Lecture de disque), Il peut être juste nécessaire de courir plus 1 Simulation sur chaque noyau.

Pour répondre aux questions, connectez-vous ou registre