Performans Yönetimi

Android cihazların gücünü ve performansını yönetmek, uygulamaların çok çeşitli donanımlarda tutarlı ve sorunsuz çalışmasını sağlamaya yardımcı olabilir. Android 7.0 ve sonraki sürümlerde OEM'ler, uygulamaların tutarlı bir cihaz performansını sürdürmesine olanak tanıyan sürdürülebilir performans ipuçlarına yönelik destek uygulayabilir ve CPU yoğun, ön plan uygulamalarının performansını artırmak için özel bir çekirdek belirleyebilir.

Sürdürülebilir performans

Uzun süre çalışan uygulamalar için (oyunlar, kamera, RenderScript , ses işleme), cihazın sıcaklık sınırlarına ulaşıldığında ve çip üzerinde sistem (SoC) motorları kısıldığında performans önemli ölçüde değişebilir. Yüksek performanslı, uzun süre çalışan uygulamalar oluşturan uygulama geliştiricileri sınırlıdır çünkü temel platformun yetenekleri, cihaz ısınmaya başladığında hareketli bir hedeftir.

Bu sınırlamaları gidermek için Android 7.0, sürdürülebilir performans desteğini sunarak OEM'lerin uzun süre çalışan uygulamalar için cihaz performans yeteneklerine ilişkin ipuçları sağlamasına olanak tanıdı. Uygulama geliştiricileri, uygulamaları uzun süre boyunca öngörülebilir, tutarlı bir cihaz performansı düzeyine göre ayarlamak için bu ipuçlarını kullanabilir.

Mimari

Bir Android uygulaması, platformun, Android cihazının uzun süreler boyunca tutarlı bir performans seviyesini koruyabileceği sürdürülebilir bir performans moduna girmesini talep edebilir.

Şekil 1. Sürdürülebilir performans modu mimarisi.

Uygulama

Android 7.0 ve sonraki sürümlerde sürdürülebilir performansı desteklemek için OEM'lerin şunları yapması gerekir:

  • Maksimum CPU/GPU frekanslarını kilitlemek için güç HAL'sinde cihaza özel değişiklikler yapın veya termal kısıtlamayı önlemek için diğer optimizasyonları gerçekleştirin.
  • Power HAL'de yeni POWER_HINT_SUSTAINED_PERFORMANCE ipucunu uygulayın.
  • isSustainedPerformanceModeSupported() API'si aracılığıyla TRUE değerini döndürerek desteğinizi bildirin.
  • Window.setSustainedPerformanceMode uygulayın.

Nexus referans uygulamasında güç ipucu, CPU ve GPU'nun maksimum frekanslarını en yüksek sürdürülebilir seviyelerde sınırlandırır. CPU/GPU frekansında MAX çubuğunun düşürülmesinin kare hızını düşüreceğini unutmayın ancak sürdürülebilirliği nedeniyle bu modda bu düşük hız tercih ediliyor. Örneğin normal maksimum saatleri kullanan bir cihaz, birkaç dakika boyunca 60 FPS'de render yapabilir ancak cihaz ısındıktan sonra 30 dakikanın sonunda 30 FPS'ye düşebilir. Sürekli modu kullanırken cihaz, örneğin 30 dakikanın tamamı boyunca tutarlı bir şekilde 45 FPS'de görüntü oluşturabilir. Amaç, modu kullanırken, modu kullanmadığınız zamanki kare hızından daha yüksek (veya daha yüksek) bir kare hızıdır ve geliştiricilerin hareketli bir hedefi kovalamak zorunda kalmaması için zaman içinde tutarlı olmaktır.

Yalnızca testi geçmek için gereken minimum değerleri değil, cihazın mümkün olan en yüksek sürdürülebilir performansı elde etmesini sağlayacak şekilde sürekli modun uygulanmasını önemle tavsiye ederiz (örneğin, cihazın zaman içinde termal olarak daralmasına neden olmayan mümkün olan en yüksek MAX frekans sınırlarını seçin).

Not : Sürekli modun uygulanması için MAX saat hızlarının sınırlanması gerekli değildir.

Doğrulama

OEM'ler, sürdürülebilir performans API'sini uygulamalarını doğrulamak için bir CTS testi (Android 7.0 ve üzeri) kullanabilir. Test, yaklaşık 30 dakika boyunca bir iş yükünü çalıştırır ve sürekli mod etkinken ve etkin değilken performansı karşılaştırır:

  • Sürekli mod etkinleştirildiğinde, kare hızının nispeten sabit kalması gerekir (test, zaman içinde kare hızında meydana gelen değişimin yüzdesini ölçer ve <%5'lik bir değişiklik gerektirir).
  • Sürekli mod etkinken kare hızı, modun devre dışı bırakıldığı 30 dakikanın sonundaki kare hızından düşük olmamalıdır.

Ayrıca, cihazın 30 dakikalık kullanımdan sonra termal olarak daralmadığından emin olmak için uygulamanızı CPU ve GPU açısından yoğun iş yükleriyle manuel olarak test edebilirsiniz. Dahili testlerde oyunlar ve kıyaslama uygulamaları (örn. gfxbench ) dahil olmak üzere örnek iş yükleri kullandık.

Özel çekirdekler

CPU yoğun, zamana duyarlı iş yükleri için, başka bir iş parçacığı tarafından önlenmek, çerçeve son teslim tarihlerine uyulması veya uyulmaması arasındaki fark olabilir. Kesin gecikme ve kare hızı gereksinimleri olan uygulamalar için (ses veya sanal gerçeklik uygulamaları gibi), özel bir CPU çekirdeğine sahip olmak, kabul edilebilir bir performans düzeyini garanti edebilir.

Android 7.0 veya üstünü çalıştıran cihazlar artık bir çekirdeği açıkça en ön plandaki uygulama için ayırabiliyor, bu da tüm ön plan uygulamalarının performansını artırıyor ve yüksek yoğunluklu iş yüklerine sahip uygulamalara, işlerinin CPU çekirdekleri arasında nasıl dağıtıldığı konusunda daha fazla kontrol sağlıyor.

Bir cihazda özel bir çekirdeği desteklemek için:

  • cpusets etkinleştirin ve yalnızca üst ön plandaki uygulamayı içeren bir cpuset yapılandırın.
  • Bir çekirdeğin (bu özel çekirdektir) bu cpuset iş parçacıkları için ayrıldığından emin olun.
  • Özel çekirdeğin çekirdek numarasını döndürmek için getExclusiveCores API'sini uygulayın.

Hangi çekirdeklerde hangi işlemlerin planlandığını belirlemek için herhangi bir iş yükünü çalıştırırken systrace kullanın ve üstteki ön plan uygulaması dışındaki uygulamalardan hiçbir kullanıcı alanı iş parçacığının özel çekirdekte planlanmadığını doğrulayın.

Nexus 6P'ye yönelik bir referans uygulamasını görüntülemek için android//device/huawei/angler/power/power.c adresine bakın.