C’est presque un événement quotidien de trouver des correctifs intéressants pour le noyau Linux (et pour d’autres projets open source aussi !) par la grande cabale d’ingénieurs open source d’Intel. Le dernier passage sur mon radar est d’autoriser le pilote Linux”intel_idle”à s’exécuter à l’intérieur des invités de la machine virtuelle (VM).
Arjan van de Ven, éminent ingénieur Intel Linux, a publié un ensemble de correctifs permettant la prise en charge du pilote intel_idle pour les machines virtuelles. Ces correctifs associés aux prochains correctifs de prise en charge de C0.2 devraient fournir une belle amélioration des performances des machines virtuelles, en particulier autour de celles qui subissent une utilisation intensive des E/S.
Arjan expliqué avec les correctifs :
intel_idle fournit les états d’inactivité du processeur (pour économiser de l’énergie en cas d’inactivité) au framework cpuidle, sur la base de tables par processeur combinées à une énumération matérielle limitée. Cette combinaison de cpuidle et intel_idle fournit un comportement dynamique où l’économie d’énergie et l’impact sur les performances sont équilibrés dynamiquement et où un ensemble de boutons génériques est fourni dans sysfs pour que les utilisateurs puissent régler l’heuristique (et obtenir des statistiques, etc.)
Cependant, intel_idle ne fonctionne pas actuellement prend en charge l’exécution à l’intérieur des invités VM, et le noyau Linux revient soit à l’inactif basé sur l’ACPI (si pris en charge par l’hyperviseur/le bios virtuel) ou simplement à la méthode d’inactivité basée sur”hlt”x86 par défaut… qui a été introduite dans la série de noyaux 1.2… et n’a pas tout le comportement dynamique, le contrôle de l’utilisateur et les statistiques que cpuidle apporte.
Bien que cela soit évidemment fonctionnel, ce n’est pas génial et nous pouvons faire mieux pour l’utilisateur en connectant intel_idle au framework cpuidle également pour le cas”in a guest”. Et non seulement pas génial pour l’utilisateur, il n’est pas non plus optimal et manque de deux fonctionnalités clés qui sont prises en charge par le boîtier en métal nu:
1) La possibilité de vider le TLB pendant de très longues périodes d’inactivité, pour éviter un réveil IPI coûteux (et à latence élevée) plus tard, d’un vCPU inactif lorsqu’un processus qui s’exécutait sur le vCPU inactif effectue un munmap ou une opération similaire. Éviter les IPI à latence élevée permet d’éviter la gigue des performances.
2) La possibilité d’utiliser le nouvel état d’inactivité Intel C0.2 au lieu d’interroger pendant des périodes d’inactivité de très courte durée pour économiser de l’énergie (et de l’empreinte carbone)Cette série de correctifs ajoute la prise en charge de base pour exécuter dans un invité VM au pilote intel_idle, puis corrige le premier de ces défauts. L’écart C0.2 sera corrigé avec un petit correctif supplémentaire après la fusion séparée du support C0.2.
Excellent travail et sera intéressant à tester une fois que les correctifs de support C0.2 seront également prêt à bénéficier des derniers serveurs Intel Xeon Scalable.