Priorités des threads Hyper-V entre l'hôte et l'invité - comment correspondent-elles ?

Oui, question amusante.

Contexte : Un hôte pour les machines virtuelles Hyper-V. Un cluster de type HPC.

Il y a un certain nombre de machines virtuelles dessus. Elles n’utilisent pas le CPU la plupart du temps. Nous avons également un cluster de type HPC en interne - les agents récupèrent des tâches et les traitent.

Il est question d’installer l’agent sur nos machines Hyper-V. Pour le moment, cela nous donnerait un gain de performance significatif - ce ne sera pas avant l’été que nous augmenterons vraiment le matériel pour le cluster de calcul.

Les agents exécutent tous les calculs dans des threads de basse priorité. Pour les ordinateurs normaux, cela signifie que l’agent maximise essentiellement l’utilisation du CPU mais n’interfère pas vraiment avec le fonctionnement de l’ordinateur en soi - je peux même regarder un DVD pendant que l’agent fonctionne.

Maintenant, comment cela se passe-t-il avec Hyper-V ? Quelle « priorité de thread » le noyau Hyper-V donne-t-il aux CPU virtuels ? La partition racine a-t-elle une priorité plus élevée que les machines virtuelles ? Je ne veux pas que les agents interfèrent avec les machines virtuelles en cours d’exécution.

La partition parent Hyper-V, ou OS de gestion, est spéciale au sein de l’hyperviseur. Si ses processeurs virtuels sont exécutables, ils obtiennent un grand boost de priorité par rapport aux VM invitées. C’est parce que, dans une configuration Hyper-V supportée, la seule chose que l’OS de gestion fait (statistiquement parlant) est des E/S pour le compte des VM invitées. Si vous installez quoi que ce soit d’autre dans l’OS de gestion, vous allez préempter le travail effectué pour le compte des VM invitées.

Je suppose que cela vous a déjà traversé l’esprit, mais vous pourriez faire cela de la manière supportée. Créez une VM qui est essentiellement de la même taille que la machine physique. Donnez-lui des poids CPU et mémoire très bas et activez la mémoire dynamique pour que, en veille, elle n’utilise pas beaucoup de mémoire. Exécutez votre tâche de calcul dans cette VM. Hyper-V préférera alors effectuer le travail pour n’importe quel autre invité plutôt que celui-ci, mais utilisera les cycles inactifs pour le compte de votre tâche de calcul.