Bạn hoàn toàn chính xác, nếu chúng ta phải sử dụng một chu kỳ hướng dẫn trên mỗi bit thì 10Gbps sẽ không thể thực hiện được. Vì vậy, điều đầu tiên cần lưu ý là chúng tôi xử lý một từ cho mỗi lệnh CPU - 64 bit.
Thậm chí sau đó, điều tồi tệ nhất chúng ta có thể làm cho hiệu năng là để CPU truy cập tất cả các từ của gói. Do đó, tập trung vào xử lý "không sao chép" các gói. Một số mánh khóe đó nằm ở chính các giao diện: chúng có DMA ("Truy cập bộ nhớ trực tiếp") để chip điều khiển ethernet sao chép dữ liệu vào RAM; họ tính toán tổng kiểm tra để CPU không phải truy cập tất cả các từ trong gói để làm như vậy. Một số trong đó là trong thiết kế cấu trúc dữ liệu: chúng tôi cẩn thận sắp xếp bộ đệm gói để chúng tôi có thể di chuyển chúng bằng cách thay đổi mức nợ của một mục trong bảng trang. Một số trong đó chỉ là lập trình cẩn thận để đảm bảo rằng dữ liệu gói được truy cập ít nhất số lần và tốt nhất là không nên truy cập cho đến khi chương trình ứng dụng nhận được.
Khi chúng tôi đã thực hiện tất cả những điều này, giới hạn tiếp theo là chi phí xử lý từng gói một. Do đó, có rất nhiều tính năng "giảm tải phân đoạn" cả trong bộ điều khiển ethernet và trong nhân để chúng tôi xử lý các nhóm gói. Chúng tôi thậm chí trì hoãn việc truy xuất dữ liệu từ bộ điều khiển ethernet để các nhóm này lớn hơn.
Cuối cùng, chúng ta có các phím tắt trong trường hợp đặc biệt, chẳng hạn như lệnh gọi sendfile () của kernel, là đường dẫn nhanh từ đĩa tới mạng bằng cách sử dụng lượng công việc tối thiểu.
Chúng ta thậm chí có thể định tuyến trường hợp đặc biệt (chuyển tiếp các gói từ giao diện này sang giao diện khác) bằng cách sử dụng các tính năng phần cứng của thẻ giao diện mạng và coi bus PCI là bus giữa các thẻ thay vì liên quan đến CPU. Điều đó không thể được thực hiện trong các hệ điều hành có mục đích chung, nhưng các nhà cung cấp như Intel cung cấp thư viện phần mềm để triển khai các tính năng như vậy trên bộ điều khiển ethernet của họ.
Di chuyển khỏi CPU hoàn toàn, chúng ta thậm chí có thể xây dựng các bộ định tuyến mục đích đặc biệt trong đó tất cả các tác vụ chuyển tiếp xảy ra trong phần cứng. Vì bus PCI sau đó sẽ là một hạn chế nên chúng chạy nhiều bus song song; hoặc thậm chí nhiều thanh song song với nhiều cụm công tắc thanh ngang song song. Ở một đầu của thị trường, một công tắc ethernet nhỏ dựa trên TCAM sẽ là một ví dụ; ở đầu kia của thị trường, Juniper M40 sẽ là một thiết kế chuẩn.
Một công tắc thông thường sẽ bắt đầu nhận gói tin, tra cứu địa chỉ đích trong TCAM, gắn thẻ với cổng đầu ra vào gói và sau đó DMA gói vẫn đến bộ điều khiển của cổng ra. Lưu ý rằng nếu cổng đầu ra bị tắc nghẽn thì tất cả những gì có thể được thực hiện trên công tắc đơn giản này là vứt bỏ gói dữ liệu vào. Do đó, các công tắc đơn giản không đưa ra lựa chọn tốt khi liên kết thay đổi tốc độ và một số hàng đợi là mong muốn. Tất nhiên các công tắc tinh vi hơn tồn tại, mà bạn phải trả nhiều tiền hơn.
Một bộ định tuyến thông thường sẽ nhận được một gói và giữ nó trong một hàng đợi ngắn. Địa chỉ IP đích sẽ được tra cứu trong RAM tĩnh, gói tin sau đó sẽ được phát nổ vào các ô để giảm độ trễ và mỗi ô gửi đến một thanh chuyển đổi chéo sang thẻ đi ra. Thẻ đó sẽ tập hợp lại các ô thành một gói và xếp hàng gói ra khỏi giao diện đầu ra. Việc xếp hàng trên giao diện đầu ra có thể tinh vi.
the packet will then be exploded into cells to reduce latency
?