กลับไปหน้าบทความ

อ่าน 3 นาที

ไม่มีชื่อบทความ

XDP ( eXpress Data Path ) เป็นเส้นทางข้อมูลเครือข่ายประสิทธิภาพสูงที่ใช้ eBPF ในการส่งและรับ แพ็กเก็ตเครือข่าย ด้วยอัตราสูงโดยการข้าม สแต็กเครือข่าย ของ ระบบปฏิบัติการ ส่วนใหญ่...

เส้นทางข้อมูลด่วน

XDP ( eXpress Data Path ) เป็นเส้นทางข้อมูลเครือข่ายประสิทธิภาพสูงที่ใช้eBPF ในการส่งและรับ แพ็กเก็ตเครือข่ายด้วยอัตราสูงโดยการข้ามสแต็กเครือข่าย ของ ระบบปฏิบัติการ ส่วนใหญ่ มันถูกรวมเข้ากับเคอร์เนล Linuxตั้งแต่เวอร์ชัน 4.8 [ 2 ]การใช้งานนี้ได้รับอนุญาตภายใต้GPLบริษัทเทคโนโลยีขนาดใหญ่รวมถึง Amazon, Google และ Intel สนับสนุนการพัฒนา Microsoft ได้เปิดตัวการใช้งาน XDP แบบโอเพนซอร์สฟรีสำหรับ Windowsในเดือนพฤษภาคม 2022 [ 1 ]มันได้รับอนุญาตภายใต้MIT License [ 3 ]

เส้นทางข้อมูล

เส้นทางการไหลของแพ็กเก็ตในเคอร์เนลของลินุกซ์ XDP ข้ามขั้นตอนการประมวลผลเครือข่ายและการจัดสรรหน่วยความจำสำหรับเมตาเดต้า ของแพ็กเก็ ต

แนวคิดเบื้องหลัง XDP คือการเพิ่ม hook ในช่วงต้นในเส้นทาง RX ของเคอร์เนล และปล่อยให้โปรแกรม eBPF ที่ผู้ใช้จัดหามาตัดสินชะตากรรมของแพ็กเก็ต hook นี้จะถูกวางไว้ใน ไดรเวอร์ ตัวควบคุมอินเทอร์เฟซเครือข่าย (NIC) หลังจาก การประมวลผล การขัดจังหวะและก่อนการจัดสรรหน่วยความจำใดๆ ที่จำเป็นสำหรับสแต็กเครือข่ายเอง เนื่องจากการจัดสรรหน่วยความจำอาจเป็นการดำเนินการที่มีค่าใช้จ่ายสูง ด้วยการออกแบบนี้ XDP สามารถทิ้งแพ็กเก็ตได้ 26 ล้านแพ็กเก็ตต่อวินาทีต่อคอร์ด้วยฮาร์ดแวร์ทั่วไป[ 4 ]

โปรแกรม eBPF ต้องผ่านการทดสอบ preverifier [ 5 ]ก่อนที่จะโหลด เพื่อหลีกเลี่ยงการเรียกใช้โค้ดที่เป็นอันตรายในพื้นที่เคอร์เนล ตัวตรวจสอบล่วงหน้าจะตรวจสอบว่าโปรแกรมไม่มีการเข้าถึงนอกขอบเขต ลูป หรือตัวแปรส่วนกลาง

โปรแกรมได้รับอนุญาตให้แก้ไขข้อมูลแพ็กเก็ต และหลังจากที่โปรแกรม eBPF ส่งผลลัพธ์กลับมาแล้ว รหัสการดำเนินการจะกำหนดว่าควรทำอย่างไรกับแพ็กเก็ตนั้น:

  • XDP_PASS: ปล่อยให้แพ็กเก็ตเดินทางต่อไปตามสแต็กเครือข่าย
  • XDP_DROP: ทิ้งแพ็กเก็ตโดยไม่ให้ใครเห็น
  • XDP_ABORTED: ทิ้งแพ็กเก็ตที่มีข้อยกเว้นจุดติดตาม
  • XDP_TXส่งแพ็กเก็ตกลับไปยังการ์ดเครือข่าย (NIC) เดิมที่รับแพ็กเก็ตมา
  • XDP_REDIRECT: ส่งต่อแพ็กเก็ตไปยัง NIC อื่นหรือ ซ็อกเก็ต พื้นที่ผู้ใช้ผ่านตระกูลที่อยู่AF_XDP

XDP ต้องการการสนับสนุนในไดรเวอร์ NIC แต่เนื่องจากไดรเวอร์บางตัวไม่รองรับ จึงอาจใช้การใช้งานทั่วไปแทน ซึ่งจะทำการประมวลผล eBPF ในสแต็กเครือข่าย แม้ว่าจะมีประสิทธิภาพที่ช้าลงก็ตาม[ 6 ]

XDP มีโครงสร้างพื้นฐานในการถ่ายโอนโปรแกรม eBPF ไปยังตัวควบคุมอินเทอร์เฟซเครือข่ายที่รองรับ ซึ่งจะช่วยลดภาระ CPU ในปี 2023 มีเพียงการ์ด Netronome [ 7 ] เท่านั้น ที่รองรับ

ไมโครซอฟต์กำลังร่วมมือกับบริษัทอื่นๆ และเพิ่มการสนับสนุน XDP ใน การใช้งาน โปรโตคอลQUICของMsQuic [ 1 ]

AF_XDP

พร้อมกับ XDP ตระกูลแอดเดรส ใหม่ ได้เข้าสู่เคอร์เนล Linux ตั้งแต่เวอร์ชัน 4.18 [ 8 ] AF_XDP ซึ่งเดิมเรียกว่า AF_PACKETv4 (ซึ่งไม่เคยรวมอยู่ในเคอร์เนลหลัก) [ 9 ]เป็นซ็อกเก็ตดิบที่ได้รับการปรับให้เหมาะสมสำหรับการประมวลผลแพ็กเก็ตประสิทธิภาพสูงและอนุญาตให้มีการคัดลอกเป็นศูนย์ระหว่างเคอร์เนลและแอปพลิเคชัน เนื่องจากซ็อกเก็ตสามารถใช้ได้ทั้งสำหรับการรับและส่ง จึงรองรับแอปพลิเคชันเครือข่ายประสิทธิภาพสูงในพื้นที่ผู้ใช้โดยเฉพาะ[ 10 ]

ดูเพิ่มเติม

  • เอกสารประกอบการใช้งาน XDPบนเว็บไซต์ Read the Docs
  • เอกสาร AF_XDPบนkernel.org
  • xdp-for-windows บนGitHub
  • การสาธิตการใช้งาน XDPในงาน FOSDEM 2017 โดย Daniel Borkmann จาก Cilium
  • AF_XDPที่FOSDEM 2018 โดย Magnus Karlsson, Intel
  • eBPF.io - บทนำ บทแนะนำ และแหล่งข้อมูลชุมชน
  • L4Drop: การป้องกัน DDoS ด้วย XDPจากCloudflare
  • Unimog: ตัวกระจายโหลดแบบ Edge ของ Cloudflare , Cloudflare
  • เฟซบุ๊กเปิดซอร์สโค้ด Katran ซึ่งเป็นตัวกระจายโหลดเครือข่ายที่ปรับขนาดได้
  • L4LB ของ Cilium: โหลดบาลานเซอร์ XDP แบบสแตนด์อโลน , Cilium
  • การแทนที่ Kube-proxy ที่เลเยอร์ XDPด้วยCilium
  • eCHO Podcast เกี่ยวกับ XDP และการกระจายโหลด

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ไม่มีชื่อบทความ

XDP ( eXpress Data Path ) เป็นเส้นทางข้อมูลเครือข่ายประสิทธิภาพสูงที่ใช้ eBPF ในการส่งและรับ แพ็กเก็ตเครือข่าย ด้วยอัตราสูงโดยการข้าม สแต็กเครือข่าย ของ ระบบปฏิบัติการ ส่วนใหญ่...

เส้นทางข้อมูล

แนวคิดเบื้องหลัง XDP คือการเพิ่ม hook ในช่วงต้นในเส้นทาง RX ของเคอร์เนล และปล่อยให้โปรแกรม eBPF ที่ผู้ใช้จัดหามาตัดสินชะตากรรมของแพ็กเก็ต hook นี้จะถูกวางไว้ใน ไดรเวอร์ ตัวควบคุมอินเทอร์เฟซเครือข่าย (NIC) หลังจาก การประมวลผล การขัดจังหวะ...

AF_XDP

พร้อมกับ XDP ตระกูลแอดเดรส ใหม่ ได้เข้าสู่เคอร์เนล Linux ตั้งแต่เวอร์ชัน 4.

ดูเพิ่มเติม

ชั้นแอปพลิเคชัน ชั้นเครือข่าย ชั้นเชื่อมโยงข้อมูล