Performans yönetimi

Android cihazların gücünü ve performansını yönetmek, uygulamaların çok çeşitli donanımlarda tutarlı ve sorunsuz bir şekilde çalışmasını sağlayabilir. Android 7.0 ve sonraki sürümlerde OEM'ler, uygulamaların tutarlı bir cihaz performansı elde etmesini sağlayan ve CPU'ya yoğun, ön plan uygulamalarının performansını artırmak için özel bir çekirdek belirten sürekli performans ipuçları desteğini uygulayabilir.

Sürdürülebilir performans

Uzun süre çalışan uygulamalarda (oyunlar, kamera, RenderScript, ses işleme), cihaz sıcaklığı sınırlarına ulaşıldığında ve çip üzerinde sistem (SoC) motorları kısıtlandığında performans önemli ölçüde değişebilir. Cihaz ısınmaya başladığında temel platformun özellikleri değiştiğinden, yüksek performanslı ve uzun süre çalışan uygulamalar oluşturan uygulama geliştiriciler sınırlı bir kapasiteye sahiptir.

Android 7.0, bu sınırlamaları gidermek için sürekli performans desteğini kullanıma sundu. Bu sayede OEM'ler, uzun süre çalışan uygulamalar için cihaz performansı özellikleriyle ilgili ipuçları sağlayabilir. Uygulama geliştiriciler, uygulamaları uzun süre boyunca tahmin edilebilir ve tutarlı bir cihaz performansı düzeyine ayarlamak için bu ipuçlarını kullanabilir.

Mimari

Bir Android uygulaması, platformdan Android cihazın uzun süre boyunca tutarlı bir performans düzeyi sağlayabileceği sürdürülebilir performans moduna girmesini isteyebilir.

Şekil 1. Sürekli performans modu mimarisi.

Uygulama

OEM'lerin Android 7.0 ve sonraki sürümlerde sürekli performansı desteklemesi için:

  • Maksimum CPU/GPU frekanslarını kilitlemek için güç HAL'de cihaza özel değişiklikler yapın veya termal kısıtlamayı önlemek için başka optimizasyonlar gerçekleştirin.
  • Güç HAL'inde yeni ipucu POWER_HINT_SUSTAINED_PERFORMANCE'ü uygulayın.
  • isSustainedPerformanceModeSupported() API aracılığıyla TRUE döndürerek desteği belirtin.
  • 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ındaki MAKS çubuğunu düşürmenin kare hızını düşüreceğini ancak bu modda sürdürülebilirliği nedeniyle bu düşük hızın tercih edildiğini unutmayın. Örneğin, normal maksimum saat hızlarını kullanan bir cihaz birkaç dakika boyunca 60 FPS'de oluşturma işlemi gerçekleştirebilir ancak cihaz ısındıktan sonra 30 dakikanın sonunda 30 FPS'ye düşebilir. Sürekli mod kullanıldığında cihaz, örneğin 30 dakika boyunca 45 FPS'de tutarlı bir şekilde oluşturma yapabilir. Amaç, modu kullanırken mod kullanılmadığındaki kare hızından yüksek (veya daha yüksek) bir kare hızı elde etmektir. Ayrıca, geliştiricilerin hareketli bir hedefi kovalaması gerekmemesi için kare hızı zaman içinde tutarlı olmalıdır.

Sürekli modu, cihazın yalnızca testi geçmek için gereken minimum değerlere değil, mümkün olan en yüksek sürekli performansa ulaşacak şekilde uygulamanızı önemle tavsiye ederiz (ör. cihazın zaman içinde termal olarak kısıtlanmasına neden olmayan mümkün olan en yüksek MAX frekans sınırlarını seçin).

Not: Sürekli modu uygulamak için MAX saat hızlarını sınırlamak gerekmez.

Doğrulama

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

  • Sürekli mod etkinken kare hızı nispeten sabit kalmalıdır (test, kare hızındaki değişimin yüzdesini zaman içinde ölçer ve% 5'ten az bir değişim gerektirir).
  • Sürekli mod etkinken kare hızı, mod devre dışıyken 30 dakikanın sonunda elde edilen kare hızından düşük olmamalıdır.

Ayrıca, cihazın 30 dakikalık kullanımdan sonra termal olarak kısıtlanmadığından emin olmak için uygulamanızı yoğun CPU ve GPU iş yükleri ile manuel olarak test edebilirsiniz. Dahili testte oyunlar ve karşılaştırma uygulamaları (ör. gfxbench) içeren örnek iş yükleri kullandık.

Özel çekirdekler

Yoğun CPU kullanan ve zamana duyarlı iş yükleri için başka bir iş parçacığı tarafından öncelik verilmesi, kare son tarihlerine uyup uymama arasındaki farkı belirleyebilir. Katı gecikme ve kare hızı gereksinimleri olan uygulamalar (ör. ses veya sanal gerçeklik uygulamaları) için özel bir CPU çekirdeğine sahip olmak kabul edilebilir düzeyde performans sağlayabilir.

Android 7.0 veya sonraki sürümleri çalıştıran cihazlar artık en üstteki ön plan uygulaması için açıkça bir çekirdek ayırt edebilir. Bu sayede tüm ön plan uygulamalarının performansı artar ve yoğun iş yükü olan uygulamalar, işlerinin CPU çekirdeklerine nasıl dağıtılacağı konusunda daha fazla kontrole sahip olur.

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

  • cpusets'ü etkinleştirin ve yalnızca en üst ön plan uygulamasını içeren bir cpuset yapılandırın.
  • Bu cpuset için bir çekirdeğin (özel çekirdek) ayrıldığından emin olun.
  • Özel çekirdeğin çekirdek numarasını döndürmek için getExclusiveCores API'yi uygulayın.

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

Nexus 6P için referans uygulamayı görüntülemek istiyorsanız android//device/huawei/angler/power/power.c bölümüne bakın.