Làm thế nào GRO (giảm tải chung chung) hoạt động trên các NIC nâng cao hơn?


14

Tôi quan tâm đến câu trả lời cụ thể:

  1. Liệu NIC với GRO có chỉnh sửa / tạo TCP ACK hoặc bất kỳ gói nào khác không (hoặc tính năng này có trong suốt đối với ngăn xếp TCP của người nhận / người gửi) không?
  2. Có nên có thời gian chờ / sự kiện khi NIC sẽ chuyển "phân đoạn được dán" vào ngăn xếp TCP không? Họ là ai?
  3. Trong thiết lập chuyển tiếp gói - tính năng GRO cũng cố đọc ACK của người nhận (xem bên dưới tại sao tôi hỏi điều này)?
  4. Bất kỳ nguồn nào giải thích GRO và các tính năng giảm tải NIC khác (TSO, LSO ...) tốt hơn các trang man wikipedia và linux sẽ thực sự được đánh giá cao.

Thêm chi tiết:

Tôi đang khắc phục sự cố về hiệu năng với một triển khai IPSec. Vấn đề là băng thông khả dụng không được phân phối đồng đều trên cả 4 đường hầm VPN (được phân phối khoảng 200MBps / 200MBps / 1MBps / 1MBps; Mỗi đường hầm VPN đóng gói một kết nối TCP). Thỉnh thoảng trong PCAP tôi thấy máy chủ web không hoạt động trong khoảng ~ 2 giây (chờ ACK). Tải xuống sơ yếu lý lịch khi máy chủ web truyền lại các phân đoạn chưa được xác nhận.

Câu chuyện bên trong của tôi từ PCAP là tính năng NIC GRO kết hợp các gói với nhau nhưng đôi khi không chuyển chúng đến ngăn xếp TCP kịp thời và điều đó gây ra sự cố.

Vì máy chủ VPN này không có giao diện chấm dứt kết nối TCP mà chỉ chuyển tiếp các gói. Sau đó, tôi đã cố gắng vô hiệu hóa GRO và sau đó tôi quan sát thấy lưu lượng được phân bổ đều trên tất cả các đường hầm. Ngoài ra khi mở rộng cửa sổ TCP trên Máy chủ web, băng thông thậm chí còn được phân phối ngay cả khi bật GRO (đó là lý do tại sao tôi có câu hỏi số 3).

Tôi đang sử dụng linux 2.6.32-27 trên máy chủ Ubuntu 10.04 (64-bit). NIC là Intel 82571EB. Tất cả các giao diện (máy khách HTTP, máy khách VPN, Máy chủ VPN, Máy chủ web) được kết nối trực tiếp theo chuỗi với cáp Ethernet 1Gbit.

Câu trả lời:


15

Tôi đã tìm thấy bài viết này hữu ích đáng kinh ngạc: JLS2009: Giảm tải chung . Nó cung cấp một cái nhìn tổng quan tuyệt vời về cách GRO hoạt động.

  1. Một số bộ điều hợp có thể làm điều đó, nhưng các trình điều khiển liên quan cũng phải nhận thức được điều đó. Ngoài ra, trình điều khiển chính họ có thể làm điều này trong phần mềm. Vì điều này xảy ra trước khi vào ngăn xếp Kernel TCP / IP, vào thời điểm ngăn xếp TCP / IP không gian nhân được nhập đầy đủ, các gói đã được kiểm tra lại.
  2. Thời gian chờ được xác định bởi thông số GRO là một 'tick' TCP / IP (gia tăng của trường Time Stamp), đây là một số rất nhỏ nhưng trên các mạng nhanh vẫn có thể nhận được nhiều gói.
  3. GRO sẽ hoạt động ở phía bên nhận của giao nhận, và trên thực tế GRO đã được tạo ra để phương pháp LRO tham lam hơn sẽ ngừng làm hỏng các gói trên các giao nhận.
  4. Bài viết mà tôi liên kết đến ở trên thực sự có ích.

Ethtool thể bật / tắt GRO trên các giao diện cụ thể. Phụ thuộc vào phiên bản.


1
Tôi cập nhật câu hỏi của tôi. Có vẻ như bạn đã trả lời # 1 trong bối cảnh tất cả các tính năng giảm tải (một mình IMHO GRO không tạo ra ACK - nó chỉ "dán" tất cả các gói cho một đánh dấu TCP / IP và sau đó xử lý chúng cho HĐH). Cảm ơn bạn!
dùng389238
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.