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 yang paling sesuai untuk workload mereka.
  • Apakah thread game Anda sering beralih antar-core.

Perangkat modern sering menggunakan arsitektur yang disebut komputasi heterogen, dengan inti yang memiliki tingkat performa yang berbeda:

  • Satu atau beberapa core menawarkan performa terbaik, tetapi mengonsumsi lebih banyak daya. Ini kadang-kadang disebut inti "besar".
  • Core lainnya memiliki performa puncak yang lebih rendah, tetapi lebih hemat daya. Ini kadang disebut inti “kecil”.
  • Opsional: satu atau beberapa core menawarkan keseimbangan antara performa dan kekuatan. Titik-titik ini terkadang disebut inti "tengah".

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, inti yang lebih kecil berkaitan dengan indeks yang lebih kecil (misalnya, CPU '0'-'3'), sedangkan inti yang lebih besar sesuai dengan indeks yang lebih tinggi (misalnya CPU '6'-'7') dan inti tengah jika ada akan menempati indeks di antaranya (misalnya, CPU '5'-'6'). Hal ini sesuai dengan konvensi umum, tetapi bukan jaminan.

Jika Anda mendapati bahwa thread tertentu sedang dijadwalkan pada CPU yang tidak memenuhi kebutuhan performa atau dayanya, pertimbangkan untuk menyetel afinitas CPU secara manual untuk thread tersebut.

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 Anda beralih antar-core. Tombol inti tersebut menimbulkan beberapa overhead dari tombol konteks dan hilangnya status dengan cache/register inti.

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

Menyetel afinitas CPU untuk sebuah thread akan memerintahkan sistem untuk menjadwalkannya di core tertentu saat game berada di latar depan. Ada beberapa faktor yang perlu dipertimbangkan saat melakukannya:

  • Software platform tidak dapat menyesuaikan penempatan tugas secara dinamis untuk faktor runtime seperti beban dan throttling termal.
  • Pengujian performa pada perangkat yang berbeda dapat menghasilkan karakteristik performa yang sangat berbeda, terutama jika perangkat sangat bervariasi berdasarkan titik harga atau tanggal rilis.

    Perangkat yang lebih baru atau lebih mahal dapat menjalankan beban kerja tertentu dengan nyaman pada inti yang kecil, tetapi perangkat yang lebih lama atau lebih terjangkau mungkin memerlukan inti yang lebih besar agar dapat memenuhi batas waktu untuk workload yang sama.

  • Dengan memaksakan afinitas ke inti besar, Anda dapat meningkatkan pengurasan baterai dan beban termal.

Karena alasan ini, sebaiknya hindari menyetel afinitas CPU secara manual.