Linux ekibi, çekirdek tabanlı Sanal Makine kodundaki “komik” bir hatayı düzeltmek için orta düzey bir Linux 6.13-rc3 yayınladı — Phoronix raporlarıCPUID güncellemelerinin Sapphire Rapids CPU’larda işlenmesi gerekenden çok daha uzun sürüyor ve bu da çok daha eski Skylake CPU’ların CPUID maliyeti açısından 4 kata kadar daha hızlı olmasına neden oluyor.
Phoronix, Google mühendislerinin bu teknik sorunu ilk olarak Sapphire Rapids’in iç içe sanal makinelerde CPUID bilgilerini işleme biçiminde keşfettiğini ortaya koyuyor. Google’dan Sean Christopherson özellikle şunu belirtiyor: “Intel’in Emerald Rapids’inde, CPUID *çılgınca* pahalı; öyle ki, XSAVE ofsetlerinin ve boyutlarının yeniden hesaplanması, iç içe VM-Enter ve VM-Çıkış gecikmesinde 4 kat artışa neden oluyor (iç içe geçişler, xstate_required_size() işlevini geçiş başına birden çok kez tetikleyebilir) ), önbelleğe alınmış değerlerin kullanılmasıyla ilgili olarak, iç içe geçişler tetiklenirken “perf top” çalıştırıldığında sorun kolayca görülebilir: kvm_update_cpuid_runtime() muazzam bir %50 oranında görünüyor…”
Bu performans hatası/gerilemesinin Linux 6.14’e kadar çözülmeyeceği iddia ediliyor, ancak sorun Linux geliştiricilerinin giden Linux 6.13 çekirdeğini geçici olarak düzeltmesine yetecek kadar ciddi. 6.13-rc3 Güncellemesi, Sapphire Rapid CPU’lardaki CPUID verilerini önbelleğe alarak bu süreci hızlandırır. Tam düzeltmenin Linux 6.14 uygulaması, VM-Enter ve VM-Exit’te yer alan tüm CPUID’lerin tamamen silinmesine neden olacaktır.
Bilmeyenler için CPUID, yazılımın üzerinde çalıştığı işlemcinin ayrıntılarını keşfetmesini sağlayan bir talimattır. Sapphire Rapids’de, CPUID talimatı yoluyla CPU bilgilerini okuyan yazılım, çok daha eski Skylake CPU’lara göre 4 kata kadar daha uzun sürer. Bu yalnızca iç içe geçmiş sanallaştırma geçişlerinde meydana gelir ve bu yalnızca bir VM, bir VM içinde çalıştığında gerçekleşir.
Linux 6.13-rc3 çeşitli diğer hata/gerileme düzeltmeleriyle birlikte gelir. Ancak pahalı CPUID işlemeye yönelik önbelleğe alma çözümü, çekirdeğe yönelik en kritik güncellemelerden biri gibi görünüyor. Tekrar belirtmek isterim ki, bu önbelleğe alma tekniği yalnızca bir geçici çözümdür ve Linux 6.14’te bu soruna yönelik tam düzeltmeler sağlanmıştır.