ฉันสนใจคำตอบเฉพาะ:
- NIC ที่มีการแก้ไข GRO สร้าง / สร้าง TCP ACK หรือแพ็กเก็ตอื่น ๆ (หรือคุณสมบัตินี้โปร่งใสต่อการรับสแต็ก TCP) หรือไม่?
- ควรจะมีการหมดเวลา / เหตุการณ์เมื่อ NIC ควรส่ง "เซ็กเมนต์ที่ติดกาว" ไปยังสแต็ก TCP หรือไม่ พวกเขาคืออะไร
- ในการตั้งค่าการส่งต่อแพ็คเก็ต - คุณสมบัติ GRO ยังพยายามอ่าน ACK ของตัวรับสัญญาณ (ดูด้านล่างว่าทำไมฉันจึงถามสิ่งนี้)
- แหล่งข้อมูลใด ๆ ที่อธิบายถึง GRO และคุณสมบัติการถ่าย NIC อื่น ๆ (TSO, LSO ... ) ดีกว่าวิกิพีเดียและหน้าลินุกซ์หน้าคนจะได้รับการชื่นชมจริงๆ
รายละเอียดเพิ่มเติม:
ฉันกำลังแก้ไขปัญหาด้านประสิทธิภาพด้วยการใช้งาน IPSec หนึ่งครั้ง ปัญหาคือแบนด์วิดท์ที่ใช้งานไม่ได้มีการกระจายอย่างเท่าเทียมกันทั่วทั้ง VPN VPN ทั้ง 4 (กระจายประมาณ 200MBps / 200MBps / 1MBps / 1MBps; แต่ละช่องสัญญาณ VPN จะสรุปการเชื่อมต่อ TCP เดียว) ใน PCAP นาน ๆ ครั้งฉันเห็นว่าเว็บเซิร์ฟเวอร์ไม่มีการใช้งานประมาณ 2 วินาที (กำลังรอ ACK) การดาวน์โหลดดำเนินการต่อเมื่อเว็บเซิร์ฟเวอร์ส่งเซกเมนต์ที่ไม่ได้รับการยอมรับใหม่อีกครั้ง
การตัดโค่นภายในของฉันจาก PCAP คือฟีเจอร์ NIC GRO ติดตั้งแพ็กเก็ตด้วยกัน แต่บางครั้งไม่ส่งไปยังสแต็ก TCP ในเวลาที่เหมาะสมและนั่นเป็นสาเหตุของปัญหา
เนื่องจากเซิร์ฟเวอร์ VPN นี้ไม่มีส่วนต่อประสานที่ยุติการเชื่อมต่อ TCP แต่จะส่งต่อเฉพาะแพ็กเก็ตเท่านั้น จากนั้นฉันพยายามปิดการใช้งาน GRO และหลังจากนั้นฉันสังเกตว่ามีการกระจายปริมาณการใช้งานอย่างสม่ำเสมอทั่วทั้งอุโมงค์ นอกจากนี้เมื่อการปรับขนาดหน้าต่าง TCP ถูกปิดใช้งานบนเว็บเซิร์ฟเวอร์แบนด์วิดธ์ก็ยังกระจายแม้เปิดใช้งาน GRO (นั่นคือเหตุผลที่ฉันมีคำถาม # 3)
ฉันใช้ 2.6.32-27 linux บนเซิร์ฟเวอร์ Ubuntu 10.04 (64- บิต) NIC คือ Intel 82571EB อินเทอร์เฟซทั้งหมด (ไคลเอนต์ HTTP, ไคลเอนต์ VPN, เซิร์ฟเวอร์ VPN, เว็บเซิร์ฟเวอร์) เชื่อมต่อโดยตรงในสายโซ่ด้วยสายเคเบิล 1Gbit Ethernet