Tôi quan tâm đến câu trả lời cụ thể:
- 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?
- 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?
- 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)?
- 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.