Hi Linux / UNIX Overlords,
Apakah ada di antara Anda yang memiliki aturan praktis tentang berapa banyak saklar konteks (per inti prosesor) yang Normal pada server Linux?
Kuliah saya di sini membawanya, dan dia melihat 16K pada mesin 8-core x86_64
.
Berikut adalah beberapa statistik dari sarface selama beberapa hari terakhir ...
alt teks http://src.autonomy.net.au/imagebin/81895e338fae67d3d205c09db44a81e6-Picture_10.png
Dan untuk melihat statistik proses pembuatan, berikut adalah tampilan logaritmik dari grafik yang sama ...
alt teks http://src.autonomy.net.au/imagebin/7481f7e52bead4effc90248fc23c72fe-Picture_11.png
Dan 8 core bosan sampai mati ...
alt teks http://src.autonomy.net.au/imagebin/0e94326652e977fd74edcd840f94200f-Picture_12.png
CS vs IOwait (skala x10000)
alt teks http://src.autonomy.net.au/imagebin/a52a2a8a120394849c0da4045933e306-Picture_13.png
Informasi lebih berguna jika ada yang bertanya ..
- Penyimpanan yang bekerja pada server adalah 0.5TB SAN via FC
- Ada 8GB RAM, kebanyakan cache - tidak ada pertukaran.
sumber
Jawaban:
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:
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 deskriptorfd
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.
sumber
System calls cause context switches by their very own nature
sepertinya salah. Panggilan sistem menyebabkan mode beralih seperti yang dinyatakan oleh linfo.org/context_switch.htmlserver web saya yang memuat cukup sekitar 100-150 aktif per detik dengan puncak ke ribuan.
Tingkat peralihan konteks tinggi itu sendiri bukanlah masalah, tetapi mereka mungkin menunjukkan jalan menuju masalah yang lebih signifikan.
sunting: Sakelar konteks adalah gejala, bukan penyebab. Apa yang Anda coba jalankan di server? Jika Anda memiliki mesin multiprosesor, Anda mungkin ingin mencoba mengatur afinitas cpu untuk proses server utama Anda.
Atau jika Anda menjalankan X, coba turunkan ke mode konsol.
sunting lagi: pada 16k cs per detik, masing-masing cpu adalah rata-rata dua sakelar per milidetik - yaitu setengah hingga seperenam dari kutu waktu normal. Mungkinkah dia menjalankan banyak utas terikat IO?
edit lagi posting grafik: Jelas terlihat IO terikat. Apakah sistem menghabiskan sebagian besar waktunya di SYS ketika konteks switch tinggi?
sunting sekali lagi: iowait tinggi dan sistem dalam grafik terakhir itu - sepenuhnya memudarkan ruang pengguna. Anda memiliki masalah IO.
Kartu FC apa yang Anda gunakan?
edit: hmmm. ada kemungkinan mendapatkan beberapa tolok ukur terjadi pada akses SAN Anda dengan bonnie ++ atau dbench selama deadtime? Saya akan tertarik melihat apakah mereka memiliki hasil yang sama.
sunting: Telah memikirkan hal ini selama akhir pekan dan saya telah melihat patters penggunaan yang serupa ketika Bonnie melakukan pass "tulis byte pada suatu waktu". Itu mungkin menjelaskan jumlah besar peralihan yang terjadi, karena setiap penulisan akan membutuhkan syscall terpisah.
sumber
Saya lebih cenderung khawatir tentang tingkat hunian CPU dari status sistem. Jika mendekati 10% atau lebih tinggi, itu berarti OS Anda menghabiskan terlalu banyak waktu untuk beralih konteks. Meskipun memindahkan beberapa proses ke komputer lain jauh lebih lambat, itu layak untuk dilakukan.
sumber
Hal-hal seperti inilah mengapa Anda harus mencoba dan menjaga baseline kinerja untuk server Anda. Dengan begitu, Anda dapat membandingkan hal-hal yang tiba-tiba Anda perhatikan dengan hal-hal yang telah Anda rekam di masa lalu.
Yang mengatakan, saya memiliki server yang berjalan (server Oracle tidak terlalu sibuk, terutama), yang stabil sekitar 2k dengan beberapa puncak 4k. Untuk server saya, itu normal, untuk server orang lain yang mungkin terlalu rendah atau terlalu tinggi.
Seberapa jauh Anda bisa kembali ke data Anda?
Informasi CPU macam apa yang dapat Anda berikan kepada kami?
sumber
Tidak ada aturan praktis. Switch konteks hanyalah CPU yang bergerak dari memproses satu utas ke yang lain. Jika Anda menjalankan banyak proses (atau beberapa yang sangat berulir) Anda akan melihat lebih banyak sakelar. Untungnya, Anda tidak perlu khawatir tentang berapa banyak konteks yang ada - biayanya kecil dan lebih atau lebih tidak dapat dihindari.
sumber