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.
the packet will then be exploded into cells to reduce latency
?