Menganalisis penjadwalan thread

Ada beberapa hal yang perlu dipertimbangkan untuk menentukan apakah thread proses game Anda digunakan dengan tepat dan dijadwalkan untuk mendapatkan performa terbaik.

  • Kecepatan frame
  • Multithreading dan paralelisasi thread
  • Afinitas core CPU

Multithreading

Banyak game dan game engine menggunakan multithreading untuk membagi pekerjaan CPU menjadi tugas logis, yang mungkin dijalankan secara independen. Salah satu konfigurasi umum adalah thread game untuk logika game dan input, thread render untuk menyiapkan dan mengirimkan objek yang akan digambar, serta thread pekerja untuk subtugas lain seperti animasi atau audio.

Sebaiknya memparalelkan thread untuk memanfaatkan peningkatan performa multithreading. Contohnya adalah skenario saat game dan thread render berjalan sebagian atau sepenuhnya serentak pada core yang berbeda. Hal ini tidak selalu dapat dilakukan, seperti dalam kasus dengan dependensi data bersama; tetapi, jika memungkinkan, hal ini dapat mengakibatkan waktu CPU yang lebih rendah sehingga berpotensi meningkatkan kecepatan frame.

Game dengan thread utama dan render yang diparalelkan dengan baik, serta thread pekerja dan thread audio
Gambar 1. Game dengan thread utama dan render yang diparalelkan dengan baik, serta thread pekerja dan thread audio

Afinitas core CPU

Salah satu faktor yang secara signifikan memengaruhi performa beban kerja CPU Anda adalah cara penjadwalannya pada core. Kolom ini dapat dibagi menjadi dua komponen:

  • Apakah thread game Anda berjalan pada core terbaik untuk performa
  • Apakah thread game Anda sering beralih antar-core

Anda dapat menyelidiki perilaku thread CPU di bagian Penggunaan CPU dengan mengaktifkan CPU dalam konfigurasi profil saat mengambil rekaman aktivitas. Dengan memperbesar bagian rekaman aktivitas <200 milidetik, Anda dapat melihat setiap proses yang berjalan di core CPU perangkat. Biasanya, core kecil sesuai dengan indeks yang lebih kecil (misalnya CPU 0-3), sedangkan core besar sesuai dengan indeks yang lebih tinggi (misalnya CPU 6-7).

Umumnya, saat game berada di latar depan, thread persisten seperti thread game dan thread render harus berjalan di core besar berperforma tinggi, sedangkan thread proses dan pekerja lainnya dapat dijadwalkan pada core yang lebih kecil.

Game dengan thread utama dan render yang utamanya berjalan pada core besar (CPU 6-7), ditampilkan dengan warna biru muda
Gambar 2. Game dengan thread utama dan render yang utamanya berjalan pada core besar (CPU 6-7), yang ditampilkan dengan warna biru muda

Anda juga dapat mengamati apakah thread game sering beralih antar-core, jika thread utama dan render Anda mengubah core dalam satu frame CPU atau antara dua frame CPU berturut-turut. Perilaku CPU ini kemungkinan merupakan indikator bahwa thread game Anda tidak dikaitkan dengan benar. Sakelar inti tersebut menimbulkan beberapa overhead dari tombol konteks dan hilangnya status dengan cache/register inti, yang mengakibatkan peningkatan panjang frame CPU Anda.

Game dengan utama (Thread-7) dan thread render (Thread-8) yang beralih antar-core, ditampilkan dengan warna ungu
Gambar 3. Game dengan thread utama (Thread-7) dan thread render (Thread-8) yang beralih antar-core, ditampilkan dengan warna ungu