Bagaimana cara kerja afinitas prosesor Windows dengan CPU hyperthreaded? Mari kita gunakan contoh (gambar) dari sistem dengan empat core, masing-masing dengan virtual core hyper-threaded.
- Inti mana yang sesuai dengan masing-masing "CPU" di bawah ini?
- Apakah (katakanlah) CPU 6 dan CPU 7 di bawah ini mewakili satu inti; HT dan inti sesungguhnya?
- Jika, misalnya, CPU 6 mewakili inti nyata dan CPU 7 sebuah inti HT, akankah utas yang ditugaskan hanya untuk CPU7 hanya mendapatkan sumber daya sisa dari inti nyata? (dengan asumsi inti menjalankan tugas lain)
- Apakah hyperthreading dikelola sepenuhnya di dalam prosesor sedemikian rupa sehingga benang disulap secara internal? Jika demikian, apakah itu pada ruang lingkup CPU atau ruang lingkup inti? Contoh: Jika CPU 6 dan 7 mewakili satu inti, tidak masalah proses mana yang ditugaskan karena CPU akan menetapkan sumber daya yang sesuai untuk thread yang sedang berjalan?
- Saya perhatikan bahwa proses single-threaded yang berjalan lama terpental di sekitar core, setidaknya menurut task manager. Apakah ini berarti bahwa menetapkan proses ke satu inti akan meningkatkan kinerja sedikit (dengan menghindari sakelar konteks dan pembatalan cache, dll.)? Jika demikian, dapatkah saya tahu bahwa saya tidak menggunakan "hanya virtual core"?
Ini semua sangat samar dan membingungkan bagi saya. HT memang hebat, tetapi tampaknya mengurangi transparansi alokasi sumber daya.
windows
scheduling
hyper-threading
affinity
Charles Burns
sumber
sumber
Jawaban:
Dengan asumsi kita memiliki Core 1, 2, 3, dan 4, CPU4 dan CPU5 mewakili core 3.
Tidak ada perbedaan antara keduanya - keduanya memiliki antarmuka perangkat keras fisik ke CPU, antarmuka logis diimplementasikan dalam perangkat keras (lihat Lembar Data Prosesor Intel Core, Volume 1 untuk detail lebih lanjut). Pada dasarnya, setiap inti memiliki dua unit eksekusi yang terpisah, tetapi berbagi beberapa sumber daya yang sama di antara mereka. Inilah sebabnya mengapa dalam kasus-kasus tertentu hyperthreading sebenarnya dapat mengurangi kinerja.
Lihat di atas. Sebuah thread yang ditugaskan untuk HANYA CPU6 atau HANYA CPU7 akan mengeksekusi pada kecepatan yang sama persis (dengan asumsi thread melakukan pekerjaan yang sama, dan core lain dalam prosesor berada pada idle). Windows tahu tentang prosesor yang mendukung HT, dan penjadwal proses mempertimbangkan hal-hal ini.
Kedua. Perangkat keras yang sebenarnya itu sendiri tidak menjadwalkan inti untuk menjalankan program, itulah tugas sistem operasi. CPU itu sendiri, bagaimanapun, bertanggung jawab untuk berbagi sumber daya antara unit eksekusi yang sebenarnya, dan Intel menentukan bagaimana Anda dapat menulis kode untuk membuat ini seefisien mungkin.
Itu adalah perilaku normal, dan tidak, menugaskannya ke satu inti tidak akan meningkatkan kinerja. Yang sedang berkata, jika karena alasan tertentu Anda ingin memastikan satu proses hanya dieksekusi pada inti fisik tunggal, tetapkan ke prosesor logis tunggal.
Alasan proses "terpental" adalah karena penjadwal proses. Ini adalah perilaku normal, dan Anda kemungkinan besar akan mengalami penurunan kinerja dengan membatasi inti apa yang dapat dijalankan oleh proses (terlepas dari berapa banyak utas yang dimilikinya), karena penjadwal proses sekarang harus bekerja lebih keras untuk membuat semuanya berfungsi dengan batasan yang Anda tetapkan. Ya, hukuman ini mungkin dapat diabaikan dalam kebanyakan kasus, tetapi intinya adalah kecuali Anda memiliki alasan untuk melakukan ini, jangan !
sumber
Tata letak CPU seharusnya diatur sehingga sistem operasi yang tidak dapat mengenali semua CPU Anda mendapatkan kinerja semaksimal mungkin. Itu berarti bahwa satu inti virtual dari setiap inti fisik akan didaftar sebelum inti virtual kedua dari inti fisik apa pun terdaftar.
Misalnya, Anda memiliki empat inti berulir yang disebut A, B, C, dan D. Jika Anda menganggap A dan B berbagi cache L2 dan C dan D berbagi cache L2, urutannya harus seperti:
0 = A1 1 = C1 2 = B1 3 = D1 4 = A2 5 = C2 6 = B2 7 = D2
Dengan begitu, sistem operasi yang hanya mengambil dua CPU dapat menggunakan semua cache L2. Juga, sistem operasi yang hanya meraih empat CPU dapat menggunakan semua unit eksekusi.
Sekali lagi, ini memang seharusnya.
Tentu saja, jika Anda menggunakan sistem operasi yang memahami topologi CPU Anda, itu tidak masalah. BIOS mengisi tabel yang menjelaskan core yang berbagi unit eksekusi, yang berbagi cache, dan sebagainya. Setiap sistem operasi modern yang cenderung Anda gunakan yang sepenuhnya mendukung CPU Anda memahami topologi CPU lengkap.
sumber
Pada akhirnya, intinya adalah bahwa sering kali hanya sedikit yang dapat Anda lakukan (sebagai pengguna akhir) dengan afinitas utas untuk secara signifikan memengaruhi kinerja selain memastikan bahwa Anda menjalankan OS terbaru yang mengetahui berbagai bit dalam sistem anda.
Jika Anda menemukan beban kerja di mana secara manual menetapkan afinitas memiliki dampak signifikan, laporkan sebagai bug kepada pengembang aplikasi sehingga program dapat diperbaiki.
sumber