Sunucumun kabul edebileceği oran () yeni gelen TCP bağlantılarını Xen altında çok kötü. Çıplak metal donanımdaki aynı test 3-5x hız artışı göstermektedir.
- Neden bu Xen altında bu kadar kötü?
- Yeni TCP bağlantılarının performansını artırmak için Xen'i değiştirebilir misiniz?
- Bu tür kullanım durumları için daha uygun başka sanallaştırma platformları var mı?
Arka fon
Son zamanlarda, Xen altında çalışan şirket içi geliştirilmiş bir Java sunucusunun performans darboğazlarını araştırıyorum. Sunucu HTTP konuşuyor ve basit TCP connect / request / response / disconnect çağrılarını yanıtlıyor.
Ancak sunucuya trafik yükleri gönderirken bile, saniyede ~ 7000'den fazla TCP bağlantısını kabul edemez (8 çekirdekli EC2 örneğinde, Xen çalışan c1.xlarge). Test sırasında, sunucu ayrıca bir çekirdeğin (zorunlu 0 cpu değil) çok fazla>% 80 yüklendiği ve diğer çekirdeklerin neredeyse boşta kaldığı tuhaf bir davranış sergiler. Bu bana sorunun çekirdek / temel sanallaştırma ile ilgili olduğunu düşündürüyor.
Aynı senaryoyu çıplak metal, sanallaştırılmamış bir platformda test ederken, TCP kabul () oranlarını 35 000 / saniye ötesinde gösteren test sonuçları alıyorum. Bu, tüm çekirdeği neredeyse tamamen doygun hale getiren Ubuntu çalıştıran Core i5 4 çekirdekli bir makinede. Bana göre bu tür rakam doğru görünüyor.
Yine Xen örneğinde sysctl.conf dosyasındaki hemen hemen her ayarı enable / tweak olarak denedim. Paket Alma Direksiyonunu Alma ve Akış Direksiyonunu etkinleştirme ve işlemcileri CPU'lara sabitleme, ancak belirgin bir kazanç olmadan sabitleme dahil.
Sanallaştırılmış çalışma sırasında düşük performans beklendiğini biliyorum. Ama bu derecede? Daha yavaş, çıplak bir metal sunucu daha iyi performans gösteriyor. 5 çekirdekli 8 çekirdekli?
- Bu gerçekten Xen’in beklenen davranışı mı?
- Yeni TCP bağlantılarının performansını artırmak için Xen'i değiştirebilir misiniz?
- Bu tür kullanım durumları için daha uygun başka sanallaştırma platformları var mı?
Bu davranışı tekrarlama
Bunu daha fazla araştırırken ve sorunu tespit ederken netperf performans test aracının yaşadığım benzer senaryoyu simüle edebileceğini öğrendim. Netperf'in TCP_CRR testini kullanarak farklı sunuculardan (hem sanallaştırılmış hem de sanal olmayan) çeşitli raporlar topladım. Bazı bulgulara katkıda bulunmak veya mevcut raporlarıma bakmak istiyorsanız, lütfen https://gist.github.com/985475 adresine bakın.
Bu sorunun kötü yazılmış yazılımlardan kaynaklanmadığını nasıl bilebilirim?
- Sunucu, çıplak metal donanım üzerinde test edilmiştir ve neredeyse mevcut tüm çekirdekleri doyurmaktadır.
- Canlı tutma TCP bağlantılarını kullanırken, sorun ortadan kalkar.
Bu neden önemli?
At ESN (benim işveren) Ben proje kurşun duyuyorum Beaconpush , Java ile yazılmış bir Comet / Web Soket sunucusundan. Çok performans göstermesine ve optimum koşullarda verilen neredeyse tüm bant genişliğini doyurabilmesine rağmen, yeni TCP bağlantılarının ne kadar hızlı yapılabileceği ile sınırlıdır. Diğer bir deyişle, kullanıcıların çok sık gelip gittiği büyük bir kullanıcı karmaşasına sahipseniz, birçok TCP bağlantısının kurulması / parçalanması gerekir. Bu bağlantılarını mümkün olduğu kadar uzun süre canlı tutmaya çalışıyoruz. Fakat sonunda, accept () performansı, çekirdeklerimizin dönmesini engelleyen şeydir ve bundan hoşlanmıyoruz.
Güncelleme 1
Birisi bu soruyu Hacker News'e gönderdi , orada da bazı sorular / cevaplar var. Ancak, bu soruyu ilerledikçe bulabildiğim bilgilerle güncel tutmaya çalışacağım.
Bunu üzerinde test ettik donanım / platformlar:
- C1.xlarge (8 çekirdekli, 7 GB RAM) ve cc1.4xlarge (2x Intel Xeon X5570, 23 GB RAM) örnekli EC2. Kullanılan AMI'ler sırasıyla ami-08f40561 ve ami-1cad5275'tir. Birisi ayrıca "Güvenlik Grupları" nın (yani EC2'nin güvenlik duvarını) da etkileyebileceğini belirtti. Ancak bu test senaryosunda, bunun gibi dış etkenleri ortadan kaldırmak için yalnızca localhost'ta denedim. Duyduğum bir diğer söylenti, EC2 örneklerinin 100k PPS'den daha fazla zorlayamayacağı.
- Xen çalıştıran iki özel sanallaştırılmış sunucu. Biri testten önce sıfır yüke sahipti ancak bir fark yaratmadı.
- Özel, Rackspace'de Xen sunucusu. Orada aynı sonuçlar hakkında.
Bu testleri tekrar denemek ve raporları https://gist.github.com/985475 adresinden doldurmaktayım . Yardım etmek isterseniz, numaralarınıza katkıda bulunun. Bu kolay!
(Eylem planı ayrı ve konsolide bir cevaba taşınmıştır)