Memperkirakan waktu pemrosesan frame CPU dan GPU

Memperkirakan waktu pemrosesan frame CPU dan GPU (waktu render frame) sangat penting untuk memahami performa aplikasi dan menemukan bottleneck. Saat membuat profil aplikasi dengan AGI, System Profiler menyediakan data rekaman aktivitas yang dapat Anda gunakan untuk memperkirakan waktu render frame.

Waktu CPU

Di AGI, Anda dapat melihat total waktu frame CPU aktif dan total dalam jalur CPU profil sistem.

Total waktu CPU

Untuk mengukur total waktu CPU yang dihabiskan, pilih rentang waktu yang mencakup waktu di antara peristiwa pengiriman frame yang berurutan. Peristiwa pengiriman frame adalah eglSwapBuffers (untuk OpenGL) dan vkQueuePresentKHR (untuk Vulkan).

Screenshot beberapa peristiwa eglSwapBuffer.
Gambar 1. Beberapa peristiwa eglSwapBuffer.


Screenshot peristiwa vkQueuePresentKHR.
Gambar 2. Peristiwa vkQueuePresentKHR.

Pengukuran ini adalah perkiraan total waktu CPU,tetapi tidak selalu merepresentasikan waktu CPU aktif. Misalnya, di aplikasi yang terikat dengan GPU, CPU dapat menunggu GPU menyelesaikan pekerjaannya sebelum mengirimkan frame baru. Hal ini sering terjadi saat peristiwa dequeueBuffer, eglSwapBuffer (untuk OpenGL), atau vkQueuePresent (untuk Vulkan) menghabiskan sebagian besar waktu CPU. Waktu tunggu disertakan dalam total waktu CPU, tetapi tidak disertakan dalam waktu CPU aktif.

Screenshot yang menampilkan banyak aktivitas tidak aktif selama peristiwa dequeueBuffer dan eglSwapBuffer.
Gambar 3. Sejumlah besar nonaktif selama peristiwa dequeueBuffer dan eglSwapBuffer.

Waktu CPU aktif

Waktu CPU aktif menentukan kapan CPU menjalankan kode aplikasi tanpa dalam status tidak ada aktivitas.

Untuk mengukur waktu CPU aktif, lihat slice Running tepat di atas peristiwa CPU. Menghitung semua bagian rekaman aktivitas di antara dua peristiwa pengiriman frame yang berada dalam status Running. Pastikan Anda menyertakan thread yang berfungsi.

Screenshot dua periode waktu CPU yang dapat digunakan untuk mengukur waktu CPU aktif.
Gambar 5. Dua periode waktu CPU yang dapat digunakan untuk mengukur waktu CPU aktif.


Screenshot aplikasi multi-thread yang memiliki thread yang berfungsi saat thread utama tidak ada aktivitas.
Gambar 6. Aplikasi multi-thread yang memiliki thread yang berfungsi saat thread utama tidak ada aktivitas.

Cara lain untuk mengukur waktu CPU aktif adalah dengan melihat slice aplikasi di jalur CPU. Slice ini menunjukkan kapan CPU berjalan dan sesuai dengan irisan Running.

Screenshot yang menampilkan status berjalan dari thread yang disematkan dan cocok dengan jalur CPU.
Gambar x. Status berjalan thread yang disematkan cocok dengan jalur CPU.

Untuk membantu mengidentifikasi slice aplikasi, Anda dapat menambahkan penanda ATrace ke aplikasi Anda. Tindakan ini akan menampilkan penanda di jalur CPU pada System Profiler.

Screenshot penanda ATrace di jalur CPU.
Gambar 8. Penanda ATrace di jalur CPU.

Memperkirakan waktu render frame GPU

Untuk memperkirakan waktu render frame GPU, Anda dapat menggunakan irisan GPU atau penghitung GPU di Profiler Sistem. Perkiraan ini lebih akurat saat menggunakan slice GPU.

Slice GPU

Jika System Profiler memiliki informasi bagian GPU yang tersedia, Anda bisa mendapatkan informasi waktu render frame GPU yang sangat akurat dengan mengukur jumlah total waktu yang dihabiskan aplikasi untuk mengerjakan tugas yang terkait dengan satu frame.

Perangkat Mali

Pada perangkat Mali, irisan GPU memiliki jalur fragmen, non-fragmen, dan terkadang non-fragmen tambahan. Untuk frame yang tidak terlalu rumit, tugas fragmen dan non-fragmen bersifat berurutan, sehingga membedakan tugas satu frame dengan frame lainnya dapat dilakukan dengan mencari celah antara tugas GPU yang aktif.

Sebagai alternatif, jika Anda sudah terbiasa dengan pekerjaan yang dikirimkan ke GPU, mengidentifikasi pola render pass yang dikirimkan akan memberikan informasi tentang kapan frame dimulai dan berakhir.

Screenshot beberapa frame yang dieksekusi secara berurutan.
Gambar 9. Beberapa frame dieksekusi secara berurutan.
Screenshot dengan AGI yang diperbesar pada tugas frame individual.
Gambar 10. Memperbesar karya setiap frame.

Untuk aplikasi yang memiliki alur kerja GPU yang lebih paralel, Anda bisa mendapatkan waktu frame GPU dengan mencari semua frame yang memiliki submissionID yang sama di panel Selection untuk setiap irisan.

Untuk aplikasi berbasis Vulkan, beberapa pengiriman dapat digunakan untuk membuat frame. Pantau ID pengiriman menggunakan jalur Peristiwa Vulkan, yang berisi irisan untuk setiap pengiriman. Memilih bagian pengiriman akan menandai semua irisan aktivitas GPU yang sesuai dengan pengiriman.

Screenshot beban kerja GPU paralel, tempat pekerjaan pada satu frame dapat tumpang tindih dengan frame lainnya.
Gambar 11. Beban kerja GPU paralel, ketika pekerjaan di satu frame dapat tumpang-tindih dengan frame lainnya.


Screenshot beberapa peristiwa Vulkan untuk frame yang dipilih.
Gambar 12. Beberapa peristiwa Vulkan untuk frame yang dipilih.

Perangkat Adreno

Di perangkat Adreno, slice GPU muncul di jalur GPU Queue 0 dan selalu direpresentasikan secara berurutan, sehingga Anda dapat melihat semua irisan yang mewakili render yang diteruskan untuk sebuah frame dan menggunakannya untuk mengukur waktu frame GPU.

Screenshot beberapa frame yang dieksekusi secara berurutan.
Gambar 13. Beberapa frame dieksekusi secara berurutan.
Screenshot dengan AGI yang diperbesar di frame dengan beberapa penerusan render.
Gambar 14. Memperbesar frame dengan beberapa render pass.

Serupa dengan skenario Mali yang dijelaskan sebelumnya: jika aplikasi menggunakan Vulkan, jalur Peristiwa Vulkan memberikan informasi tentang tugas yang dikirim untuk menjalankan frame. Untuk menandai penerusan render, klik irisan Peristiwa Vulkan yang terkait dengan frame.

Screenshot aplikasi berbasis Vulkan dengan peristiwa Vulkan untuk frame yang dipilih.
Gambar 15. Aplikasi berbasis Vulkan dengan peristiwa Vulkan untuk frame yang dipilih.

Ada beberapa skenario ketika batas frame GPU lebih sulit dibedakan karena aplikasi terikat dengan GPU yang berat. Dalam skenario ini, jika sudah terbiasa dengan pekerjaan yang dikirimkan ke GPU, Anda dapat mengidentifikasi pola yang merender penerusan sedang dijalankan dan menentukan batas frame dari informasi tersebut.

Screenshot aplikasi yang terikat dengan GPU dengan pola render pass yang membantu mengidentifikasi batas frame.
Gambar 16. Aplikasi yang terikat dengan GPU dengan pola render pass yang membantu mengidentifikasi batas frame.

Penghitung GPU

Jika informasi bagian GPU tidak tersedia dalam rekaman aktivitas, Anda dapat memperkirakan waktu frame GPU menggunakan jalur penghitung GPU.

Perangkat Mali

Di perangkat Mali, Anda dapat menggunakan jalur Pemakaian GPU untuk memperkirakan waktu frame GPU untuk aplikasi yang tidak menggunakan GPU secara intensif. Jika tidak terlalu intensif GPU, aplikasi memiliki periode aktivitas GPU yang tinggi dan rendah secara teratur, bukan aktivitas tinggi secara konsisten. Untuk memperkirakan waktu frame GPU menggunakan jalur penggunaan GPU, ukur durasi periode aktivitas tinggi dalam jalur.

Screenshot penggunaan GPU dan pelacakan Antrean GPU di perangkat Mali.
Gambar 17. Pemakaian GPU dan Antrean GPU melacak di perangkat Mali.

Jika aplikasi lebih intensif GPU, Anda dapat menggunakan jalur fragmen dan non-fragmen untuk memperkirakan waktu frame GPU. Dengan mencari pola pada tingkat aktivitas jalur fragmen dan non-fragmen, Anda bisa mendapatkan perkiraan kasar lokasi batas frame, dan menggunakannya untuk mengukur waktu frame GPU.

Screenshot trek fragmen dan non-fragmen.
Gambar 18. Jalur Fragmen dan non-fragmen.

Perangkat Adreno

Di perangkat Adreno, jika aplikasi tidak membutuhkan GPU yang intensif, Anda dapat memperkirakan waktu frame GPU dengan cara yang sama seperti yang dapat dilakukan pada perangkat Mal di bagian sebelumnya.

Screenshot penggunaan GPU dan Antrean GPU melacak di perangkat Adreno.
Gambar 19. Pemakaian GPU dan Antrean GPU melacak di perangkat Adreno.

Jika aplikasi lebih intensif GPU, Anda dapat menggunakan jalur Vertex Hint / Second dan Fragment Instructions / Second untuk memperkirakan waktu frame GPU. Dengan mencari pola di level aktivitas jalur ini, Anda bisa mendapatkan perkiraan kasar letak batas frame, dan menggunakannya untuk mengukur waktu render frame GPU.

Screenshot Petunjuk Vertex / Jalur kedua.
Gambar 20. Jalur Vertex Directions / Second.

Jalur lain ini mungkin memberikan informasi yang serupa:

  • Verteksi Berarsir / Detik
  • Fragmen Berarsir / detik
  • % Verteksi Time Shading
  • % Fragmen Waktu