Bir donanım yönlendiricisi neden daha iyi özelliklere sahip (RAM ve CPU) bir Linux yönlendiricisinden daha iyi performans gösteriyor?


44

Her biri birer kamu trafiği ve diğeri özel, NATing işlemini gerçekleştiren birbirine bağlanan 4 NIC (1 Gbps) ağ geçidi olarak çalışan en az CentOS 6.3, 64 bit var. 6 GB RAM ve 4 mantıksal çekirdeğe sahiptir. Bunu son iki yıldır problemsiz kullanıyoruz.

Donanım yönlendiricileri ile ilgili herhangi bir deneyimim yok, ancak daha az RAM ve CPU'ya sahip olduklarını ve flash disk kullandıklarını duydum. Düşük donanım yapılandırmasına sahip bir kutu, daha fazla RAM ve CPU'ya sahip bir makineden daha iyi (aynı anda daha fazla eşzamanlı bağlantıyla başa çıkabiliyor) nasıl yapılabilir?

Bunu ele almak için farklı yöntemler kullanan IOS dışındaki sınırlayıcı faktörler nelerdir?


5
Donanımdaki uygulamalar daha hızlı, daha sonra aynı çözüm için yazılım daha hızlıdır.
mdpc

3
Bahsettiğiniz "daha iyi özellikler" eldeki işle alakasız. Aslında önemli olan başka özellikler var.
ndim

Tamam, öyleyse ... yazdıklarından, Centos'unun sanal bir makine olduğunu varsaymalı mıyım? Sanal makineler için hem hipervizörde hem de konuk tarafında özel ağ optimizasyonlarının yanı sıra, sanal makinelerin genellikle bu tür bir rolde iyi olmadığı bilinir ... yönlendirici / güvenlik duvarı olarak kullanım için her zaman çıplak metal önerilir!
taşlanarak

Aslında yapılandırmanızın önerdiği şekilde 1Gbps trafiği yönlendiriyor musunuz? Kumla dolu bir kürek taşımak için bir damperli kamyon kullanıyor olabilirsiniz. 6GB RAM ve 4 çekirdeğe bir yönlendirici için hiçbir zaman dokunulmayacak, bu işi yapmak için küçük bir Intel Atom makinesi kullanarak elektrik ve raf alanı tasarrufu sağlayabilirsiniz.
Bert

Yanıtlar:


64

ASIC'ler .

Genel amaçlı bir CPU ve göreve özgü yazılım kullanmak yerine, yazılımı atlayabilir ve silisyumun doğrudan görevi yerine getirmesini sağlayabilirsiniz.

Yüksek performanslı ağ donanımı, bir IP adresini çok büyük bir İnternet yönlendirme tablosuna karşılaştırmak, bir anahtarlama kararı için bir CAM tablosunu kontrol etmek veya bir ACL'ye karşı bir paketi kontrol etmek gibi bir şeyin hesaplama ağır (ancak nispeten mantıksal olarak basit) görevleri için yazılım yerine ASIC'leri kullanır . Bu, zamana duyarlı işlemlerin hızında muazzam bir fark yaratarak genel amaçlı bir işlemciye göre önemli bir avantaj sağlar.


1
shane ile aynı fikirdeyken, herhangi bir gün genel bir sunucuda çalışan iptables'ları seçerdim. Şirketimde fedora ile çalışan iptables daha hızlı, daha esnek, yapılandırması daha kolay, işlemci ve bellekte daha az vergi, önyükleme işleminden daha hızlı ve cisco asa'dan daha ucuz.
rvh

@ rvh: güvenlik duvarı mı yoksa sadece yönlendirme mi?
mveroone

2
ve genel olarak, 'hız' burada oldukça gevşek bir terimdir. Bir bilgisayarın hala bir HW kadar hızlı bir işlem yapabileceği veya HW'den daha uzun süren bir sabit süreye sahip olabileceği pek çok durum vardır. Ancak bu gerçekten kararlılığa iniyor ve 'paranın karşılığını alıyor' - hala bir cihazla daha az RAM / CPU satın alıyorsunuz, ancak bundan daha fazla yararlanıyor ve sadece istikrarı elde etmek için ihtiyaç duyduğu şeyi yapıyor
Colin Godsey

Bu cevap, ihmal nedeniyle yanlıştır. Sadece "ASIC" lere bağırmak, aynı zamanda NAT yapan çoğu yönlendiricinin, aşırı performansa girmediğimiz sürece genel amaçlı CPU'ları kullanması nedeniyle biraz da saf. Ayrıca aslında donanım-NAT yönlendiricileri, eşzamanlı bağlantıların sayısı konusunda daha güçlü sınırlara sahiptir. OP'nin deneyimlediği şey yanlış yapılandırma ve göreve uygun olmayan bir işletim sisteminin kullanılmasıdır.
16'da 22

@dualed most routers that do NAT use general purpose CPUsEvet, bu doğru bir ifadedir, ancak bu cihazların birçoğunun belirli işlemleri özel yongalara boşalttığı gerçeğini görmezden gelin . NAT ve bağlantı izleme (ki, katılıyorum, modern cihazlarda ASIC'lerde olmadı), yönlendirme tablosu ve boşaltmayı değiştirmeyi düşünmeyin.
Shane Madden

12

Üst düzey, özel bir yönlendirici, daha hızlı CPU ve daha fazla RAM içeren bir PC'den daha iyi performans gösterebilir, çünkü donanımdaki yönlendirmeden daha fazlasını yapabilir.

60 dolarlık bir Gigabit Ethernet anahtarının, Ethernet anahtarı olarak işlev gören 4 adet iki bağlantı noktalı GigE kartıyla 2.000 dolarlık bir PC'den daha iyi performans göstermesinin aynı nedeni. Anahtar, sıfırdan bir anahtar olarak oluşturulmuştur.


3
Özel yönlendirici bir flash disk üzerinde çalıştığından, uygun olmayan zamanlarda başarısız olacak daha az hareketli parça vardır.
cpt_fink

3
Haklı olduğuna gerçekten emin değilim. Netmap ( info.iet.unipi.it/~luigi/netmap ) tabanlı çalıştığım bir şirket için çok temel bir DDOS koruması oluşturdum ve normal donanımda bile çok iyi bir performans sergiledi (gerçekten tam 1 Gb / sn veya 11M paket / sn). Ayrıca "normal" donanımda 3M paket / sn yönlendirebilen sitede netmap için openswitch sürümü de var, bunu yapabilen herhangi bir ucuz (500 $) anahtar bilmiyorum, ancak hatalı olabilirim.
XzKto

2
@XzKto Tipik bir ucuz (60 $) 5 portlu GigE switch, paketleri tüm kablo kombinasyonları arasında tam kablo hızında iletebilir. Genellikle, tam, engelleyici olmayan bir çapraz çubuk kullanırlar.
David Schwartz

@XzKto David'in kastedildiği gibi, "kendi arayüzlerine kadar çıkış hızına" erişecek PC'nin aksine, anahtar her porttan-port kombinasyonuna kadardır. Host1'in host2 ve 3 ila 4 ile konuşmasını ve her bir bağlantının tam dubleks ve maksimum çıkışta olmasını sağlayabilirsiniz . Bunu yenemezsin. (ve daha fazla para için, daha fazla liman, neden daha hızlı olduğunu görmek daha kolay). Yönlendirici için de benzer: donanım, yazılımdan daha hızlı bir şekilde yeniden yönlendirilebilir, çünkü yeterli bilgiye sahip olur olmaz yeniden yönlendirilebilir (linux yönlendiriciniz her katmanda bunu yapar, ancak oraya gitme yavaşlar)
Olivier Dulac

11

"IOS dışında"?

IOS hemen hemen bütün fark yaratıyor. CentOS genel amaçlı bir işletim sistemidir. Çok çeşitli donanım konfigürasyonları içeren çok çeşitli senaryolarda yeterince iyi performans gösterecek şekilde tasarlanmıştır. Diğer yandan, IOS, Cisco donanımında bulacağınız çok özel donanım türlerini kullanarak, yalnızca bir ağ ekipmanından beklediğiniz iş yüklerini işlemek için son derece ince ayarlanmıştır.

Tam olarak hangi donanım parçalarını programladığınızı bilmek , performans ve uyumluluk açısından sizi çok uzun bir yol alacaktır.


3
+1. Cisco'nun gerektiğinde yazılımı donanımla değiştirecek mühendislik kaynaklarına ve know-how'a sahip olduğunu da ekleyin . Yani, belirli bir işlem yazılımdan istediğinden daha yavaşsa, bir ASIC tasarlama, mevcut işlem ünitelerine talimatlar ekleme veya hızlandırmaya yardımcı olmak için bir donanım modülü oluşturma konusunda çaba harcayabilirler. Tablolar, hem yazılımı hem de donanımı kontrol etme lüksüne sahip olduğunuzda, baskın bir şekilde performans lehine ipucu verir .
Justin,

Her iki şekilde de çalışır. Donanımın da nadir görülen karmaşık durumlarla uğraşması gerekmez. Sadece bunları yazılıma atar. Yönlendirme döngüleri? Donanımda bununla nasıl başa çıkacağınızı bulmaya çalışmayın.
MSalters

4

Hem yazılım hem de donanım söyleyecek bir şeyleri var. Intel ve TP-Link NIC'in (kalbinde bir Realtek yongası kullanan) jenerik sunucu donanımının yanı sıra, yönlendirmede amaca yönelik ve jenerik amaçlı yazılımı karşılaştırması var.

Donanım tarafında, eğer gemideki ASIC bazı IP trafiği işlemlerini yapabiliyorsa, işlemci yükü daha düşük ve dolayısıyla daha hızlı olabilir. Paket iletmeyi ele alırken ana CPU'yu atlayarak doğrudan DMA ile iletişim kuran iki adet INtel NIC yongasını fark ettim; Bu arada Realtek çipi bir paket geldiğinde araya giriyor.

Yazılım tarafında, yazılım yönlendirmede kullanılmak üzere tasarlanmışsa, daha verimli hale getirilebilir. Hem pfSense + PF (hem de yönlendirici olarak kullanılması amaçlanan değiştirilmiş bir FreeBSD) ve genel amaçlı Ubuntu 12.04 + iptables'ı rotalama yazılımı olarak kullandım ve ilk önce trafiği çok daha hızlı değiştirdim. (Ubuntu 14.04 şimdi Linux 3.13 çekirdeğindeki yeni silmeler sayesinde neredeyse kadar hızlı.)

Bununla birlikte, atanmış yönlendiricinin büyük bir dezavantajı vardır: trafik değiştirmekten başka bir şey yapamaz ve sanallaştırılamaz. Mevcut kenar yönlendiricim, Ubuntu 14.04 çalıştıran ESXi kümemdeki sanal bir makine ve aynı zamanda izinsiz giriş algılama sistemi ve yük dengeleyici olarak da görev yapıyor.


3

AFAIK, genel amaçlı bir işletim sisteminin yüküdür; Bağlantılarınız ne kadar hızlı olursa olsun, paketler çekirdek bağlamında paket bazında ele alınır, sistemdeki gecikme ve gerginliği arttırır. Diğer cevaplarda benden daha iyi açıklandığını düşünüyorum.

Diğer taraftan, Linux sistemlerinden daha zorlu bir rakip yaratabilecek popülerlik ve fizibilite konusunda artan gelecek vaat eden yeni teknolojiler var; yani, InfiniBand

StackOverflow'ta aşağıdaki soru ve cevaplara göz atın: TCP Kernel-bypass Nasıl Uygulanır?

Daha fazla okuma:


2

Bu genellikle linux’da kullanıma hazır ağ yığını / cihaz konfigürasyonunun olmaması nedeniyledir. Neredeyse% 90 durumlarda, ağ trafiğiniz CPU0 tarafından işlenirken, diğerleri boşta kalır. Bu sorunu çözecek olursanız, donanım yönlendiricileri ile olan fark sandığınız kadar sert olmayacaktır. En az RSS veya RPS ayarlamalısınız (CPU’lar arasında sürücü / yığın tabanlı paket işleme dağılımı).

Linux yönlendiricinizin performansına gerçekten önem veriyorsanız ve yeterince zamanınız varsa, bu makaleyi packagecloud blogunda okumanızı öneririm (ayrıca paketleri iletme hakkında da yazı vardır).

Dağılıma bir göz atmanız gerekecekse ve while sleep 1; do cat $some_file_in_procfs; doneCPU maskesi değerlendirme ve el ile smp_affinityyazmanın sıkıcı olduğunu düşünüyorsanız, muhtemelen benim evcil hayvan projesi netutils-linux'umu son derece yararlı buldunuz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.