deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak Hacker News – Front Page (native)

Asahi Linux, Apple Silicon'a gerçek CPU idle desteği getirmek için UEFI tabanlı PSCI conduit planlıyor

Asahi Linux'ın Linux 7.2 ilerleme raporu; PSCI güç yönetimi için bir UEFI Runtime Service conduit'u, M4 idle çökmeleri için bir düzeltme ve Apple'ın SPTM güvenlik modelini ele alıyor.

Asahi Linux, Apple Silicon'a gerçek CPU idle desteği getirmek için UEFI tabanlı PSCI conduit planlıyor

Linux 7.2 kernel sürümüyle birlikte yayımlanan en güncel Asahi Linux ilerleme raporu, projenin Apple Silicon makinelerine satıcıya özel bir driver'ı süresiz taşımaksızın nasıl gerçek CPU güç yönetimi getirmeyi planladığını — ve yeni M4 çiplerinin önyüklemenin erken aşamasında çökmesini nasıl durdurduğunu açıklıyor.

CPU idle sorunu

Rapora göre Apple Silicon'da daha iyi pil ömrünün önündeki en büyük engellerden biri, platformun çeşitli güç yönetimi donanım blokları (SMC, PMGR ve PMP) değil, doğrudan uygulama çekirdeklerinin kendisi. ARM çekirdekleri farklı derinliklerde idle durumuna geçebilir. En sığ olanı, Wait For Interrupt (WFI) instruction, çalışmayı durdurur ama çekirdeği çalışır durumda tuttuğu için neredeyse anında işine kaldığı yerden devam edebilir. Apple'ın çekirdekleri ayrıca çekirdeğin daha büyük bir kısmını kapatan, bunun karşılığında ise durumunu (state) kaybeden bir "derin" WFI modu uygular; Asahi'nin ağaç dışındaki (out-of-tree) cpuidle driver'ı da çekirdeğin durumunu kaydedip ardından derin WFI instruction'larından oluşan bir döngü başlatarak bundan yararlanır.

Sorun ise bunun upstream'e alınması. arm64 mimari kodunun maintainer'ları, upstream'de desteklenen tüm donanımların, bir işletim sisteminin core güç durumlarını yönetmesi için firmware'e talep göndermesini sağlayan standart mekanizma olan PSCI (Power State Coordination Interface) kullanmasını şart koşuyor. PSCI çağrıları normalde SMC ya da HVC instruction üzerinden ilerler; bu da çalışmayı daha yüksek bir Exception Level'da — EL3'te — çalışan firmware'e devreder. Apple'ın çekirdekleri EL3'ü hiç uygulamıyor. Linux bu makinelerde EL2'de çalışıyor ve üzerine çağırabileceği bir firmware yok; bu yüzden PSCI kullanılamaz görünüyordu ve proje downstream'a özgü bir driver'a mahkûm kalmıştı.

Raporun belirttiğine göre bruteforce bir seçenek, m1n1 first-stage bootloader'ının kernel'i EL1'de yükleyip PSCI'yi kendisinin EL2'de barındırması olurdu. Bu teoride işe yarardı ama sanallaştırma gibi mimari özellikleri bozardı.

UEFI tabanlı bir PSCI conduit'u

Projenin cevabı, halihazırda teslim ettiği altyapıya dayanıyor. Üretim sistemlerinde m1n1, kernel'i doğrudan yüklemek yerine U-Boot'u yükler ve UEFI implementasyonunu kullanır; böylece kullanıcılar GRUB, systemd-boot ya da başka herhangi bir standart bootloader ile önyükleme yapabilir. UEFI ayrıca işletim sisteminin önyüklemeden sonra sistem firmware'inden gelen kodu çağırmasını sağlayan bir yol olan Runtime Services'ı sunar.

Raporun da işaret ettiği gibi, PSCI spesifikasyonu API'sini herhangi bir belirgin conduit'a atıfta bulunmadan tanımlar; SMC ve HVC'yi yalnızca örnek olarak listeler. Katkıcı Sven bu nedenle bir UEFI Runtime Service üzerine bir PSCI conduit inşa ediyor. m1n1, belleğini payload'ın geri almasına izin vermek yerine ayırması ve kernel'in aynı Exception Level'da çalışmasına rağmen çağırabileceği bir PSCI implementasyonu geride bırakması için zaten değiştirildi. Bunu mümkün kılan kernel yamaları şu anda mailing list'te RFC olarak duruyor.

M4 ve kilitlenen chicken bit'ler

Rapor ayrıca bu alandaki yakın tarihli aceleliğin nedenini de açıklıyor. ARM spesifikasyonu, WFI döngüsündeki çekirdeklerin tüm durumlarını korumasını şart koşar; ancak bu, Apple Silicon'da varsayılan davranış değil. M1'den M3'e kadar SoC'lerde durum koruma, sözde chicken bit'ler kullanılarak çekirdek başına yapılandırılabiliyordu. M4 serisiyle başlayarak Apple'ın mBoot bootloader'ı bu bit'leri kendisi ayarlıyor ve ardından onları kontrol eden register'ları kilitliyor.

Bunun pratik sonucu, bir M4'te WFI'ye girmenin çekirdeğin durumunu kaybetmesine ve üzerinde çalışan her şeyin çökmesine yol açması — Asahi'nin cpuidle driver'ı devralmadan önce, kernel'in erken başlatma aşaması dahil. Bunu M4 bring-up çalışması yaparken fark eden Katkıcı Yurkea, idle döngüsü davranışını düpedüz bir no-op döngüsüne kadar yapılandırılabilir kılan bir kernel komut satırı parametresi ekledi. Bu yamalar zaten linux-next'te; tam driver yüklendiğinde ise WFI gönderilmeden önce kaybedilecek durumu kaydediyor.

Apple'ın SPTM'si, açıklamasıyla

Raporu tamamlayan bölüm ise Apple'ın Secure Page Table Monitor'ına ayrılmış. Bu bölüm, page-table yönetimini XNU kernel'inin geri kalanından yalıtmak için donanım güvenlik özelliklerini kullanan eski Page Protection Layer'ın saldırganlar tarafından nasıl compromising'e uğradığını ve sonunda SPTM'ye dönüştüğünü ele alıyor. Yeni tasarım bu işlevselliği, Apple'ın Guarded Execution Framework'ünün — standart ARM64 EL1 ve EL2'ye paralel çalışan bir dizi Exception Level — içine yerleştiriyor ve bunu özel bir page-table izin sistemi olan SPRR ile eşliyor.

Neden önemli

UEFI conduit'u kabul edilirse Apple Silicon, mainline CPU idle desteğine giden inandırıcı bir yol kazanır; bu da Asahi süresiz özel bir driver'a bakmak zorunda kalmadan her dağıtım için daha iyi pil ömrü demektir. M4 idle yamaları yeni Mac'leri hiç olmazsa önyüklenebilir tutuyor ve Apple'ın firmware kilitlenmelerinin üçüncü taraf işletim sistemlerinin manevra alanını nasıl daraltmaya devam ettiğini gösteriyor. SPTM bölümü ise Apple'ın genişleyen güvenlik katmanlarını anlamanın — ve onlarla ya da onların etrafında çalışmanın — projenin geleceğinde merkezi bir hâle geldiğini gösteriyor.

  • #asahi-linux
  • #linux-kernel
  • #apple-silicon
  • #power-management
  • #arm

İlgili yazılar