Google Pixel akıllı telefonlar piyasadaki en hızlı Android telefonlar arasındadır. Enerji Farkında Planlama (EAS), kısmen telefonun bu kadar sorunsuz olmasının nedenidir.
Linux'un Linus Torvalds'ın aklındaki bir fikir olduğu geçmişte, CPU'lar az güç için muazzam miktarda enerji gerektiren tek çekirdekli varlıklardı. Piyasada satılan ilk işlemci Intel 4004, tek çekirdekte 740kHz saat hızında çalışıyordu. O zamanlar yükleme zamanlayıcıya gerek yoktu. Yük planlaması, birkaç on yıl sonra ortaya çıkan IBM Power 4 gibi çift çekirdekli "devler" için ayrılmıştı. Bunlar devasa bir 1,1 GHz ila 1,9 GHz hızında çalışıyordu ve programların ve sistemin bu çekirdekleri doğru şekilde kullanması gerekiyordu. Bu makinelerden çoklu çekirdek kullanan yazılım algoritmalarına nasıl geçtik? Daha önce forumlarımızda Energy Aware Scheduling'i (EAS) duymuş olabilirsiniz. Google Pixel akıllı telefonlarının bu kadar iyi performans göstermesinin nedenlerinden biri de bu. EAS'i bu kadar harika yapan şey ne ve bu noktaya nasıl geldik? Bunu açıklamadan önce Linux yükleme zamanlayıcılarından bahsetmemiz gerekiyor.
Linux Yük Zamanlayıcılarının Gelişimi
Round-Robin Planlama
Round robin işlemi, açıklanması ve anlaşılması basit bir kavramdır ve dezavantajlarının kavranması daha da basittir. Round-robin, her işleme zaman ayırmak için zaman dilimlemeyi kullanır. Bilgisayarımızda çalışan dört işlemimiz olduğunu varsayalım.
- Süreç A
- Süreç B
- Süreç C
- Süreç D
Şimdi, dönüşümlü zamanlayıcının işini yapalım. Bir sonraki aşamaya geçmeden önce her işleme 100 milisaniye (zaman dilimleme) ayıracağız. Bu, A Sürecinin işlemini gerçekleştirmesinin 100 milisaniye sürebileceği, ardından B Sürecine geçeceği ve bu şekilde devam edeceği anlamına gelir. Eğer bir uygulamanın işi 250 milisaniye sürüyorsa, işini bitirebilmesi için bu süreçten 3 kez geçmesi gerekecektir! Şimdi bunu farklı çekirdekler arasında ölçeklendirin; böylece A Süreci ve B Süreci çekirdek 1'e, C Süreci ve D Süreci ise çekirdek 2'ye tahsis edilir. Bunun yerini O(n) planlama aldı (ki bu, döngüsel sıralamaya benziyordu, ancak dönemleri kullanıyordu ve dinamik tahsise izin veriyordu). zaman), ardından O(1) planlama (minimum yük, sınırsız süreç desteği), ardından son olarak Tamamen Adil Zamanlayıcı (CFS). CFS, Ekim 2007'de Linux çekirdeğinin 2.6.23 sürümüyle birleştirildi. O zamandan beri elden geçirildi ve hala Linux sistemlerinde varsayılan zamanlayıcıdır.
Tamamen Adil Zamanlayıcı
Tamamen Adil Zamanlayıcı, Android'de başlangıcından beri mevcuttur ve büyük olmayanlarda kullanılır. KÜÇÜK cihazlar. İşlem sırasını, tahsis edilen zamanı vb. belirlemek için akıllı bir algoritma kullanır. Bu, "ağırlıklı adil kuyruklama" adı verilen, iyi çalışılmış planlama algoritmasının çalışan bir uygulamasına bir örnektir. Bu temel olarak sistem işlemlerine ve sistem üzerinde çalışan diğer yüksek öncelikli işlemlere öncelik verilmesine odaklanır. makine. Eğer büyük bir yarışta koşacak olsaydık. KÜÇÜK cihazda tüm çekirdekler eşit olarak algılanacaktır. Bu kötü bir durumdur çünkü düşük güçlü çekirdekler yoğun uygulamaları çalıştırmaya zorlanabilir veya daha da kötüsü tam tersi meydana gelebilir. Müzik dinlemeye yönelik kod çözme işlemi büyük çekirdek üzerinde yapılabilir; örneğin güç tüketimi gereksiz yere artırılabilir. Bu nedenle büyükler için yeni bir planlayıcıya ihtiyacımız var. LITTLE, çekirdeklerdeki farkı gerçekten tanıyabilen ve güç açısından verimli bir şekilde kullanabilen biri. Heterojen Çoklu İşleme'nin (HMP) devreye girdiği yer burasıdır; çoğu Android telefonun şu anda çalıştığı standart yükleme zamanlayıcıdır.
Heterojen Çoklu İşleme
Bu, tüm büyükler için standart yükleme zamanlayıcıdır. Son yıllarda Google Pixel dışında piyasaya sürülen LITTLE cihazı. HMP büyük olanı kullanır. LITTLE mimarisi, düşük öncelikli, daha az yoğun işleri daha az güç tüketen küçük çekirdeklere devreder. HMP "güvenli"dir ve hata yapmadan neyin büyük çekirdeklere, neyin küçük çekirdeklere gitmesi gerektiğini bilir. Sadece işe yarıyor ve geliştirme tarafında kurulum, birazdan ele alacağımız EAS gibi bir şeye göre çok daha az çaba gerektiriyor. HMP, CFS'nin gücün farkına varmasını sağlayan bir uzantısıdır.
HMP tahminde bulunmaz ve gelecekteki süreçleri tahmin etmez. Bu iyi bir şey ama cihazın EAS çalıştıranlar kadar akıcı olamamasının ve biraz daha fazla pil tüketmesinin nedeni de bu. Bu, son olarak bizi, daha fazla OEM'in benimsemesiyle ROM ve çekirdek geliştirmede gelecek olduğuna kesinlikle inandığım Energy Aware Scheduling'e (EAS) getiriyor.
Enerji Bilinçli Planlama
Enerji Farkında Planlama (EAS), forumlarımızdaki kullanıcıların bahsettiği bir sonraki büyük konudur. Bir OnePlus 3 (veya tabii ki bir Google Pixel) kullanıyorsanız, bunu forumlarda kesinlikle duymuşsunuzdur. Qualcomm Snapdragon 845 ile ana akıma sunuldu, yani bu cihazlardan birine sahipseniz zaten EAS özellikli bir akıllı telefona sahipsiniz. EAS gibi çekirdekler şeklinde RenderZenith ve ROM'lar gibi VertexOS Ve Saf Füzyon OnePlus 3 forumlarını en iyi zamanlarında fırtınaya sokuyordu. Elbette Google Pixel de EAS ile birlikte geliyor. Geliştirilmiş pil ömrü ve daha iyi performans vaadiyle, işin püf noktası nedir?
Enerji Farkında Planlama, CFS veya HMP gibi her cihaz için evrensel olmadığı kadar basit de değildir. EAS, bir enerji modeline dayalı olarak üzerinde çalıştığı işlemcinin anlaşılmasını gerektirir. Bu enerji modelleri, sürekli olarak test eden ve optimum performansı sağlamak için çalışan mühendis ekipleri tarafından yapılır. Snapdragon 820 ve 821 temelde aynı olduğundan OnePlus 3'teki özel çekirdekler Google Pixel enerji modelini kullanıyor. Snapdragon 845'e sahip cihazlar EAS'yi kullanabilir ve OnePlus 6 bir dereceye kadar bunu yapar. Bir Google Pixel cihazı kadar ayarlı değil ama işi hallediyor. Burada, OnePlus 6'nın EAS ile daha iyi bir işlemciye sahip olmasına rağmen Pixel 2 XL'in onu hala pürüzsüzlükte nasıl yendiğine dair bir örnek var. Bu görsellerin her ikisi de bizim tarafımızdan alınmıştır. hız odaklı inceleme OnePlus 6'nın.
Grafikleri anlamakta zorluk çekiyorsanız yol göstermesi açısından aşağıdaki görsele göz atabilirsiniz. Yeşil çizgiyi aşan herhangi bir şey, karelerin atlandığını ve en kötü durumlarda gözle görülür takılmayı gösterir.
EAS'nin OnePlus 6 uygulaması ilginçtir çünkü aynı SoC'ye sahip bir Google Pixel'de bulacağınız gibi tam teşekküllü bir uygulama gibi görünmemektedir. Zamanlayıcı ayarlamaları da pek mantıklı değil, dolayısıyla bu muhtemelen performansın neden beklediğiniz kadar verimli olmadığını açıklıyor. İşin büyük bölümünde düşük güçlü çekirdeklere öncelik veren sistem sayesinde güç tüketimi son derece muhafazakardır.
Ayarlanabilirler, CPU regülatörüne iletilen ve regülatörün belirli durumlara frekans açısından nasıl tepki vereceğini değiştiren bir dizi parametredir. Zamanlayıcı daha sonra görevleri farklı işlemcilerde nereye yerleştireceğine karar verir. OnePlus 6'nın ayarlanabilir ayarları düşük güçlü çekirdekler üzerinde çalışmaya öncelik verecek şekilde ayarlanmıştır. Ayrıca, Google Pixel 2'nin büyük miktarda giriş desteğine sahip olması ve 8 çekirdeğin tamamını sürekli çevrimiçi tutması da yardımcı olmuyor. Google ayrıca bir kesinti dengeleyici bu da kare düşüşlerini ortadan kaldırmaya ve performansı artırmaya yardımcı olur.
Peki EAS nasıl çalışıyor? Neden yalnızca belirli koşullarda bu kadar verimli?
Enerji Farkında Planlama, bir enerji modeli kullanma ihtiyacını ortaya koyar ve yukarıda belirtildiği gibi, onu mükemmel hale getirmek için çok sayıda test ve çalışma gerektirir. EAS, çekirdeğin tamamı bağımsız hareket eden üç farklı çekirdek parçasını birleştirmeye çalışır ve enerji modeli bunların birleştirilmesine yardımcı olur.
- Linux zamanlayıcı (yukarıda belirtilen CFS)
- Linux işlemcisi
- Linux işlemci frekansı
Her 3 parçayı programlayıcı altında birleştirmek ve birlikte hesaplamak enerji tasarrufu potansiyeli sağlar, çünkü bunların birlikte hesaplanması mümkün olduğu kadar verimli olmalarına olanak tanır. CPUIdle, CPU'nun ne zaman boş moda geçmesi gerektiğine karar vermeye çalışırken CPUFreq, CPU'nun ne zaman artırılıp azaltılacağına karar vermeye çalışır. Bu modüllerin her ikisinin de öncelikli hedefi enerji tasarrufudur. Sadece bu da değil, süreçleri üst uygulama, sistem arka planı, ön plan ve arka plan olmak üzere dört gruba ayırır. İşlenmesi gereken görevler bu kategorilerden birine yerleştirilir ve ardından kategoriye CPU gücü verilir ve iş farklı CPU çekirdekleri üzerinden devredilir. üst uygulama, tamamlanmanın en yüksek önceliğidir, ardından ön plan, arka plan ve ardından sistem arka planı gelir. Arka plan teknik olarak sistem arka planıyla aynı önceliğe sahiptir, ancak sistem arka planının da genellikle daha küçük çekirdeğe erişimi vardır. Aslında Energy Aware Scheduling, Linux çekirdeğinin temel kısımlarını alıyor ve hepsini tek bir süreçte birleştiriyor.
Cihazı uyandırırken EAS, en sığ boşta durumdaki çekirdeği seçerek cihazı uyandırmak için gereken enerjiyi en aza indirir. Bu, gerekmedikçe büyük kümeyi uyandırmayacağından, aygıtı kullanırken gereken gücün azaltılmasına yardımcı olur. Yük takibi de EAS'nin son derece önemli bir parçasıdır ve iki seçenek vardır. "Varlık Başına Yük Takibi" (PELT) genellikle yük takibi için kullanılır; bilgiler daha sonra frekanslara ve CPU genelinde görevlerin nasıl devredileceğine karar vermek için kullanılır. "Pencere Destekli Yük Takibi" (WALT) de kullanılabilir ve Google Pixel'de kullanılan şeydir. Forumlarımızdaki VertexOS gibi birçok EAS ROM, WALT kullanmayı tercih ediyor. Birçok ROM, çekirdeğin WALT veya PELT içeren iki sürümünü yayınlayacaktır, dolayısıyla karar kullanıcıya kalmıştır. WALT daha hızlı çalışıyor ve CPU frekansında yüksek zirveler varken, PELT daha tutarlı kalmaya çalışıyor. Yük izleyici aslında CPU frekansını etkilemez, yalnızca sisteme CPU kullanımının ne düzeyde olduğunu söyler. Daha yüksek bir CPU kullanımı daha yüksek bir frekans gerektirir ve bu nedenle PELT'in tutarlı bir özelliği, CPU frekansının yavaş yavaş artmasına veya azalmasına neden olmasıdır. PELT, daha yüksek CPU yükü raporlamasına yönelme eğiliminde olduğundan, daha yüksek pil maliyetiyle daha yüksek performans sağlayabilir. Ancak bu noktada hiç kimse hangi yük izleme sisteminin daha iyi olduğunu söyleyemez, çünkü her iki yük izleme yöntemi de sürekli olarak yamalanıp geliştirilmektedir.
Her iki durumda da, kullanılan yük takip yöntemi ne olursa olsun verimlilikte artış olduğu aşikardır. Herhangi bir işlemcideki görevleri işlemek yerine, görev analiz edilir ve onu çalıştırmak için gereken enerji miktarı tahmin edilir. Bu akıllı görev yerleştirme, görevlerin çok daha verimli bir şekilde tamamlanması anlamına gelirken aynı zamanda sistemin bir bütün olarak daha hızlı olmasını sağlar. EAS'in amacı minimum güç kullanımıyla mümkün olan en akıcı kullanıcı arayüzünü elde etmektir. Schetune gibi diğer harici bileşenlerin devreye girdiği yer burasıdır.
Schedtune, her grupta tamamlanacak görevler üzerinde daha hassas kontrol sağlayan iki ayarlanabilir öğeyle tanımlanır. Yalnızca görevlerin birden fazla CPU'ya yayılmasını kontrol etmekle kalmaz, aynı zamanda zamana duyarlı görevlerin daha hızlı tamamlanmasını sağlamak için algılanan yükün artırılması gerekip gerekmediğini de kontrol eder. Bu sayede kullanıcının kullandığı ön plan uygulama ve servisleri yavaşlamaz ve gereksiz performans sorunlarına neden olmaz.
Enerji Farkında Planlama bir sonraki büyük şey olsa da, bunun zaten burada olduğu ve bir süredir burada olduğu da iddia edilebilir. Energy Aware Scheduling ile giderek daha fazla cihazın ana akım haline gelmesiyle, mobil işleme verimliliğinde yeni bir çağ başlıyor.
Round-Robin, CFS, HMP ve EAS'nin Artıları ve Eksileri
Grafik becerilerim ortalamanın altında olsa da, bu zamanlayıcıların her birinin artılarını ve eksilerini özetlemesi gereken bir görsel hazırladım.
XDA Tanınmış Katkıda Bulunan'a özel bir teşekkür etmek istiyorum. Mustafa Wael EAS'nin çeşitli yönlerine ilişkin açıklamaları bu makalenin mümkün kılınmasına büyük ölçüde yardımcı oldu. Ayrıca XDA Tanınmış Geliştiricisine de teşekkür etmek istiyorum. neşeli, XDA Tanınan Geliştirici İşlemeKırık Ve Mostafa Wael, EAS hakkındaki yazısı için. EAS ile ilgili parçalara ilgi duyanlar için Linaro'da EAS ile ilgili okuyabileceğiniz birçok belge bulunmaktadır.