Bu, çalıştırdığınız uygulamanın türüne çok bağlıdır. Çok tetikleyici mutlu WRT sistemlerine sahip uygulamalarınız varsa, yüksek miktarda içerik değiştirmeyi görmeyi bekleyebilirsiniz. Uygulamalarınızın çoğu boşta durursa ve yalnızca bir sokette bir şeyler olduğunda uyanırsanız, düşük bağlam geçiş hızları görmeyi bekleyebilirsiniz.
Sistem çağrıları
Sistem çağrıları, bağlam anahtarlarına kendi doğası gereği neden olur. Bir süreç bir sistem çağrısı yaptığında, temel olarak çekirdeğe, işlemin ayrıcalıklı olmadığı şeyleri yapması için o andaki zamanından ve belleğinden devralmasını ve yapıldığında aynı noktaya geri dönmesini söyler.
Yazma (2) sisteminin Linux'tan tanımına baktığımızda, bu çok açık bir şekilde ortaya çıkıyor:
ADI
write - bir dosya tanıtıcısına yaz
ÖZET
#Dahil etmek
ssize_t write (int fd, const void * buf, size_t sayısı);
AÇIKLAMA
write (), dosyaya sivri uçlu bellekten bayt saymaya kadar yazar
dosya tanıtıcısı fd. [..]
GERİ DÖNÜŞ DEĞERİ
Başarı durumunda, yazılan bayt sayısı döndürülür (sıfır
hiçbir şey yazılmadı). Hata durumunda, -1 döndürülür ve errno ayarlanır
uygun şekilde.
[..]
Bu, temel olarak çekirdeğe, işlemden işlemi devralmasını, count
baytlara gitmesini , işaret ettiği bellek adresinden başlayarak mevcut işlemin *buf
dosya tanımlayıcısını fd
bildirmesini ve ardından işleme geri dönmesini ve ona nasıl gittiğini anlatmasını söyler.
Bunu göstermek için güzel bir örnek Valve Source tabanlı oyunlar hlds için özel oyun sunucusu . http://nopaste.narf.at/f1b22dbc9 , üzerinde hiçbir oynatıcısı olmayan tek bir oyun sunucusu örneği tarafından yapılan bir saniyelik sistem çağrılarını gösterir. Bu işlem bir Xeon X3220'de (2.4Ghz) yaklaşık% 3 CPU süresi alıyor ve bu size bunun ne kadar pahalı olduğu konusunda bir fikir veriyor.
Çok Amaçlı
Başka bir bağlam değiştirme kaynağı, sistem çağrısı yapmayan, ancak diğer işlemlere yer açmak için verilen bir CPU'dan ayrılması gereken işlemler olabilir.
Bunu görselleştirmenin güzel bir yolu cpuburn . cpuburn herhangi bir sistem çağrısı yapmaz, sadece kendi hafızası üzerinde yinelenir, bu nedenle herhangi bir bağlam değişimine neden olmamalıdır.
Boşta bir makine alın, vmstat'ı başlatın ve daha sonra sistemin sahip olduğu her CPU çekirdeği için bir burnMMX (veya cpuburn paketinden farklı bir test) çalıştırın. O zamana kadar tam sistem kullanımına sahip olmanız gerekir, ancak içerik bağlamında herhangi bir artış olmaz. Sonra birkaç işlem daha başlatmaya çalışın. İşlemler CPU çekirdeği üzerinde rekabet etmeye başladığında içerik değiştirme oranının arttığını göreceksiniz. Geçiş miktarı, işlem / çekirdek oranına ve çekirdeğinizin çoklu görev çözünürlüğüne bağlıdır.
daha fazla okuma
linfo.org, bağlam anahtarlarının ve sistem çağrılarının ne olduğuna dair güzel bir yazı yazıyor . Wikipedia genel bilgiler ve Sistem aramalarında hoş bir bağlantı koleksiyonuna sahiptir.