Mengapa satu utas tersebar di seluruh CPU?

24

Saya hanya ingin tahu mengapa penjadwal terus-menerus memindahkan aplikasi di antara CPU, daripada membiarkannya tetap. Tampaknya agak konyol untuk memiliki 4 core pada 25% daripada satu pada 100%.

Apakah ini ada hubungannya dengan panas, atau lebih efisien entah bagaimana? Apakah OS lain melakukannya secara berbeda?

Wawasan atau tautan ke hal-hal yang mendalam akan menyenangkan. (Tidak dapat menemukan banyak sendiri.)

Memperbarui:

Dengan "menyebar" Saya tidak bermaksud bahwa itu dijalankan pada beberapa CPU sekaligus, tetapi sedang dipindahkan dari satu ke yang lain beberapa kali per detik, membuat efek yang terlihat menyebar.

Macke
sumber
3
Bahkan ketika "tidak ada lagi yang dieksekusi", selalu ada utas sistem yang bersaing untuk CPU. Sebagai contoh, O / S memiliki utas untuk menghapus halaman memori yang direklamasi sehingga ketika memori diperlukan, ia akan memiliki beberapa halaman yang siap digunakan. Ketika utas Anda berjalan kembali, cpu yang Anda gunakan mungkin sedang digunakan oleh salah satu utas ini. Apa yang harus dilakukan os? Tunggu atau pindahkan Anda ke cpu baru? Apa pun itu, Anda berakhir dengan perilaku yang tidak diinginkan dalam beberapa kasus.
Tony Lee
Itu goomba. SMB, bukan LBP. :)
Macke
Dalam "jawaban" saya, saya menunjukkan program berulir tunggal berperilaku tepat seperti yang Anda jelaskan, yaitu "dipindahkan dari satu ke yang lain beberapa kali per detik, membuat efek yang terlihat menyebar."
Evan Rosica

Jawaban:

8

Saya pikir wierobtelah menggambarkan hal itu dengan cukup baik.
Berikut ini adalah artikel yang lebih lama membahas processor affinitypengaturan dengan QX6800 quad-core .
(tautan mengarah ke halaman kedua artikel itu).

Jika Anda tidak memaksa afinitas proses ke inti, apakah Anda kehilangan kinerja ?

  • Sementara scheduler Windows perlu memutuskan afinitas tersebut untuk menghindari thrashing dengan cache,
    yang desain prosesor itu sendiri juga mempertimbangkan hal-hal seperti itu.
  • Intel QX6800 quad-core (karena saya merujuknya sebelumnya dalam jawaban ini)
    memiliki cache 8MB L3dibagi di 4 core .

Perlu dicatat bahwa walaupun Anda mungkin telah memilih untuk menjalankan proses satu-threaded tunggal ini pada sistem, OS itu sendiri akan memiliki beberapa tugas lain yang berjalan yang juga perlu dijadwalkan. Penjadwal menyeimbangkan semua aktivitas ini di seluruh kumpulan prosesor yang tersedia (atau inti).


Ke depannya, dengan arsitektur Nehalem dan NUMA ,
prosesor di beberapa soket juga akan dapat menangani akses akses yang lebih baik.
Berikut adalah gambar cepat dari halaman ArsTechnica di NUMA .

masukkan deskripsi gambar di sini

Jika Nehalem dan i7minat Anda, saya memiliki beberapa tautan di jawaban ini .

nik
sumber
Apa yang membuat Anda berpikir bahwa "Ke depan, dengan arsitektur Nehalem dan NUMA, prosesor di beberapa soket juga akan dapat menangani akses akses yang lebih baik." ? Seperti yang saya lihat, NUMA membuat memori lebih lokal dan terkait dengan prosesor, oleh karena itu efek memburuk dari sampah.
Roland Pihlakas
@RolandPihlakas, sudah lama sejak jawaban ini, tetapi melihat artikel arstechnica dan poin-poin ini saya pikir saya memperhitungkan kemampuan platform baru untuk memiliki konektivitas memori yang lebih baik dan perangkat lunak untuk mengambil keuntungan dari itu (karena tidak memiliki opsi dengan beberapa konfigurasi soket pada waktu itu; yaitu sebelum Nehalem).
nik
6

Penjadwal hanya mengeksekusi utas berikutnya yang siap untuk dieksekusi pada inti / CPU "bebas".

Anda dapat menetapkan proses ke CPU tertentu melalui task manager Windows.

Memiliki 4 core pada 25% berarti bahwa 4 thread dijalankan secara bersamaan. Sedangkan, satu inti di x% berarti hanya satu utas yang dijalankan. Jadi yang pertama lebih efisien dalam beberapa kasus.

Tetapi selama eksekusi cache CPU diisi dengan data yang diakses oleh utas. Jadi jika utas dieksekusi pada CPU lain, itu akan mengalami lebih banyak kesalahan cache, yang mahal, karena data tidak ada dalam cache CPU ini.

Apa yang dilakukan utas Anda? Jika utas "tidur" untuk waktu yang sangat singkat, inti yang dieksekusi sebelumnya mungkin ditempati oleh ancaman lain dan karenanya utas Anda dieksekusi pada inti berikutnya yang tersedia. Apa yang terjadi jika Anda menentukan hanya satu inti yang akan digunakan oleh proses Anda (mis. Ia adalah pengelola tugas)?

wierob
sumber
3
afaik Windows scheduler melakukan pekerjaan yang cukup baik untuk menjaga utas pada cpu / core yang sama untuk durasinya untuk menghindari masalah itu.
Paxxi
@ Pär: Utas saya tampaknya mengeksekusi pada setiap inti sebenarnya.
Macke
Ya, mungkin procs OS yang menabrak utasku. Bagaimana cara menerima dua jawaban? :)
Macke
@ PärBjörklund dari pengalaman saya setidaknya Windows XP tidak. Saya pikir masalah "cache-bouncing" telah diperbaiki di Vista atau yang lebih baru
Waxhead
1
"Memiliki 4 inti pada 25% berarti bahwa 4 utas dieksekusi secara bersamaan." Tidak, itu berarti satu utas dijalankan, sedikit pada satu inti, lalu satu utas lainnya dan seterusnya. Karena Task Manager menunjukkan penggunaan rata-rata, itu akan menunjukkan 25% (pada sistem 4 inti, pada dua inti itu akan menunjukkan 50%) untuk setiap inti. Ini berarti inti sepenuhnya digunakan seperempat waktu dan siaga waktu.
David Balažic
0

Ini bukan. Satu utas hanya dapat berjalan pada satu prosesor. Namun, beberapa proses memiliki beberapa utas, yang dapat disebarkan.

Alasannya, percaya atau tidak, tidak pernah mempertimbangkan seperti apa bentuknya. Sistem mencoba untuk menyebar utas karena tidak memiliki cara untuk mengetahui kapan seseorang akan lonjakan.

tsilb
sumber
1
Lihat klarifikasi saya yang ditambahkan. Ini adalah satu utas, berjalan dengan kecepatan penuh, yang dengan cepat dipindah-pindahkan sehingga, seiring waktu, setiap inti (kedepan) sibuk 25%. (Semua proses / utas lainnya diabaikan)
Macke
0

OS memigrasikan utas melintasi inti CPU (dengan cepat, beberapa kali per detik). Lebih efisien untuk menjalankannya pada inti yang sama sepanjang waktu. Ini dapat diberlakukan oleh item menu konteks "Tetapkan afinitas" di Pengelola Tugas.

Perhatikan bahwa biasanya (penggunaan rumah biasa) perbedaannya adalah dalam kisaran beberapa persen.

"4 core masing-masing dengan penggunaan 25%" berarti, sebagaimana Task Manager menunjukkan penggunaan rata-rata, bahwa masing-masing inti sepenuhnya dimanfaatkan seperempat waktu dan membebaskan sisa waktu.

Deskripsi untuk Windows, tetapi serupa pada sistem operasi lain juga.

David Balažic
sumber
-1

Jika ada yang masih membaca ini, saya perhatikan ini juga, dan melakukan beberapa tes untuk melihat apakah itu bukan hanya kebetulan. Ternyata tidak! Saya percaya menyebarkan satu utas ke semua inti lebih efisien karena beberapa alasan:

  1. Menyebarkan satu utas di semua inti memungkinkan konsumsi daya yang lebih rendah. Sebagian besar prosesor menurunkan frekuensi mereka dan, yang lebih penting, tegangan sesuai dengan beban, jadi Core 2 Quad, misalnya, akan mengkonsumsi daya yang jauh lebih sedikit dan menghasilkan lebih sedikit panas dengan menyebarkan satu thread di semua 4 core daripada menggunakan satu core (yang akan menyebabkan peningkatan tegangan di SEMUA core, karena hanya ada satu regulator tegangan * - itu sangat tidak efektif).
  2. Ini memastikan bahwa utas selalu berjalan pada kecepatan maksimum / konstan. Jika utas tiba-tiba meminta lebih banyak daya pemrosesan, satu inti dapat menjadi kelebihan beban dan akan ada penundaan dalam eksekusi. Dengan menyebarkannya melintasi inti, setiap lonjakan tiba-tiba akan ditangani dengan lancar tanpa jeda dan penundaan.

Juga, karena dua pengamatan di atas, saya menjadi percaya bahwa Turbo Boost dan IDA tidak efektif. Mereka mungkin berguna pada sistem operasi yang lebih lama, tetapi Linux dan Windows 7 menyebar semuanya ke semua core dengan cukup efisien. Jadi, Core 2 Quad q9100 @ 2.26 GHz akan hampir (selalu ada pengecualian :-) selalu lebih cepat daripada Core 2 Duo X9100 @ 3.06GHz, dan saya jarang melihatnya menggunakan IDA (pada dasarnya pendahulu Turbo boost, meningkatkan frekuensi pada satu atau dua core hanya untuk aplikasi berulir tunggal).

  • Core 2 Quad memiliki dua domain clock berkat fakta bahwa ada dua die fisik, sehingga dua core dapat berjalan pada frekuensi penuh, sementara dua berada pada frekuensi terendah. Saya tidak tahu apakah ada dua pengatur tegangan, - saya perhatikan bahwa tegangannya seragam di keempat inti, jadi harus ada hanya satu pengatur untuk seluruh paket.
JakL
sumber
3
Ini terdengar meragukan karena beberapa alasan. Harap berikan referensi ke "fakta" Anda. Pertama, mengapa menghitung barang pada 25% pada empat core mengkonsumsi daya kurang dari 100% pada satu? (Saya dapat setuju bahwa panas lebih merata, tetapi ...) Juga, utas dalam pertanyaan saya berjalan dengan kemiringan penuh (100%), sehingga tidak akan "meminta lebih banyak kekuatan pemrosesan", karena sudah melakukan sebanyak mungkin.
Macke
Yah, itu hanya dari pengamatan saya sendiri - saya tertarik dengan IDA dan TurboBoost, memutuskan untuk melakukan beberapa tes. Beberapa waktu yang lalu, tapi saya sampai pada kesimpulan di atas. Prosesor mengkonsumsi lebih sedikit daya, karena semua core bekerja pada tegangan yang lebih rendah - pengurangan 0,1V menghemat sekitar 6-10 Watt dalam konsumsi daya (jika satu core dimuat 100%, semua core berjalan pada tegangan yang lebih tinggi, terlepas dari apakah mereka idle atau tidak). Ini terutama berlaku di Core2Duo dengan mode SLFM. Anda benar tentang utas yang berjalan pada kemiringan penuh tidak meminta taktik prosesor lagi, tetapi ada aplikasi yang memang melakukan ini.
JakL
Tidak ada yang namanya "menyebarkan utas" (tidak, bahkan 5 tahun kemudian). Ada satu utas, dijalankan pada satu inti. Dan kemudian yang lainnya. Dan seterusnya. Pada setiap saat satu core berjalan pada 100% dan yang lainnya idle. Jadi tidak ada tabungan. Terutama seperti yang Anda sebutkan ketika semua core pada tegangan penuh sepanjang waktu (seperti yang Anda katakan, mereka berbagi tegangan). Juga seperti yang sudah dibahas berada pada inti yang sama memastikan thread mendapatkan semua kekuatan pemrosesan yang ada. Karena inti itu sudah 100% digunakan, OS akan menjadwalkan utas lainnya ke inti lain yang kurang dimanfaatkan.
David Balažic