“Firefox เร่งสปีด HTTP/3 ด้วย Rust — ปรับโครงสร้าง UDP I/O ใหม่หมด เพิ่มความเร็ว 4 เท่า พร้อมรับมือโลกอินเทอร์เน็ตยุค QUIC”
ในยุคที่ HTTP/3 กลายเป็นมาตรฐานใหม่ของการสื่อสารบนเว็บ และ QUIC ซึ่งเป็นโปรโตคอลที่ทำงานบน UDP กลายเป็นหัวใจของมัน Firefox จึงต้องปรับตัวครั้งใหญ่เพื่อให้ทันกับความเร็วและความปลอดภัยที่โลกต้องการ
โปรเจกต์นี้เริ่มต้นกลางปี 2024 โดยทีม Mozilla ตั้งเป้า “เขียนใหม่หมด” สำหรับระบบ UDP I/O ที่ใช้ใน QUIC โดยเปลี่ยนจาก NSPR (Netscape Portable Runtime) ซึ่งใช้ API เก่าอย่าง sendto และ recvfrom มาเป็น quinn-udp ซึ่งเป็นไลบรารีที่เขียนด้วย Rust — ภาษาที่ปลอดภัยด้านหน่วยความจำและเข้ากันได้ดีกับ QUIC ที่ Firefox ใช้อยู่แล้ว
ผลลัพธ์คือความเร็วที่เพิ่มขึ้นอย่างมหาศาล ในบางกรณีที่ CPU เป็นตัวจำกัด Firefox สามารถเพิ่ม throughput จากไม่ถึง 1 Gbit/s เป็น 4 Gbit/s ได้จริง และยังสามารถรองรับฟีเจอร์ใหม่อย่าง ECN (Explicit Congestion Notification) ได้เต็มรูปแบบ
การปรับปรุงนี้ไม่ใช่แค่เรื่องของโค้ด แต่ต้องเจอกับความท้าทายจากระบบปฏิบัติการแต่ละตัว เช่น:
บน Windows: พบปัญหากับ URO และ USO ที่ทำให้โหลดบางเว็บไม่ได้ และบางกรณีถึงขั้นทำให้ driver crash
บน MacOS: มี system call ลับที่ชื่อ sendmsg_x และ recvmsg_x แต่ไม่กล้าใช้จริงเพราะ Apple อาจถอดออกเมื่อไรก็ได้
บน Linux: เป็นระบบที่รองรับ segmentation offloading ได้ดีที่สุด และ Firefox เลือกใช้ GSO/GRO แทน sendmmsg เพราะเหมาะกับการใช้ socket แยกต่อ connection
บน Android: ต้องรับมือกับระบบเก่าอย่าง Android 5 และปัญหา ECN บน API ต่ำกว่า 25 ที่ทำให้ต้อง retry แบบพิเศษ
แม้จะยังมีข้อจำกัดในบางระบบ แต่การเปลี่ยนแปลงครั้งนี้ถือเป็นก้าวสำคัญของ Firefox ในการเตรียมพร้อมสำหรับโลกอินเทอร์เน็ตที่ใช้ QUIC เป็นแกนหลัก และเปิดโอกาสให้โครงการอื่น ๆ ที่ต้องการ UDP I/O ที่เร็วและปลอดภัยสามารถนำไปใช้ต่อได้
ข้อมูลสำคัญจากข่าว
Firefox เปลี่ยนระบบ UDP I/O จาก NSPR มาใช้ quinn-udp ที่เขียนด้วย Rust
QUIC ใน Firefox ใช้ Rust อยู่แล้ว ทำให้การรวมโค้ดเป็นไปอย่างราบรื่น
ความเร็วเพิ่มขึ้นจาก <1 Gbit/s เป็น 4 Gbit/s ในบางกรณีที่ CPU เป็นตัวจำกัด
รองรับ ECN เต็มรูปแบบ ทำให้สามารถส่งข้อมูล congestion-aware ได้
บน Linux ใช้ GSO/GRO แทน sendmmsg เพราะเหมาะกับการใช้ socket แยกต่อ connection
บน MacOS พบ system call ลับ sendmsg_x และ recvmsg_x แต่ไม่กล้าใช้จริง
บน Windows พบปัญหากับ URO และ USO ที่ทำให้โหลดเว็บ fosstodon ไม่ได้
บน Android ต้องรองรับระบบเก่าและแก้ปัญหา ECN บน API ต่ำ
Firefox ใช้ socket แยกต่อ connection เพื่อเพิ่มความเป็นส่วนตัวของผู้ใช้
ข้อมูลเสริมจากภายนอก
QUIC เป็นโปรโตคอลที่ Google พัฒนาขึ้น และกลายเป็นพื้นฐานของ HTTP/3
ECN เป็นฟีเจอร์ที่ช่วยให้ระบบเครือข่ายแจ้งเตือนความแออัดโดยไม่ต้อง drop packet
GSO (Generic Segmentation Offload) และ GRO (Generic Receive Offload) เป็นเทคนิคที่ช่วยลดภาระ CPU โดยให้ NIC ทำงานแทน
Rust เป็นภาษาที่ได้รับความนิยมในงานระบบเพราะปลอดภัยด้านหน่วยความจำและเร็ว
Cloudflare เป็นหนึ่งในผู้ให้บริการที่ใช้ QUIC อย่างหนัก และมี benchmark ที่แสดงประสิทธิภาพของ UDP I/O แบบใหม่
https://max-inden.de/post/fast-udp-io-in-firefox/
ในยุคที่ HTTP/3 กลายเป็นมาตรฐานใหม่ของการสื่อสารบนเว็บ และ QUIC ซึ่งเป็นโปรโตคอลที่ทำงานบน UDP กลายเป็นหัวใจของมัน Firefox จึงต้องปรับตัวครั้งใหญ่เพื่อให้ทันกับความเร็วและความปลอดภัยที่โลกต้องการ
โปรเจกต์นี้เริ่มต้นกลางปี 2024 โดยทีม Mozilla ตั้งเป้า “เขียนใหม่หมด” สำหรับระบบ UDP I/O ที่ใช้ใน QUIC โดยเปลี่ยนจาก NSPR (Netscape Portable Runtime) ซึ่งใช้ API เก่าอย่าง sendto และ recvfrom มาเป็น quinn-udp ซึ่งเป็นไลบรารีที่เขียนด้วย Rust — ภาษาที่ปลอดภัยด้านหน่วยความจำและเข้ากันได้ดีกับ QUIC ที่ Firefox ใช้อยู่แล้ว
ผลลัพธ์คือความเร็วที่เพิ่มขึ้นอย่างมหาศาล ในบางกรณีที่ CPU เป็นตัวจำกัด Firefox สามารถเพิ่ม throughput จากไม่ถึง 1 Gbit/s เป็น 4 Gbit/s ได้จริง และยังสามารถรองรับฟีเจอร์ใหม่อย่าง ECN (Explicit Congestion Notification) ได้เต็มรูปแบบ
การปรับปรุงนี้ไม่ใช่แค่เรื่องของโค้ด แต่ต้องเจอกับความท้าทายจากระบบปฏิบัติการแต่ละตัว เช่น:
บน Windows: พบปัญหากับ URO และ USO ที่ทำให้โหลดบางเว็บไม่ได้ และบางกรณีถึงขั้นทำให้ driver crash
บน MacOS: มี system call ลับที่ชื่อ sendmsg_x และ recvmsg_x แต่ไม่กล้าใช้จริงเพราะ Apple อาจถอดออกเมื่อไรก็ได้
บน Linux: เป็นระบบที่รองรับ segmentation offloading ได้ดีที่สุด และ Firefox เลือกใช้ GSO/GRO แทน sendmmsg เพราะเหมาะกับการใช้ socket แยกต่อ connection
บน Android: ต้องรับมือกับระบบเก่าอย่าง Android 5 และปัญหา ECN บน API ต่ำกว่า 25 ที่ทำให้ต้อง retry แบบพิเศษ
แม้จะยังมีข้อจำกัดในบางระบบ แต่การเปลี่ยนแปลงครั้งนี้ถือเป็นก้าวสำคัญของ Firefox ในการเตรียมพร้อมสำหรับโลกอินเทอร์เน็ตที่ใช้ QUIC เป็นแกนหลัก และเปิดโอกาสให้โครงการอื่น ๆ ที่ต้องการ UDP I/O ที่เร็วและปลอดภัยสามารถนำไปใช้ต่อได้
ข้อมูลสำคัญจากข่าว
Firefox เปลี่ยนระบบ UDP I/O จาก NSPR มาใช้ quinn-udp ที่เขียนด้วย Rust
QUIC ใน Firefox ใช้ Rust อยู่แล้ว ทำให้การรวมโค้ดเป็นไปอย่างราบรื่น
ความเร็วเพิ่มขึ้นจาก <1 Gbit/s เป็น 4 Gbit/s ในบางกรณีที่ CPU เป็นตัวจำกัด
รองรับ ECN เต็มรูปแบบ ทำให้สามารถส่งข้อมูล congestion-aware ได้
บน Linux ใช้ GSO/GRO แทน sendmmsg เพราะเหมาะกับการใช้ socket แยกต่อ connection
บน MacOS พบ system call ลับ sendmsg_x และ recvmsg_x แต่ไม่กล้าใช้จริง
บน Windows พบปัญหากับ URO และ USO ที่ทำให้โหลดเว็บ fosstodon ไม่ได้
บน Android ต้องรองรับระบบเก่าและแก้ปัญหา ECN บน API ต่ำ
Firefox ใช้ socket แยกต่อ connection เพื่อเพิ่มความเป็นส่วนตัวของผู้ใช้
ข้อมูลเสริมจากภายนอก
QUIC เป็นโปรโตคอลที่ Google พัฒนาขึ้น และกลายเป็นพื้นฐานของ HTTP/3
ECN เป็นฟีเจอร์ที่ช่วยให้ระบบเครือข่ายแจ้งเตือนความแออัดโดยไม่ต้อง drop packet
GSO (Generic Segmentation Offload) และ GRO (Generic Receive Offload) เป็นเทคนิคที่ช่วยลดภาระ CPU โดยให้ NIC ทำงานแทน
Rust เป็นภาษาที่ได้รับความนิยมในงานระบบเพราะปลอดภัยด้านหน่วยความจำและเร็ว
Cloudflare เป็นหนึ่งในผู้ให้บริการที่ใช้ QUIC อย่างหนัก และมี benchmark ที่แสดงประสิทธิภาพของ UDP I/O แบบใหม่
https://max-inden.de/post/fast-udp-io-in-firefox/
🚀 “Firefox เร่งสปีด HTTP/3 ด้วย Rust — ปรับโครงสร้าง UDP I/O ใหม่หมด เพิ่มความเร็ว 4 เท่า พร้อมรับมือโลกอินเทอร์เน็ตยุค QUIC”
ในยุคที่ HTTP/3 กลายเป็นมาตรฐานใหม่ของการสื่อสารบนเว็บ และ QUIC ซึ่งเป็นโปรโตคอลที่ทำงานบน UDP กลายเป็นหัวใจของมัน Firefox จึงต้องปรับตัวครั้งใหญ่เพื่อให้ทันกับความเร็วและความปลอดภัยที่โลกต้องการ
โปรเจกต์นี้เริ่มต้นกลางปี 2024 โดยทีม Mozilla ตั้งเป้า “เขียนใหม่หมด” สำหรับระบบ UDP I/O ที่ใช้ใน QUIC โดยเปลี่ยนจาก NSPR (Netscape Portable Runtime) ซึ่งใช้ API เก่าอย่าง sendto และ recvfrom มาเป็น quinn-udp ซึ่งเป็นไลบรารีที่เขียนด้วย Rust — ภาษาที่ปลอดภัยด้านหน่วยความจำและเข้ากันได้ดีกับ QUIC ที่ Firefox ใช้อยู่แล้ว
ผลลัพธ์คือความเร็วที่เพิ่มขึ้นอย่างมหาศาล ในบางกรณีที่ CPU เป็นตัวจำกัด Firefox สามารถเพิ่ม throughput จากไม่ถึง 1 Gbit/s เป็น 4 Gbit/s ได้จริง และยังสามารถรองรับฟีเจอร์ใหม่อย่าง ECN (Explicit Congestion Notification) ได้เต็มรูปแบบ
การปรับปรุงนี้ไม่ใช่แค่เรื่องของโค้ด แต่ต้องเจอกับความท้าทายจากระบบปฏิบัติการแต่ละตัว เช่น:
🗝️ บน Windows: พบปัญหากับ URO และ USO ที่ทำให้โหลดบางเว็บไม่ได้ และบางกรณีถึงขั้นทำให้ driver crash
🗝️ บน MacOS: มี system call ลับที่ชื่อ sendmsg_x และ recvmsg_x แต่ไม่กล้าใช้จริงเพราะ Apple อาจถอดออกเมื่อไรก็ได้
🗝️ บน Linux: เป็นระบบที่รองรับ segmentation offloading ได้ดีที่สุด และ Firefox เลือกใช้ GSO/GRO แทน sendmmsg เพราะเหมาะกับการใช้ socket แยกต่อ connection
🗝️ บน Android: ต้องรับมือกับระบบเก่าอย่าง Android 5 และปัญหา ECN บน API ต่ำกว่า 25 ที่ทำให้ต้อง retry แบบพิเศษ
แม้จะยังมีข้อจำกัดในบางระบบ แต่การเปลี่ยนแปลงครั้งนี้ถือเป็นก้าวสำคัญของ Firefox ในการเตรียมพร้อมสำหรับโลกอินเทอร์เน็ตที่ใช้ QUIC เป็นแกนหลัก และเปิดโอกาสให้โครงการอื่น ๆ ที่ต้องการ UDP I/O ที่เร็วและปลอดภัยสามารถนำไปใช้ต่อได้
✅ ข้อมูลสำคัญจากข่าว
➡️ Firefox เปลี่ยนระบบ UDP I/O จาก NSPR มาใช้ quinn-udp ที่เขียนด้วย Rust
➡️ QUIC ใน Firefox ใช้ Rust อยู่แล้ว ทำให้การรวมโค้ดเป็นไปอย่างราบรื่น
➡️ ความเร็วเพิ่มขึ้นจาก <1 Gbit/s เป็น 4 Gbit/s ในบางกรณีที่ CPU เป็นตัวจำกัด
➡️ รองรับ ECN เต็มรูปแบบ ทำให้สามารถส่งข้อมูล congestion-aware ได้
➡️ บน Linux ใช้ GSO/GRO แทน sendmmsg เพราะเหมาะกับการใช้ socket แยกต่อ connection
➡️ บน MacOS พบ system call ลับ sendmsg_x และ recvmsg_x แต่ไม่กล้าใช้จริง
➡️ บน Windows พบปัญหากับ URO และ USO ที่ทำให้โหลดเว็บ fosstodon ไม่ได้
➡️ บน Android ต้องรองรับระบบเก่าและแก้ปัญหา ECN บน API ต่ำ
➡️ Firefox ใช้ socket แยกต่อ connection เพื่อเพิ่มความเป็นส่วนตัวของผู้ใช้
✅ ข้อมูลเสริมจากภายนอก
➡️ QUIC เป็นโปรโตคอลที่ Google พัฒนาขึ้น และกลายเป็นพื้นฐานของ HTTP/3
➡️ ECN เป็นฟีเจอร์ที่ช่วยให้ระบบเครือข่ายแจ้งเตือนความแออัดโดยไม่ต้อง drop packet
➡️ GSO (Generic Segmentation Offload) และ GRO (Generic Receive Offload) เป็นเทคนิคที่ช่วยลดภาระ CPU โดยให้ NIC ทำงานแทน
➡️ Rust เป็นภาษาที่ได้รับความนิยมในงานระบบเพราะปลอดภัยด้านหน่วยความจำและเร็ว
➡️ Cloudflare เป็นหนึ่งในผู้ให้บริการที่ใช้ QUIC อย่างหนัก และมี benchmark ที่แสดงประสิทธิภาพของ UDP I/O แบบใหม่
https://max-inden.de/post/fast-udp-io-in-firefox/
0 Comments
0 Shares
171 Views
0 Reviews