Merhaba Linux/UNIX Derebeyleri,
Bir Linux sunucusunda kaç tane bağlam anahtarının (işlemci çekirdeği başına) Normal olduğuna dair bir kuralınız var mı?
Buradaki kolejim bunu getirdi ve 8 çekirdekli bir
x86_64 Makinede 16K görüyor.
İşte son birkaç gündeki sarface'den bazı istatistikler ...
Ve süreç oluşturma istatistiklerini görmek için, aynı grafiğin logaritmik bir görünümü ...
Ve 8 çekirdek ölüme sıkıldı ...
CS ve IOwait (x10000 ölçeği)
Herhangi birinin sorması durumunda daha işe yaramaz bilgi ..
Bu, büyük ölçüde çalıştırdığınız uygulamanın türüne bağlıdır. Çok tetikleyici WRT sistem çağrıları olan uygulamalarınız varsa, yüksek miktarda bağlam geçişi görmeyi bekleyebilirsiniz. Uygulamalarınızın çoğu boşta kalırsa ve yalnızca bir sokette bir şeyler olduğunda uyanırsa, düşük bağlam değiştirme oranlarını görmeyi bekleyebilirsiniz.
Sistem çağrıları kendi doğası gereği bağlam değişikliğine neden olur. Bir işlem bir sistem çağrısı yaptığında, temel olarak çekirdeğe geçerli noktadan devralmasını ve işlemin imtiyazlı olmadığı şeyleri yapmasını ve bellek bittiğinde aynı noktaya dönmesini söyler.
Linux'tan write (2) syscall tanımına baktığımızda, bu çok açık bir şekilde ortaya çıkıyor:
NAME Write - bir dosya tanımlayıcısına yaz SYNOPSIS #İnclude [.____. Ssize_t write (int fd, const void * buf, size_t sayımı); AÇIKLAMA write (), tampon işaretli bufeden atılan baytları saymak için yazar dosya tanıtıcısı fd. [..] DÖNÜŞ DEĞERİ Başarı durumunda, yazılan bayt sayısı döndürülür (sıfır, Hiçbir şeyin yazılmadığını gösterir). Hata durumunda -1 döndürülür ve errno Uygun şekilde ayarlanır. [..]
Bu temel olarak çekirdeğe işlemi
count bayta kadar hareket etmesini,
*buf İle gösterilen bellek adresinden başlayarak geçerli dosya tanımlayıcısına
fd aktarmasını söyler. sonra tekrar işleme dönüp ona nasıl gittiğini söyle.
Bunu göstermek için güzel bir örnek, Valve Source tabanlı oyunlar için özel oyun sunucusudur, hlds . http://nopaste.narf.at/f1b22dbc9 , üzerinde hiçbir oyuncu bulunmayan bir oyun sunucusunun tek bir örneği tarafından yapılan bir saniyelik sistem çağrılarını gösterir. Bu işlem, Xeon X3220 (2.4Ghz) üzerinde yaklaşık% 3 CPU zamanı alır, bu da size bunun ne kadar pahalı olduğuna dair bir his verir.
Bağlam değiştirmenin başka bir kaynağı, sistem çağrısı yapmayan, ancak diğer işlemlere yer açmak için belirli bir CPU'dan taşınması gereken süreçler olabilir.
Bunu görselleştirmenin güzel bir yolu cpuburn . cpuburn herhangi bir sistem çağrısı yapmaz, sadece kendi hafızasını tekrarlar, bu yüzden herhangi bir bağlam değişikliğine neden olmamalıdır.
Boş bir makine alın, vmstat'ı başlatın ve ardından 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 geçişi neredeyse hiç artmaz. Ardından birkaç işlem daha başlatmayı deneyin. İşlemler CPU çekirdeği üzerinde rekabet etmeye başladığında bağlam değiştirme oranının arttığını göreceksiniz. Anahtarlama miktarı, işlemlerin/çekirdek oranının ve çekirdeğinizin çoklu görev çözünürlüğüne bağlıdır.
orta derecede yüklü web sunucum 100-150 anahtarda oturuyor ve çoğu zaman zirveleri binlere çeviriyor.
Yüksek bağlam değiştirme oranları kendileri için bir sorun değildir, ancak daha önemli bir soruna yol açabilirler.
edit: Bağlam anahtarları bir neden değil, bir semptomdur. Sunucuda ne çalıştırmaya çalışıyorsunuz? Çok işlemcili bir makineniz varsa, ana sunucu işlemleriniz için cpu benzeşimi ayarlamayı deneyebilirsiniz.
Alternatif olarak X kullanıyorsanız, konsol moduna geçmeyi deneyin.
tekrar düzenleme: saniyede 16k cs'de, her cpu, milisaniye başına iki anahtarın ortalamasını alır - bu, normal zaman diliminin yarısının altıda birine karşılık gelir. Çok sayıda IO ilişkili iş parçacığı çalıştırıyor olabilir mi?
tekrar düzenleme sonrası grafikler: Kesinlikle görünüyor IO bağlı. Sistem zamanının çoğunu bağlam anahtarları yüksek olduğunda SYS'de geçiriyor mu?
bir kez daha düzenleyin: Son grafikte yüksek iowait ve sistem - tamamen kullanıcı alanını yansıtan. IO sorunlarınız var.
Hangi FC kartını kullanıyorsunuz?
düzenlemek: hmmm. bazı kriterler SAN bonnie ++ veya dbench ile deadtime sırasında erişim oluyor herhangi bir şans? Benzer sonuçlara sahip olup olmadığını görmek istiyorum.
edit: Hafta sonu boyunca bu konuda düşünüyorum ve bonnie "bir seferde bir bayt yazmak" geçişi yaparken benzer kullanım patters gördüm. Her yazma işlemi ayrı bir sistem çağrısı gerektireceğinden, bu durum büyük miktarda anahtarlamanın devam ettiğini açıklayabilir.
Bunun gibi şeyler, sunucularınız için performans taban çizgilerini neden denemelisiniz. Bu şekilde, aniden fark ettiğiniz şeyleri geçmişte kaydettiğiniz şeylerle karşılaştırabilirsiniz.
Yani, bazı 4k zirveleri ile 2k civarında sabit olan sunucuları (özellikle çok meşgul Oracle sunucuları değil) var dedi. Sunucularım için, bu normaldir, diğer kişilerin sunucuları için çok düşük veya çok yüksek olabilir.
Verilerinize ne kadar ileri gidebilirsiniz?
Bize ne tür CPU bilgileri verebilirsiniz?
Sistem durumunun CPU doluluk oranı hakkında endişelenmeye daha yatkınım. % 10 veya daha yüksek bir değere sahipse, işletim sisteminiz bağlam anahtarlarını yapmak için çok fazla zaman harcıyor demektir. Bazı işlemleri başka bir makineye taşımakla birlikte much daha yavaş olsa da, yani.
Temel kural yok. Bağlam anahtarı, yalnızca bir iş parçacığını işlemden diğerine hareket eden CPU'dur. Çok sayıda işlem (veya birkaç yüksek iş parçacıklı işlem) çalıştırırsanız daha fazla anahtar görürsünüz. Neyse ki, kaç bağlam anahtarının olduğu konusunda endişelenmenize gerek yok - maliyet küçük ve az çok kaçınılmaz.