Bir işlemci saniyede 10 Gigabit veya daha fazla veri hızıyla nasıl başa çıkabilir?


11

Sormak için doğru yer olup olmadığını bilmiyorum. Çok aptalca bir soru olabilir. Bazı işlemcilerin anahtarlama / yönlendirme için veri çerçevelerini işlemesi gerektiğini varsayıyorum. Modern işlemciler birkaç GHz hıza sahiptir. Bir hızda gelen verileri işlediklerinden daha hızlı nasıl ele alırlar?

Yanıtlar:


16

Tamamen haklısınız, eğer bit başına bir talimat döngüsü kullanmamız gerekiyorsa, 10Gbps elde edilemez. Dikkat edilmesi gereken ilk şey, CPU komutu başına 64 bit - bir kelimeyi ele almamızdır.

O zaman bile performans için yapabileceğimiz en kötü şey CPU'nun bir paketin tüm kelimelerine erişmesini sağlamaktır. Böylece paketlerin "sıfır kopya" işleme odaklanın. Bu hilelerin bazıları arayüzlerde: DMA ("Doğrudan bellek erişimi") var, böylece ethernet denetleyici yongası verileri RAM'e kopyalar; checksum'ları hesaplar, böylece CPU paketteki tüm kelimelere erişmek zorunda kalmaz. Bazıları veri yapısı tasarımındadır: paket arabelleklerini hizalamaya özen gösteririz, böylece bir sayfa tablosu girişinin bayiliğini değiştirerek bunları taşıyabiliriz. Bazıları, paket verisine en az sayıda erişilmesini ve tercihen alıcı uygulama programına kadar hiç erişilmemesini sağlamak için dikkatli bir programlamadır.

Tüm bunları yaptıktan sonra, bir sonraki sınırlama, paketlerin teker teker taşınmasıdır. Böylece hem ethernet denetleyicisinde hem de çekirdeğinde bir "segmentasyon yükü" özelliği yığını vardır, böylece paket gruplarını işleriz. Hatta bu grupların daha büyük olması için ethernet denetleyicisinden veri almayı geciktiriyoruz.

Son olarak, çok az iş kullanarak diskten ağa hızlı bir yol olan çekirdeğin sendfile () çağrısı gibi özel durum kısayollarımız var.

Ağ arabirim kartlarının donanım özelliklerini kullanarak ve PCI veri yolunu CPU'yu dahil etmek yerine kartlar arasında bir veri yolu olarak ele alarak özel durum yönlendirmesi (paketlerin bir arabirimden diğerine iletilmesi) bile yapabiliriz. Bu genel amaçlı işletim sistemlerinde yapılamaz, ancak Intel gibi satıcılar bu özellikleri ethernet denetleyicilerine uygulamak için yazılım kitaplıkları sağlar.

CPU'lardan tamamen uzaklaşarak, donanımda tüm yönlendirme görevlerinin gerçekleştiği özel amaçlı yönlendiriciler bile oluşturabiliriz. PCI veri yolu bir sınırlama olacağından, birden fazla paralel veri yolu çalıştırırlar; hatta birden fazla paralel çapraz çubuk anahtarı grubuna birden fazla paralel veri yolu. Pazarın bir ucunda küçük bir TCAM tabanlı ethernet anahtarı örnek olarak gösterilebilir; pazarın diğer ucunda Juniper M40 kanonik bir tasarım olurdu.

Tipik bir anahtar, bir paket almaya başlar, TCAM'deki hedef adresini arar, pakete çıkış portu olan bir etiket ekler ve sonra hala gelen paketi çıkış portunun kontrolörüne DMA ekler. Çıkış bağlantı noktası tıkanırsa, bu basit anahtarda yapılabileceklerin hepsinin giriş paketini atmak olduğunu unutmayın. Bu nedenle basit anahtarlar, bağlantıların hızı değiştirdiği ve bazı kuyrukların istendiği durumlarda iyi bir seçim yapmaz. Elbette, daha fazla ödediğiniz daha karmaşık anahtarlar var.

Tipik bir yönlendirici bir paket alır ve kısa bir kuyrukta tutar. Hedef IP adresi statik RAM'de aranacak, daha sonra gecikmeyi azaltmak için paket hücrelere dağıtılacak ve her hücre çıkış kartına bir çapraz çubuk anahtarına gönderilecektir. Bu kart hücreleri bir pakete yeniden birleştirir ve paketi çıkış arayüzünden sıraya koyar. Çıkış arabirimindeki kuyruk karmaşık olabilir.


Mükemmel cevap. Üzerinde durulabilir misin the packet will then be exploded into cells to reduce latency?
Eddie

Yönlendirici tasarımında, çapraz çubuk anahtarlama (veya kartlar arası başka bir veri yolu) aracılığıyla bir hat kartından diğerine bir paket gönderebilirsiniz. Ancak daha sonra gecikme süresi paketin uzunluğuna bağlıdır - paket çapraz çubuk anahtarlamasından gönderilirken başka bir tam paket iletim gecikmesine sahip olursunuz. Bundan kaçınmak için, bağlantı çubuğu anahtarına birden fazla paralel bağlantımız olabilir ve paketi bu bağlantılara bölebiliriz. Daha sonra büyük paketler için gecikme süresi çok azalır. Bölünmüş paketin bir bölümüne 'hücre' denir.
vk5tu

Bu cevabın iki yıl önce olduğunu biliyorum, ama ÇOK TEŞEKKÜR EDERİZ. Orijinal posterle aynı soruyu sordum ve cevabımı aramamda buldum. ÇOK iyi yazılmış ve kapsamlı. Teşekkürler!
loneboat

0

Bugün, neredeyse tüm anahtarlama ve yönlendirmenin çoğu donanımda ele alınmaktadır, bu nedenle işlemci hızı istisnalar için devreye girer. Sunucular gibi şeyler için işlemcinin yeterince hızlı olmaması mümkündür. Geçmişte durum böyleydi. 1 Gbps ethernet ilk çıktığında, bilgisayarlarda ve sunucularda kullanılan veri yolu sadece 400 Mbps işleyebilir.

İşlemci yeterince hızlı olmadığında, trafiğin düşmesi olur. Her neyse, çok fazla trafik atılabilir, çünkü doğru şekilde yapılırsa tıkanıklık bu şekilde ele alınır. KIRMIZI (Rastgele Erken Algılama), paketleri doldurmalarını ve kuyruk bırakmalarını önlemek için paketleri rastgele sıraya düşürmek için kullanılan bir yöntemdir. Bu, TCP senkronizasyonunu önlemeye yardımcı olabilir. Bir hızın birden fazla bağlantı noktasının aynı hızdaki başka bir tek bağlantı noktasına göndermesi gerekebilecek anahtarlarda çok fazla damla oluşur.


1
Bu, giriş atmalarını çıkış damlalarıyla karıştırır. Atılacaklar genellikle ethernet arabiriminin halka arabelleği aşırı dolduğunda olur - bir CPU, veri giriş hızına ayak uyduramadığı gibi. Bu halka tamponu KIRMIZI uygulanamayacak kadar küçük.
vk5tu

@ vk5tu, içeri girip çıkma gibi trafiğin her zaman düştüğüne dair fikrimi kaçırdınız. Sistemin herhangi bir kısmı trafik miktarını kaldıramazsa, bazıları düşürülecek ve bazıları bilerek düşürülecektir.
Ron Maupin
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.