Masz całkowitą rację, jeśli musimy użyć cyklu instrukcji na bit, to 10 Gb / s byłoby nieosiągalne. Pierwszą rzeczą do zapamiętania jest to, że obsługujemy słowo na instrukcję procesora - 64 bity.
Nawet wtedy najgorsze, co możemy zrobić dla wydajności, to mieć dostęp CPU do wszystkich słów pakietu. Dlatego skupiono się na obsłudze pakietów „bez kopiowania”. Niektóre z tych sztuczek dotyczą samych interfejsów: mają DMA („Bezpośredni dostęp do pamięci”), dzięki czemu układ kontrolera Ethernet kopiuje dane do pamięci RAM; obliczają sumy kontrolne, aby procesor nie musiał uzyskać dostępu do wszystkich słów w pakiecie, aby to zrobić. Część z nich dotyczy projektowania struktury danych: staramy się wyrównywać bufory pakietów, abyśmy mogli je przenosić, zmieniając własność pozycji tabeli stron. Niektóre z nich to po prostu staranne programowanie, aby zapewnić, że dostęp do danych pakietowych będzie uzyskiwany najmniejszą liczbę razy, a najlepiej, aby nie był uzyskiwany wcale do czasu otrzymania aplikacji.
Po wykonaniu tego wszystkiego następnym ograniczeniem jest narzut związany z obsługą pakietów pojedynczo. Tak więc istnieje mnóstwo funkcji „odciążenia segmentacji” zarówno w kontrolerze ethernetowym, jak i w jądrze, dzięki czemu obsługujemy grupy pakietów. Opóźniamy nawet pobieranie danych z kontrolera Ethernet, aby te grupy były większe.
Wreszcie mamy specjalne skróty, takie jak wywołanie sendfile () jądra, które jest ekspresową ścieżką z dysku do sieci przy minimalnym nakładzie pracy.
Możemy nawet routować w specjalnych przypadkach (przekazywanie pakietów z jednego interfejsu do drugiego), używając funkcji sprzętowych kart interfejsu sieciowego i traktując magistralę PCI jako magistralę między kartami, zamiast angażować procesor. Tego nie da się zrobić w systemach operacyjnych ogólnego przeznaczenia, ale dostawcy tacy jak Intel zapewniają biblioteki oprogramowania do implementacji takich funkcji na swoich kontrolerach Ethernet.
Odchodząc od procesorów, możemy nawet budować routery specjalnego przeznaczenia, w których wszystkie zadania przesyłania odbywają się sprzętowo. Ponieważ szyna PCI byłaby wówczas ograniczeniem, obsługują wiele równoległych magistral; lub nawet wiele równoległych magistrali do wielu równoległych zespołów przełączników poprzecznych. Na jednym końcu rynku jednym przykładem byłby mały przełącznik ethernetowy oparty na TCAM; na drugim końcu rynku Juniper M40 byłby kanonicznym projektem.
Typowy przełącznik zacznie odbierać pakiet, odszukać adres docelowy w TCAM, dołączyć tag z portem wyjściowym do pakietu, a następnie DMA wciąż przychodzący pakiet do kontrolera portu wyjściowego. Zauważ, że jeśli port wyjściowy jest zatłoczony, to wszystko, co można zrobić na tym prostym przełączniku, to wyrzucić pakiet wejściowy. Zatem proste przełączniki nie są dobrym wyborem, gdy łącza zmieniają prędkość i pożądane jest pewne kolejkowanie. Oczywiście istnieją bardziej wyrafinowane przełączniki, za które płacisz więcej.
Typowy router odbierze pakiet i zatrzyma go w krótkiej kolejce. Docelowy adres IP zostanie wyszukany w statycznej pamięci RAM, pakiet zostanie następnie rozbity na komórki w celu zmniejszenia opóźnień, a każda komórka zostanie wysłana do przełącznika poprzecznego na kartę wyjściową. Ta karta ponownie złoży komórki w pakiet i ustawi pakiet w kolejce przez interfejs wyjściowy. Kolejkowanie w interfejsie wyjściowym może być skomplikowane.
the packet will then be exploded into cells to reduce latency
?