สแตกเครือข่ายของ 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 เพื่อเพิ่มประสิทธิภาพได้
- การปรับจูนประสิทธิภาพเครือข่ายอาจแตกต่างกันไปตามความต้องการเฉพาะของระบบ และจำเป็นต้องทดลองการตั้งค่าหลากหลายแบบ
ยังไม่มีความคิดเห็น