GRO (การรับโหลดทั่วไป) ทำงานอย่างไรกับ NIC ขั้นสูงเพิ่มเติม


14

ฉันสนใจคำตอบเฉพาะ:

  1. NIC ที่มีการแก้ไข GRO สร้าง / สร้าง TCP ACK หรือแพ็กเก็ตอื่น ๆ (หรือคุณสมบัตินี้โปร่งใสต่อการรับสแต็ก TCP) หรือไม่?
  2. ควรจะมีการหมดเวลา / เหตุการณ์เมื่อ NIC ควรส่ง "เซ็กเมนต์ที่ติดกาว" ไปยังสแต็ก TCP หรือไม่ พวกเขาคืออะไร
  3. ในการตั้งค่าการส่งต่อแพ็คเก็ต - คุณสมบัติ GRO ยังพยายามอ่าน ACK ของตัวรับสัญญาณ (ดูด้านล่างว่าทำไมฉันจึงถามสิ่งนี้)
  4. แหล่งข้อมูลใด ๆ ที่อธิบายถึง 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

คำตอบ:


15

ฉันได้พบบทความนี้มีประโยชน์ที่น่าอัศจรรย์ใจ: JLS2009: ทั่วไปได้รับ Offload มันให้ภาพรวมที่ยอดเยี่ยมเกี่ยวกับวิธีการทำงานของ GRO

  1. อะแดปเตอร์บางตัวอาจทำเช่นนั้น แต่ไดรเวอร์ที่เกี่ยวข้องต้องระวังเช่นกัน นอกจากนี้ไดรเวอร์เองก็สามารถทำได้ในซอฟต์แวร์ เนื่องจากสิ่งนี้เกิดขึ้นก่อนที่จะเข้าสู่สแต็ก TCP / IP ของเคอร์เนลตามเวลาที่สแต็ก TCP / IP ของเคอร์เนลพื้นที่ถูกป้อนอย่างสมบูรณ์แพ็กเก็ตได้รับการ resequenced
  2. การหมดเวลาถูกกำหนดโดยข้อมูลจำเพาะของ GRO ว่าเป็นหนึ่งใน TCP / IP 'ขีด' (การเพิ่มขึ้นของฟิลด์การประทับเวลา) ซึ่งเป็นจำนวนที่น้อยมาก แต่ในเครือข่ายที่รวดเร็วหลายแพ็คเก็ตอาจยังคงได้รับ
  3. GRO จะเข้ามาเล่นในฝั่งผู้รับของผู้ส่งและในความเป็นจริงแล้ว GRO ถูกสร้างขึ้นดังนั้นวิธี LRO ที่โลภมากขึ้นก็จะหยุดการแพ็คเก็ตกับผู้ส่งต่อ
  4. บทความที่ฉันเชื่อมโยงไปด้านบนช่วยได้จริงๆ

Ethtool อาจจะสามารถเปิด / ปิด GRO บนอินเตอร์เฟซที่เฉพาะเจาะจง ขึ้นอยู่กับรุ่น


1
ฉันอัพเดตคำถามของฉัน ดูเหมือนว่าคุณตอบ # 1 ในบริบทของฟีเจอร์การถ่ายข้อมูลทั้งหมด (IMHO GRO เพียงอย่างเดียวไม่ได้สร้าง ACKs เพียง "glues" แพ็กเก็ตทั้งหมดสำหรับหนึ่งขีด TCP / IP หนึ่งและจัดการกับ OS) ขอขอบคุณ!
389238
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.