สแตกเครือข่ายของ Linux

การรับแพ็กเก็ตเครือข่ายของ Linux

  • บนอุปกรณ์เครือข่าย NIC (Network Interface Card) จะสร้าง IRQ (Interrupt Request) เพื่อแจ้งว่าแพ็กเก็ตมาถึงแล้ว
  • ตัวจัดการ IRQ จะทำงานด้วยลำดับความสำคัญสูงมาก และบล็อกการสร้าง IRQ เพิ่มเติม
  • ระบบ softIRQ ถูกใช้เพื่อประมวลผลงานนอกบริบท IRQ ของไดรเวอร์อุปกรณ์
  • มีการสร้างเคอร์เนลเธรด softIRQ และสร้างโครงสร้าง softnet_data
  • NIC ใช้ DMA (Direct Memory Access) เพื่อให้ข้อมูลเครือข่ายถูกเขียนลงใน ring buffer ใน RAM
  • ลูป polling ของ NAPI softIRQ เริ่มทำงาน
  • ลูป net_rx_action จะตรวจสอบโครงสร้าง NAPI และส่งแพ็กเก็ตไปยัง napi_gro_receive
  • แพ็กเก็ตจะถูกส่งต่อไปยัง protocol stack ผ่าน netif_receive_skb

การส่งข้อมูลเครือข่ายในเคอร์เนล Linux

  • เมื่อแอปพลิเคชันส่งข้อความ จะมีการสร้าง TCP header และเรียกใช้ตัวจัดการ L3
  • แพ็กเก็ตจะถูก fragment และเรียกใช้ฟังก์ชันส่งข้อมูล L2
  • ไดรเวอร์จะจัดคิวแพ็กเก็ตลงใน ring buffer tx
  • NIC จะดึงแพ็กเก็ตจาก RAM ไปส่ง
  • เมื่อการส่งเสร็จสิ้น NIC จะสร้าง hard IRQ
  • ไดรเวอร์จะจัดการ IRQ นี้และ schedule ระบบ NAPI poll

การปรับจูนประสิทธิภาพเครือข่าย

HOWTO แบบรวดเร็ว

/proc/net/softnet_stat & /proc/net/sockstat
  • ไฟล์ /proc/net/softnet_stat ให้สถิติของแต่ละคอร์ CPU
  • ไฟล์ /proc/net/sockstat ให้สถิติการใช้งาน socket
ss
  • ss เป็นยูทิลิตีสำหรับตรวจสอบสถิติ socket และสามารถดูการใช้หน่วยความจำได้
netstat
  • netstat เป็นยูทิลิตีบรรทัดคำสั่งที่ให้ข้อมูลการเชื่อมต่อเครือข่ายและสถิติของ protocol stack
sysctl
  • สามารถใช้คำสั่ง sysctl เพื่อเปลี่ยนการตั้งค่าระบบ/เครือข่ายได้
  • สามารถแก้ไขไฟล์ /etc/sysctl.conf เพื่อเปลี่ยนค่าแบบถาวรได้

ring buffer ของ NIC

  • ring buffer ของ NIC เป็นบัฟเฟอร์ FIFO ขนาดคงที่ที่อยู่ใน RAM
  • อาจจำเป็นต้องเพิ่มคิวนี้เพื่อรองรับการเชื่อมต่อแบบ burst ได้อย่างราบรื่น

สรุปของ GN⁺

  • คู่มือนี้อธิบายการทำงานของ Linux network stack อย่างละเอียด และนำเสนอวิธีหลากหลายในการปรับประสิทธิภาพเครือข่ายให้เหมาะสมที่สุด
  • การเข้าใจบทบาทของ IRQ และ softIRQ ที่เกิดขึ้นระหว่างกระบวนการรับส่งแพ็กเก็ตเครือข่ายเป็นสิ่งสำคัญ
  • สามารถใช้คำสั่ง sysctl เพื่อปรับการตั้งค่าระบบ และปรับขนาด ring buffer ของ NIC เพื่อเพิ่มประสิทธิภาพได้
  • การปรับจูนประสิทธิภาพเครือข่ายอาจแตกต่างกันไปตามความต้องการเฉพาะของระบบ และจำเป็นต้องทดลองการตั้งค่าหลากหลายแบบ

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น