Apakah Linux masuk ke kernel di semua core?

Untuk komputer multi-core yang menjalankan Linux 2.6.x, apa yang terjadi ketika sebuah thread melakukan panggilan sistem? Apakah itu masuk ke kernel hanya pada inti tempat thread berjalan, atau apakah itu masuk ke kernel pada semua inti (maaf jika ini pertanyaan pemula).

Apakah perilaku ini (yang mana yang benar) sama ketika menerima interupsi secara umum? Jika tidak, apa perbedaannya?


person user249060    schedule 12.01.2010    source sumber


Jawaban (2)


Hanya thread yang melakukan syscall yang masuk ke kernel. Semua penjadwalan di Linux dilakukan berdasarkan granularitas thread. Adapun interupsi - mereka dialihkan ke satu inti, yaitu hanya satu prosesor yang diinterupsi untuk setiap peristiwa perangkat keras tertentu. Kemudian interupsi dapat ditetapkan secara manual ke inti tertentu. Ini dilakukan dengan topeng di /proc/irq/IRQ-NUMBER/smp_affinity. Anda dapat melihat CPU mana yang menerima interupsi perangkat keras di /proc/interrupts.

person Nikolai Fetissov    schedule 12.01.2010

Hanya satu inti yang menangani panggilan sistem, dan hanya satu inti yang menangani interupsi.

Saya tidak mempunyai referensi apa pun tentang bagaimana tepatnya interupsi dirutekan - mungkin Panduan Pemrograman Sistem Intel akan sangat membantu di sini.

Tapi, bayangkan jika semua core terganggu oleh setiap panggilan atau interupsi sistem. Linux dirancang untuk menskalakan banyak core. Hal ini akan mematikan skalabilitas tersebut - pada server besar, setiap I/O disk, interupsi pengatur waktu, dll., akan secara efektif menghentikan setiap inti dalam sistem, mencegahnya melakukan pekerjaan yang berguna.

person Michael    schedule 12.01.2010