Znalezienie interesujących poprawek do jądra Linuksa (a także do innych projektów open source!) przez dużą grupę inżynierów open source firmy Intel to niemal codzienność. Najnowszym moim radarem jest zezwolenie sterownikowi „intel_idle” Linuksa na działanie wewnątrz gości maszyny wirtualnej (VM).
Wybitny inżynier Intel Linux, Arjan van de Ven, opublikował zestaw poprawek umożliwiających obsługę sterowników intel_idle dla maszyn wirtualnych. Te poprawki w połączeniu z nadchodzącymi poprawkami wsparcia C0.2 powinny zapewnić niezły wzrost wydajności maszynom wirtualnym, szczególnie w przypadku tych, które są intensywnie wykorzystywane we/wy.
Arjan wyjaśnił z łaty:
intel_idle udostępnia platformę cpuidle stany bezczynności procesora (w celu oszczędzania energii w stanie bezczynności) w oparciu o tabele per-cpu połączone z ograniczonym wyliczaniem sprzętu. Ta kombinacja cpuidle i intel_idle zapewnia dynamiczne zachowanie, w którym oszczędzanie energii i wpływ na wydajność są dynamicznie równoważone, a w sysfs dostępny jest zestaw ogólnych pokręteł, aby użytkownicy mogli dostroić heurystykę (i uzyskać statystyki itp.)
Jednak intel_idle obecnie nie obsługuje działanie wewnątrz gości VM, a jądro Linuksa powraca do trybu bezczynności opartego na ACPI (jeśli jest obsługiwane przez hiperwizor/wirtualny bios) lub po prostu domyślną metodę bezczynności opartą na rezerwie x86 „hlt”… która została wprowadzona w serii jądra 1.2… i brakuje mu całego dynamicznego zachowania, kontroli użytkownika i statystyk, które zapewnia cpuidle.
Chociaż jest to oczywiście funkcjonalne, nie jest świetne i możemy zrobić lepiej dla użytkownika, podłączając intel_idle do struktury cpuidle również w przypadku „w gościu”. I nie tylko nie jest świetny dla użytkownika, ale także nie jest optymalny i brakuje mu dwóch kluczowych funkcji obsługiwanych przez gołą metalową obudowę:
1) Możliwość przepłukiwania TLB przez bardzo długie okresy bezczynności, aby uniknąć kosztowne (i duże opóźnienia) wybudzenie IPI później bezczynnego vCPU, gdy proces, który wcześniej działał na bezczynnym vCPU, wykonuje munmap lub podobną operację. Unikanie IPI o dużym opóźnieniu pomaga uniknąć wahań wydajności.
2) Możliwość korzystania z nowego stanu bezczynności Intel C0.2 zamiast odpytywania przez bardzo krótkie okresy bezczynności w celu oszczędzania energii (i śladu węglowego)Ta seria poprawek dodaje podstawową obsługę uruchamiania gościa maszyny wirtualnej do sterownika intel_idle, a następnie zajmuje się pierwszym z tych niedociągnięć. Luka C0.2 zostanie naprawiona małą dodatkową łatką po oddzielnym połączeniu obsługi C0.2.
Świetna robota i będzie interesująca do przetestowania, gdy łatki obsługujące C0.2 zostaną udostępnione również gotowy do korzystania z najnowszych serwerów Intel Xeon Scalable.