Ini sangat tergantung pada jenis aplikasi yang Anda jalankan. Jika Anda memiliki aplikasi yang syscalls WRT yang sangat memicu-senang Anda dapat mengharapkan untuk melihat sejumlah besar pengalihan konteks. Jika sebagian besar aplikasi Anda menganggur dan hanya bangun ketika ada hal-hal yang terjadi pada soket, Anda dapat mengharapkan untuk melihat tingkat switch konteks rendah.
Panggilan sistem
Panggilan sistem menyebabkan perubahan konteks berdasarkan sifatnya sendiri. Ketika suatu proses melakukan panggilan sistem, itu pada dasarnya memberitahu kernel untuk mengambil alih dari titik waktu dan memori saat ini untuk melakukan hal-hal yang prosesnya tidak istimewa untuk dilakukan, dan kembali ke tempat yang sama ketika selesai.
Ketika kita melihat definisi dari syscall write (2) dari Linux, ini menjadi sangat jelas:
NAMA
tulis - tulis ke deskriptor file
RINGKASAN
#termasuk
ssize_t write (int fd, const void * buf, size_t count);
DESKRIPSI
tulis () tulis hingga hitung byte dari buffer menunjuk buf ke file
disebut oleh deskriptor file fd. [..]
NILAI KEMBALI
Jika berhasil, jumlah byte yang ditulis dikembalikan (nol menunjukkan
tidak ada yang tertulis). Pada kesalahan, -1 dikembalikan, dan errno diatur
secara tepat.
[..]
Ini pada dasarnya memberitahu kernel untuk mengambil alih operasi dari proses, naik ke count
byte, mulai dari alamat memori yang ditunjuk oleh *buf
untuk mengajukan deskriptor fd
dari proses saat ini dan kemudian kembali ke proses dan katakan padanya bagaimana prosesnya.
Contoh yang bagus untuk menunjukkan ini adalah server game khusus untuk game berbasis Valve Source, hlds . http://nopaste.narf.at/f1b22dbc9 menunjukkan syscalls senilai satu detik dilakukan oleh satu instance dari server game yang tidak memiliki pemain di dalamnya. Proses ini memakan waktu sekitar 3% waktu CPU pada Xeon X3220 (2.4Ghz), hanya untuk memberi Anda perasaan betapa mahal ini.
Multi-Penugasan
Sumber lain dari pengalihan konteks mungkin proses yang tidak melakukan syscall, tetapi perlu dipindahkan dari CPU yang diberikan untuk memberi ruang bagi proses lain.
Cara yang bagus untuk memvisualisasikan ini adalah cpuburn . cpuburn tidak melakukan syscalls itu sendiri, ia hanya mengulangi ingatannya sendiri, jadi seharusnya tidak menyebabkan perubahan konteks.
Ambil mesin siaga, mulai vmstat dan kemudian jalankan burnMMX (atau tes berbeda dari paket cpuburn) untuk setiap inti CPU yang dimiliki sistem. Anda harus memiliki pemanfaatan sistem penuh pada saat itu tetapi hampir tidak ada peningkatan konteks switching. Kemudian cobalah untuk memulai beberapa proses lagi. Anda akan melihat bahwa konteks switching rate meningkat ketika proses mulai bersaing dengan core CPU. Jumlah switching tergantung pada proses / rasio inti dan resolusi multitasking dari kernel Anda.
Bacaan lebih lanjut
linfo.org memiliki artikel bagus tentang konteks switch dan panggilan sistem . Wikipedia memiliki informasi umum dan koleksi tautan yang bagus tentang Panggilan sistem.