Команда Linux опубликовала промежуточную версию Linux 6.13-rc3 для исправления «уморительной» ошибки в коде виртуальной машины на базе ядра, сообщает Phoronix. Обновления CPUID обрабатываются на процессорах Sapphire Rapids значительно дольше, чем должны, в результате чего гораздо более старые процессоры Skylake работают в 4 раза быстрее в отношении стоимости CPUID.
Phoronix сообщает, что инженеры Google первоначально обнаружили эту техническую проблему в том, как Sapphire Rapids обрабатывает информацию CPUID во вложенных виртуальных машинах. В частности, Шон Кристоферсон (Sean Christopherson) из Google утверждает: «На Emerald Rapids от Intel, CPUID является *дико* дорогим, до такой степени, что повторное вычисление смещений и размеров XSAVE приводит к 4-кратному увеличению задержки при вложенных VM-Enter и VM-Exit (вложенные переходы могут вызывать xstate_required_size() несколько раз за переход), по сравнению с использованием кэшированных значений. Эту проблему легко заметить, запустив perf top при запуске вложенных переходов: kvm_update_cpuid_runtime() показывает, что его время выполнения достигает огромных 50 %...»
Предположительно, эта ошибка/регресс производительности не будет исправлена до Linux 6.14, но проблема достаточно серьезная, чтобы разработчики Linux временно исправили выходящее ядро Linux 6.13. Обновление 6.13-rc3 кэширует данные CPUID на процессорах Sapphire Rapid, ускоряя этот процесс. Реализация полного исправления в Linux 6.14 приведет к тому, что все CPUID, вложенные в VM-Enter и VM-Exit, будут полностью удалены.
Для тех, кто не в курсе, CPUID - это инструкция, позволяющая программному обеспечению узнать подробности о процессоре, на котором оно работает. На Sapphire Rapids программа считывает информацию о процессоре через инструкцию CPUID в 4 раза дольше, чем на более старых процессорах Skylake. Это происходит только во вложенных переходах виртуализации, которые происходят только тогда, когда ВМ работает внутри ВМ.
Linux 6.13-rc3 поставляется с различными другими исправлениями ошибок и регрессий. Однако обходной путь кэширования для дорогостоящей обработки CPUID представляется одним из наиболее важных обновлений ядра. Опять же, эта техника кэширования - всего лишь обходной путь, а в Linux 6.14 эта проблема полностью решена.
Оригинал
УНикальность