- ในสภาพแวดล้อมที่รองรับ 500Mbps~1Gbps ขึ้นไป ต่อการเชื่อมต่อ เช่น เครือข่ายแบบมีสายความเร็วสูง, WiFi 6/7 และ 5G สแตก UDP+QUIC+HTTP/3 ให้ อัตราการส่งข้อมูลต่ำกว่าได้สูงสุด 45.2% เมื่อเทียบกับ TCP+TLS+HTTP/2
- ไม่ใช่แค่การดาวน์โหลดไฟล์อย่างง่ายเท่านั้น แต่ในการทดสอบกับ Chrome, Edge, Firefox, Opera และทั้งเดสก์ท็อปกับมือถือ ยิ่ง แบนด์วิดท์สูงขึ้น ช่องว่างด้านประสิทธิภาพระหว่าง QUIC กับ HTTP/2 ก็ยิ่งกว้างขึ้น
- จากการติดตามแพ็กเก็ตและโปรไฟล์ทั้งในเคอร์เนลและ user space พบว่าคอขวดอยู่ใกล้กับ โอเวอร์เฮดการประมวลผลฝั่งรับ มากกว่าฝั่งส่ง โดยการรับ QUIC ทำให้เกิดแพ็กเก็ตมากขึ้นและมีการประมวลผล ACK ใน user space มากขึ้น
- ผลกระทบในระดับแอปพลิเคชันนำไปสู่การลดลงของบิตเรต DASH video สูงสุด 9.8% และ เวลาโหลดหน้าเว็บนานขึ้น 3.0% โดยเฉลี่ยใน 100 เว็บไซต์ตัวแทน
- แนวทางบรรเทาต้องอาศัยการนำ UDP GRO ฝั่งรับมาใช้, การปรับปรุง GSO/GRO ให้เป็นมิตรกับ QUIC, การปรับปรุงลอจิกรับข้อมูล และการใช้หลาย CPU core แต่ความหลากหลายของอุปกรณ์ไคลเอนต์และระบบปฏิบัติการทำให้การนำไปใช้จริงทำได้ยาก
ช่องว่างด้านประสิทธิภาพของ QUIC ที่ปรากฏบนเครือข่ายความเร็วสูง
- QUIC เป็นโปรโตคอลชั้นขนส่งแบบ multiplexed บน UDP และถูกมาตรฐานโดย IETF ให้เป็นพื้นฐานการขนส่งของ HTTP/3
- บริษัทหลายแห่ง เช่น Google, Akamai, Meta และ Cloudflare ได้นำ QUIC ไปใช้งานเชิงพาณิชย์มาตั้งแต่ปี 2013 และถูกจับตามองว่าเป็นตัวเปลี่ยนเกมด้านประสิทธิภาพเว็บร่วมกับ HTTP/3
- งานศึกษาประสิทธิภาพ QUIC ก่อนหน้านี้มีความหลากหลายทั้งด้าน implementation, สภาพแวดล้อมการประมวลผล และเงื่อนไขเครือข่าย และหลายงานมุ่งเน้นกรณีใช้งานที่มี throughput ต่ำ
- จุดโฟกัสของการวัดครั้งนี้คือพฤติกรรมของ QUIC บนเครือข่ายความเร็วสูงที่ไปถึง 500Mbps ขึ้นไป หรือ 1Gbps ขึ้นไป ต่อการเชื่อมต่อ เช่น ลิงก์มีสายความเร็วสูง, WiFi 6/7 และ 5G
- สิ่งที่นำมาเปรียบเทียบไม่ใช่แค่โปรโตคอลเดี่ยว แต่เป็นทั้งสแตกทั้งหมด
- ฝั่ง QUIC: UDP+QUIC+HTTP/3
- ฝั่งเดิม: TCP+TLS+HTTP/2
- เพื่อความกระชับ จะเรียกแต่ละฝั่งว่า QUIC และ HTTP/2
ความแตกต่างที่พบจากการทดลองดาวน์โหลดไฟล์
- ในการทดลองดาวน์โหลดไฟล์แบบง่ายโดยใช้ cURL และ
quic_clientที่อิง Chromium มีการเปรียบเทียบภายใต้เงื่อนไขเดียวกันทั้งอัลกอริทึมควบคุมความหนาแน่นของเครือข่าย, การตั้งค่าเซิร์ฟเวอร์ และสภาพเครือข่าย - เมื่อแบนด์วิดท์ค่อนข้างต่ำที่ ต่ำกว่าประมาณ 600Mbps ประสิทธิภาพของ QUIC และ HTTP/2 ใกล้เคียงกัน แต่เมื่อแบนด์วิดท์สูงกว่านั้น throughput ของ QUIC ต่ำกว่า HTTP/2 ได้สูงสุด 15.7%
- ยิ่งแบนด์วิดท์สูงขึ้น ช่องว่างด้านประสิทธิภาพก็ยิ่งชัดเจนขึ้น และระหว่างการรับแพ็กเก็ต QUIC ใช้ CPU สูงกว่า HTTP/2 อย่างมากบนเครื่องไคลเอนต์รุ่นใหม่
- ในการทดสอบกับเบราว์เซอร์หลัก ช่องว่างยิ่งกว้างขึ้น
- เบราว์เซอร์ที่ทดสอบคือ Chrome, Edge, Firefox, Opera
- บน Chrome เมื่อแบนด์วิดท์เกินประมาณ 500Mbps QUIC เริ่มตามหลัง
- เมื่อแบนด์วิดท์แตะ 1Gbps QUIC ช้ากว่า HTTP/2 ถึง 45.2%
- บนไคลเอนต์ที่อ่อนกำลังกว่าอย่างมือถือ ช่องว่างยิ่งมากขึ้น
ผลกระทบต่อเว็บแอปพลิเคชัน
- การลดลงของประสิทธิภาพไม่ได้จำกัดอยู่แค่การส่งไฟล์ขนาดใหญ่ แต่ยังปรากฏในแอปพลิเคชันที่มีรูปแบบทราฟฟิกไม่ต่อเนื่องด้วย
- เมื่อนำส่ง DASH video chunk บน Ethernet ความเร็วสูงและ 5G, QUIC ให้ วิดีโอบิตเรตต่ำกว่า HTTP/2 ได้สูงสุด 9.8%
- การลดลงของ QoE นี้จะปรากฏก็ต่อเมื่อแบนด์วิดท์พื้นฐานสูงเพียงพอเท่านั้น
- บน 4G ผลกระทบถูกกลบ
- บน 5G ผลกระทบปรากฏชัด
- ในการท่องเว็บ ค่าเฉลี่ยของ page load time (PLT) ของ QUIC นานกว่า HTTP/2 3.0% ใน 100 เว็บไซต์ตัวแทน
- ในกรณีปลายหางยาว ช่องว่างของเวลาโหลดหน้าอาจ เกิน 50% ได้เช่นกัน
สาเหตุของคอขวด: การประมวลผลฝั่งรับและ ACK ใน user space
- จากการติดตามแพ็กเก็ตและข้อมูลประสิทธิภาพ พบว่าไคลเอนต์ QUIC รับแพ็กเก็ตมากกว่าการดาวน์โหลดผ่าน HTTP/2 อย่างมาก
- เมื่อ QUIC รับข้อมูลด้วยอัตราการส่งสูง ความหน่วงระหว่างแพ็กเก็ตข้อมูลที่เข้ามากับแพ็กเก็ต ACK ที่ตอบกลับจะเพิ่มขึ้น ทำให้เวลาในการประมวลผลแพ็กเก็ต QUIC สูงขึ้น
- การสังเกตทั้งสองชี้ว่าต้นตอของประสิทธิภาพ QUIC ที่ลดลงบนอินเทอร์เน็ตความเร็วสูงอยู่ที่ ข้อจำกัดความสามารถในการประมวลผลฝั่งรับ
- เหตุผลที่ฝั่งรับถูกชี้ว่าเป็นคอขวดมีสองข้อ
- โดยทั่วไปเซิร์ฟเวอร์มีพลังประมวลผลสูงกว่าไคลเอนต์อย่างเดสก์ท็อป โน้ตบุ๊ก และสมาร์ตโฟน
- การออกแบบของ QUIC เองทำให้การประมวลผลการรับข้อมูลมีความยากเฉพาะตัว
- การทำโปรไฟล์เชิงลึกพบสาเหตุหลักสองประการ
- แพ็กเก็ตข้อมูลมากเกินไป
- เมื่อต้องดาวน์โหลดไฟล์เดียวกัน UDP stack ในเคอร์เนลทำให้เกิดการอ่านแพ็กเก็ต
netif_receive_skbมากกว่า TCP อย่างมาก - ไม่มี implementation ของ QUIC ที่ตรวจสอบในการศึกษานี้ใช้ UDP generic receive offload หรือ UDP GRO
- UDP GRO คือวิธีที่โมดูลชั้นลิงก์รวม UDP datagram ที่รับเข้ามาหลายรายการให้เป็น datagram ขนาดใหญ่หนึ่งรายการก่อนส่งต่อไปยังชั้นขนส่ง
- สิ่งนี้ตัดกันกับกรณีที่ TCP segmentation offload ถูกใช้อย่างแพร่หลาย และ GSO ซึ่งเป็น offload ฝั่งส่งของ UDP เพิ่งได้รับความสำคัญมากขึ้นในช่วงหลัง
- เมื่อต้องดาวน์โหลดไฟล์เดียวกัน UDP stack ในเคอร์เนลทำให้เกิดการอ่านแพ็กเก็ต
- การประมวลผล ACK ใน user space
- ใน user space, QUIC มีโอเวอร์เฮดสูงกว่าในการประมวลผลแพ็กเก็ตที่รับและการสร้างการตอบกลับ
- สาเหตุรวมถึงแพ็กเก็ตจำนวนมากเกินไปที่ส่งมาจากเคอร์เนล, การประมวลผล QUIC ACK ใน user space และการขาด optimization บางอย่าง เช่น delayed ACK ของ QUIC
- แพ็กเก็ตข้อมูลมากเกินไป
การวัดเบื้องต้นและทิศทางการบรรเทา
- การทดลองเบื้องต้นในการดาวน์โหลดไฟล์ 1GB บนเบราว์เซอร์ Chrome แสดงให้เห็นว่าเมื่อเปิดใช้ QUIC เวลาในการดาวน์โหลดเพิ่มขึ้นเกือบเป็นสองเท่า
- ผลตัวอย่างเป็นค่าเฉลี่ยจากการรัน 10 ครั้ง
- เดสก์ท็อป Ethernet: HTTP/2 9.32 วินาที, HTTP/3 18.60 วินาที เพิ่มขึ้น 99%, การใช้ CPU เพิ่มจาก 77.5% เป็น 96.9%
- Pixel 5 low-band 5G: HTTP/2 37.11 วินาที, HTTP/3 78.65 วินาที เพิ่มขึ้น 112%, การใช้ CPU เพิ่มจาก 121.55% เป็น 161.77%
- Pixel 5 mmWave 5G: HTTP/2 30.10 วินาที, HTTP/3 63.20 วินาที เพิ่มขึ้น 110%, การใช้ CPU เพิ่มจาก 128.43% เป็น 165.20%
- การวัดการใช้ CPU บนเดสก์ท็อปอ้างอิงจากบริการเครือข่ายของเบราว์เซอร์ ส่วนบนสมาร์ตโฟนอ้างอิงจากทั้งโปรเซสของเบราว์เซอร์
- ค่า CPU usage ที่เกิน 100% หมายความว่าโปรเซสของเบราว์เซอร์ใช้มากกว่าหนึ่งคอร์บนระบบแบบ multi-core
- แนวทางบรรเทาที่เสนอคือการนำ UDP GRO ฝั่งรับมาใช้, การปรับปรุง GSO และ GRO ให้เป็นมิตรกับ QUIC, การปรับปรุงลอจิกรับข้อมูลฝั่ง QUIC และการรับข้อมูล QUIC ผ่านหลาย CPU core
- เนื่องจากโฮสต์ฝั่งไคลเอนต์มีความหลากหลายสูงกว่าเซิร์ฟเวอร์ ทั้งพีซี อุปกรณ์พกพา อุปกรณ์ embedded และระบบปฏิบัติการหลากหลายชนิด การทำให้แนวทางบรรเทาเกิดขึ้นจริงจึงมีความยากในทางปฏิบัติ
- ข้อมูลการวัดและซอร์สโค้ดถูกเผยแพร่พร้อมกับงานวิจัยดังกล่าว
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ดูเหมือนวงการจะยอมทำทุกอย่าง ยกเว้นการทำ เว็บไซต์ที่เบา
แม้ช่วงปลายยุค 90 แค่มีสายสัญญาณที่เร็ว อินเทอร์เน็ตก็ให้ความรู้สึกตอบสนองทันที หน้าเว็บมีขนาดเล็ก และแทบไม่มี JavaScript
ตอนนี้ก็ยังหาเพจเบา ๆ ที่เร็วแบบนั้นได้อยู่ ซึ่งให้ความรู้สึกแทบเหนือจริง เหมือนหน้าเว็บโหลดเสร็จหมดก่อนจะปล่อยปุ่มเมาส์เสียอีก
ถ้าประสบการณ์ผู้ใช้ดีขึ้นก็คงพอทนได้ แต่เราก็ไม่ได้สิ่งนั้นด้วย
มันเร็วขึ้นและแข็งแรงทนทานขึ้นมาก แถมความไม่ตรงกันของสถานะระหว่างฟรอนต์เอนด์กับแบ็กเอนด์ก็หายไป
เพื่อความสะดวก ยังยอมให้มี JavaScript ขั้นต่ำอยู่ ตอนนี้มีอยู่ไม่กี่ร้อยบรรทัด และยังจะเพิ่มอีกเล็กน้อยเพื่อให้ยังดูเหมือนแอปแบบหน้าเดียว
ด้วยวิธีนี้จะลบ React ได้ราว 40,000 บรรทัด และ Kotlin ราว 20,000 บรรทัด แต่ต้องเขียนโค้ดแบ็กเอนด์ใหม่ประมาณ 30,000 บรรทัด
ถึงอย่างนั้นก็ยังชอบ
เลยลองย้ายโฮมเพจของตัวเองไปเป็นเวอร์ชัน VUE.JS แบบสแตติกเพื่อเก็บประสบการณ์ แต่การส่งชื่อตัวแปรเป็นสตริงเพื่อผูกวิวกับสถานะดูแปลก การขยายสภาพแวดล้อมบิลด์ก็ซับซ้อนเกินจำเป็น ทุกอย่างช้าและต้องทำได้เฉพาะตามวิธีหนึ่ง ๆ
ตอนนั้นคิดว่าทุกคนใช้กันก็น่าจะถูกแล้ว แต่ตอนนี้หลุดจากมุมมองนั้นมาได้ และเวอร์ชันใหม่ก็จบด้วย HTML ดิบกับเทมเพลตของตัวสร้างไซต์สแตติก
ขนาด HTML ลดลง 90%, ปริมาณการใช้ JS ลดลง 97% และเวลาบิลด์ลดจาก 20 วินาทีเหลือ 2 วินาที
ประสบการณ์ผู้ใช้ก็ดีขึ้น และหลังเวอร์ชันใหม่ จำนวนการเข้าชมก็เพิ่มขึ้น 30%
ถ้าใช้เว็บให้น้อยลง เว็บก็จะเจ๋งขึ้นได้มาก
ฝั่งแบ็กเอนด์ ทุกวันนี้ไข่ทองคำก็คือการขายไมโครเซอร์วิสผ่านผลิตภัณฑ์ headless SaaS ที่เชื่อมต่อด้วย API และพูดทำนองว่าประสิทธิภาพจะดีขึ้นเองแน่นอน
https://macharchitecture.com/
ถ้าผู้คนอยากซื้อพลั่วแบบนั้น โลก IT ก็มีแต่ต้องตุนพลั่วแบบนั้นไว้
บล็อกเป็นไซต์ Hugo ที่เรนเดอร์แบบสแตติกจึงไม่มี JS เลย ส่วนโปรเจกต์ใช้ Rails กับ HTML ที่เรนเดอร์บนเซิร์ฟเวอร์ และมี JS ขั้นต่ำเฉพาะฟีเจอร์ที่มีแล้วดี
แม้ไม่มี JS ก็ยังทำงานได้
อาจพูดแบบนี้เพราะเป็นไซต์ของตัวเอง แต่ประสบการณ์ดีกว่าเว็บส่วนใหญ่มาก และเราสูญเสียอะไรไปมากเกินไปแล้ว
Google เคยทำ Speedtest ที่ใช้ JS ล้วนมาก่อน
ตอนนั้น Ookla ยังใช้ Flash อยู่ จึงไม่ทำงานบน Chromebook และกลายเป็นปัญหาสำหรับเจ้าหน้าที่ติดตั้งในการตรวจสอบสถานะการติดตั้ง
ระหว่างนั้นได้เรียนรู้มากมายว่า TCP ตอบสนองต่อปัจจัยต่าง ๆ อย่างไร
ผลลัพธ์ในบทความนี้แทบจะเป็นไปตามที่คาดไว้ เพราะเป็นการผลักการควบคุมการไหลจากเคอร์เนล และอาจรวมถึงอะแดปเตอร์เครือข่าย ไปยัง user space
TCP มีการควบคุมการไหลและการรับประกันลำดับ ส่วน QUIC ก็เหมือนทำให้ต้องจัดการสิ่งนั้นเอง
แน่นอนว่ามีเหตุผลที่ดีสำหรับเรื่องนี้
การควบคุมความแออัดของ TCP ขึ้นชื่อว่าตามความเร็วการเชื่อมต่อสมัยใหม่ไม่ทัน และมีอัลกอริทึมใหม่อย่าง BBR ออกมาแล้ว แต่ก็มาพร้อมต้นทุน [1]
สิ่งสำคัญที่มักขาดหายไปบ่อยเกินไปในการทดสอบเครือข่ายหรือเว็บแอปคือ เวลาแฝง
ถ้าอยู่ในเอเชียหรือออสเตรเลีย ก็น่าจะรู้ว่าเวลาแฝงไป-กลับ 100ms นั้นร้ายแรงแค่ไหน
มันสามารถทำให้สิ่งที่เคยตอบสนองได้อย่างสมบูรณ์กลายเป็นใช้งานแทบไม่ได้เลย และเพราะหน้าต่างรับส่งข้อมูล มันยังลดแบนด์วิดท์ที่การเชื่อมต่อรองรับได้ อีกทั้งทำให้การควบคุมข้อผิดพลาดและความแออัดตอบสนองช้าลงด้วย
หากกำลังทดสอบเครือข่ายหรือเว็บแอป ขอแนะนำอย่างยิ่งให้มีการทดสอบที่สุ่มเพิ่มเวลาแฝงเข้าไป 100ms [2]
ดังนั้นโอเวอร์เฮดของ QUIC อาจไม่ได้สำคัญจริง ๆ ก็ได้
เพราะแบนด์วิดท์ที่ใช้งานได้จริงบนการเชื่อมต่อ TCP เดี่ยวหรือสตรีม QUIC เดี่ยวอาจต่ำกว่าแบนด์วิดท์ดิบจริงมาก
พูดอีกแบบคือ แม้จะมีข้อมูลเพิ่มขึ้น 45% แต่ถ้าการจัดการควบคุมความแออัดเองทำให้ความเร็วที่ใช้งานได้จริงระหว่างสองจุดสูงขึ้น ก็อาจคุ้มค่า
[1]: https://atoonk.medium.com/tcp-bbr-exploring-tcp-congestion-c...
[2]: https://bencane.com/simulating-network-latency-for-testing-i...
มองย้อนกลับไปก็ชัดเจนอยู่แล้ว แต่ใน TCP เราแค่บอกว่า “เคอร์เนล ช่วยส่งบัฟเฟอร์ก้อนใหญ่นี้ให้หน่อย” ก็พอ ขณะที่ UDP เป็นแบบแลกเปลี่ยนแพ็กเก็ต แม้แต่การส่ง 0 ก็มีต้นทุน CPU สูงจากการสลับโหมดบนระบบปฏิบัติการและฮาร์ดแวร์ผู้บริโภคส่วนใหญ่
มีวิธีอ้อมอยู่ แต่ก็ไม่ง่าย และจากประสบการณ์ของผมยังไม่พร้อมนัก อีกทั้งยังจำกัดตัวเลือกภาษา ไลบรารี และแพลตฟอร์มที่จะใช้ด้วย
แถมยังเห็นว่า throughput ลดลงมากเมื่อใช้ MacBook ด้วยแบตเตอรี่ ซึ่งน่าจะเกี่ยวข้องกับคอร์ประหยัดพลังงาน
อย่างที่สอง QUIC ทำการควบคุมความแออัดได้ไม่ดี
ผมใช้ quic-go ดังนั้นอาจต่างกันไปตามสภาพแวดล้อม แต่การปรับแต่งใด ๆ ก็ไม่ได้ช่วยมากนัก และเมื่ออยู่ร่วมกับ TCP stream แล้ว TCP จะเอาแบนด์วิดท์ไปได้มากกว่า
อย่างที่สาม API แปลก
ตัว QUIC เองมีหลายสตรีม จึงไม่ใช่ตัวแทนแบบเสียบแทน TCP ได้ตรง ๆ
เพียงแต่มีเจตนาจะทำให้ HTTP/3 เป็นตัวแทนแบบเสียบแทนได้ในเลเยอร์ที่สูงกว่า ซึ่งผมยังไม่ได้ลองจึงพูดไม่ได้
ถ้าทำงานในระดับสตรีม ก็เป็นเรื่องที่ควรนึกไว้
สรุปแล้วรู้สึกเหมือนแพ้พอสมควร แต่พร้อมกันนั้นก็เกิดความเคารพขึ้นใหม่ต่อการปรับแต่งและความทนทานของเพื่อนเก่าอย่าง TCP
เป็นเทคโนโลยีที่น่าทึ่งจริง ๆ และระบบปฏิบัติการก็มอบให้ใช้ฟรีเสมอ
ปัญหาหลักบางส่วนของ TCP ก็ไม่ได้เป็นข้อบกพร่องด้านการออกแบบเท่าไร แต่เป็นค่าเริ่มต้นที่อนุรักษนิยม หรือเป็นมรดกตกค้างมากกว่า
เช่นข้อจำกัดบัฟเฟอร์ของ Linux, Nagle และทำนองนั้น
ถ้าสามารถปรับปรุง TCP ไปเลย แทนที่จะประดิษฐ์ล้อขึ้นมาใหม่ ก็คงดี
[1]: https://payload.app/
เป็นการตัดสินใจที่จำเป็นเพื่อให้ QUIC เริ่มต้นได้ แต่เมื่อมันมีอยู่แล้ว ก็อาจนำกลับมาทบทวนได้
ไม่มีอุปสรรคทางเทคนิคในการ implement QUIC ในเคอร์เนล และถ้ามีข้อได้เปรียบด้านประสิทธิภาพมากพอ ใครสักคนก็น่าจะทำเกือบแน่นอนในไม่ช้า
ความต่างกันราวฟ้ากับดิน
มีพรีเซ็ต Slow/Fast 4G, 3G และสามารถสร้างพรีเซ็ตแบบกำหนดเองที่ระบุความเร็วดาวน์โหลด/อัปโหลด, เวลาแฝงเป็น ms, อัตราการสูญหายของแพ็กเก็ต, ความยาวคิวแพ็กเก็ต และเปิดการจัดเรียงแพ็กเก็ตใหม่ได้
Daniel Stenberg ผู้สร้างและผู้ดูแล curl เคยเขียนเกี่ยวกับ HTTP/3 ใน curl ไว้เมื่อไม่กี่เดือนก่อน: https://daniel.haxx.se/blog/2024/06/10/http-3-in-curl-mid-20...
หนึ่งในสิ่งที่เขาเน้นคือ การใช้ CPU ที่สูงกว่าของ HTTP/3 และ CPU ถึงขั้นกลายเป็นข้อจำกัดของ throughput
เลยสงสัยว่าในนี้เกิดจากความยังไม่สุกงอมของ implementation แค่ไหน และเกิดจากคุณสมบัติของการออกแบบ QUIC เองแค่ไหน
คำแนะนำข้อที่สามคือ UDP GRO ซึ่งเป็นการแก้ kernel และถ้าดีที่สุดก็คือฮาร์ดแวร์ NIC เพื่อรวมแพ็กเก็ต UDP ขาเข้า ลดงานต่อแพ็กเก็ต แล้วเปลี่ยนเป็นงานต่อกลุ่มแทน
TCP มีสิ่งนี้อยู่แล้ว และฝั่งส่งก็มีสิ่งคล้าย ๆ กัน เช่น TSO และ GSO ของ Linux
สิ่งนี้ก็ให้ความรู้สึกว่ายังไม่สุกงอมเหมือนกัน แต่ถ้าคิดถึงความเป็นไปได้ว่าเป็นเพราะขาดฟีเจอร์ฮาร์ดแวร์ ก็อาจแก้ได้ยากกว่า
บทคัดย่อพูดถึงต้นทุนของวิธี ACK ของ QUIC แต่ผมยังไม่ได้ดูข้ออ้างนั้นโดยละเอียด
อีกฟีเจอร์หนึ่งที่พบได้ในเซิร์ฟเวอร์ยุคใหม่ที่ใช้ TCP คือการ offload TLS ไปให้ฮาร์ดแวร์
เรื่องนี้ดูสำคัญกว่าในเซิร์ฟเวอร์ที่ส่ง TCP stream จำนวนมากพร้อมกัน
บน Linux ทำได้โดยใช้ user-space networking หรือผ่าน ‘kernel tls’ และถ้าเป็นไปได้ก็จะ offload ไปยังฮาร์ดแวร์
ฟีเจอร์นี้ยังเกี่ยวข้องกับความสามารถเฉพาะของ Linux ที่ทำให้แบ่ง TCP stream เป็น ‘message’ แล้วส่งไปยังเธรดอื่นได้ด้วย แต่ไม่รู้ว่าสามารถส่งต่อ message ด้านหลังล่วงหน้าได้หรือไม่เมื่อแพ็กเก็ตก่อนหน้าสูญหาย
ไม่เคยรู้สึกว่ามันตั้งใจจะทำให้ทุกการเชื่อมต่อเร็วขึ้น
ถ้ามองจากมุมนั้น การแลกเปลี่ยนข้อดีข้อเสียก็ดูสมเหตุสมผล
ผมไม่ใช่ผู้เชี่ยวชาญ ดังนั้นหวังว่าคนที่รู้ดีกว่าจะช่วยแก้ให้
QUIC ถูกสร้างขึ้นเพราะไม่มีทางเลยที่จะทำให้ฮาร์ดแวร์และ middleware ทุกชิ้นทั่วอินเทอร์เน็ต รวมถึงทุกอย่างรอบ ๆ รองรับมาตรฐาน TCP หรือ TLS ใหม่ได้
ดังนั้น QUIC จึงเป็นทางออกที่สวยงามในการวาง มาตรฐาน transport ใหม่บน UDP ทับฮาร์ดแวร์อินเทอร์เน็ตแบบ legacy
ในโลกอุดมคติ เราคงสร้างมาตรฐาน TCP และ TLS ใหม่ แล้วเปลี่ยนหรืออัปเดตเราเตอร์และฮาร์ดแวร์อินเทอร์เน็ตทั่วโลกทั้งหมด เพื่อให้ implement ได้โดยใช้ CPU ต่ำกว่า
ในการทดสอบ quiche ที่ติด CPU ได้ต่ำกว่า 200MB/s ส่วน nghttp2 เกิน 900MB/s
สงสัยว่า CPU ถูก throttle หรือเปล่า
ถ้า implementation ของ HTTP/3 ใช้ CPU มากกว่า 4 เท่า ก็น่าสนใจ แต่ถ้าค่าสัมบูรณ์เดิมต่ำมากอยู่แล้ว ก็อาจไม่ใช่ปัญหาใหญ่เสมอไป
ประเด็นหลักคือส่วนที่ว่า “บนอินเทอร์เน็ตที่เร็ว สแตก UDP+QUIC+HTTP/3 ทำให้อัตราข้อมูลลดลงได้สูงสุด 45.2% เมื่อเทียบกับ TCP+TLS+HTTP/2” แต่ถึงยังไม่ได้อ่าน paper ทั้งฉบับ ในบทนำดูเหมือนจะถือว่าต่ำกว่า 600Mbit/s เป็น อินเทอร์เน็ตช้า
ถ้ายก Cloudflare เป็นตัวอย่าง ก็รองรับ QUIC เฉพาะระหว่าง client <> edge เท่านั้น ไม่รองรับสำหรับการเชื่อมต่อไปยัง origin
ถ้าการเชื่อมต่อ edge <> origin สามารถ reuse ได้ เสถียร และ “เร็ว” ก็สมเหตุสมผล
https://developers.cloudflare.com/speed/optimization/protoco...
ฟังดูไม่ได้เหมือนเป็นปัญหาพื้นฐานของตัว protocol เอง
แต่ปัญหา latency แบบนี้ไม่ได้เพิ่มการใช้แบตเตอรี่มากนัก ต่างจากปัญหาการใช้ CPU ที่ทำให้ CPU ต้อง boost
ในการสื่อสารระหว่างเซิร์ฟเวอร์ก็ไม่ใช่ปัญหาเช่นกัน
โดยพื้นฐานแล้ว มันคือระดับที่การส่งข้อมูลแบนด์วิดท์สูงบนอุปกรณ์ผู้ใช้ปลายทาง “ช้าลง” เมื่อใช้การเชื่อมต่อที่เร็วมากแม้ในปี 2024
ความเร็วที่พูดถึงตรงนี้ไม่ได้อิงจากความเร็วที่ซื้อจากโฆษณา แต่เป็นความเร็วใช้งานจริงจากอุปกรณ์ไปถึงเซิร์ฟเวอร์
ไม่ได้หมายความว่า paper นี้ไร้ประโยชน์ implementation ของเบราว์เซอร์ควรถูกปรับปรุง และ paper ก็แสดงให้เห็นจุดนั้นได้ดี
แต่อย่างไรก็ดี ชื่อ paper แทบจะเป็น clickbait 100%
ในช่วงที่อินเทอร์เน็ตระดับกิกะบิตกำลังแพร่หลาย การเปลี่ยนไปใช้วิธีส่งข้อมูลที่ช้ากว่าย่อมเป็นความผิดพลาดอย่างชัดเจน
อีก 30 ปีข้างหน้ามันจะเร็วขึ้นอีก และถ้าต้องใช้ protocol ที่เก่ากว่าเพื่อใช้ความเร็วสายให้เต็ม ก็คงเป็นเรื่องโง่มาก
เมื่อเดือนกันยายนก็มีโพสต์เดียวกันนี้ขึ้นมาแล้ว: QUIC is not quick enough over fast internet (acm.org)
https://news.ycombinator.com/item?id=41484991 (327 ความคิดเห็น)
Brave/Vivaldi/Opera ฯลฯ ต้องเลือกอย่างมีสติ
ทำนองว่าขอแค่โฆษณาไปถึงเร็ว อย่างอื่นไม่สำคัญ
เรื่องนี้ฟังดูแปลกมากจริง ๆ
ผมเคยทำความเร็วได้ 900mbps ด้วย QUIC+HTTP/3 อย่างเดียว และแม้แต่ด้วย QUIC อย่างเดียวด้วยซ้ำ
ดูเหมือนเป็น implementation ของ TLS ที่แย่ หรือ implementation รุ่นแรก ๆ ที่ไม่มีประสิทธิภาพ
การใช้ CPU อยู่ประมาณ 5% บนคอร์ EPYC รุ่นที่ 2 ซึ่งค่อนข้างปกติ
เล่าเป็นเกร็ดว่า เคยมีปัญหาในการเข้าถึง wordpress.org
ตอนเริ่มใช้ Wordpress ใหม่ ๆ ยังอ่านเอกสารได้ปกติ แต่พอถึงจุดหนึ่งก็เข้าเว็บไซต์ไม่ได้เลย
ลองบูตคู่กับ Linux แล้วจึงไม่ใช่ปัญหาของ Windows, ping ก็ได้ปกติ และแม้เปลี่ยนเบราว์เซอร์สามตัวก็ยังเหมือนเดิม
พอเข้าเว็บแล้วมันค้าง ไม่โหลดอะไรเลย หรือบางครั้งหน้าก็หยุดโหลดกลางคัน
วันนี้เจอวิธีแก้ คือปิด Experimental QUIC Protocol ในการตั้งค่าของ Chrome
มีปัญหาเข้าถึง wordpress.org มาหลายเดือน แต่กังวลตรงที่ไม่มีสัญญาณอะไรเลยว่านี่เกิดจาก QUIC
เพิ่งสังเกตได้แบบหวุดหวิดเพราะในเครื่องมือนักพัฒนามีข้อผิดพลาดเกี่ยวกับ QUIC โผล่มาเป็นครั้งคราวเท่านั้น
สงสัยว่ายังมีเว็บไซต์อีกสักเท่าไรที่เข้าถึงไม่ได้เพราะโปรโตคอลนี้ แต่ผู้ใช้ไม่รู้สาเหตุ
ในที่นี้ อินเทอร์เน็ตเร็ว หมายถึง 500Mbps และเหตุผลคือ QUIC ดูเหมือนจะติดคอขวดที่ CPU เมื่อความเร็วสูงกว่านั้น
ไม่ได้ดูละเอียดพอจะยืนยันว่าระบบทดสอบเป็นเครื่องระดับผู้บริโภคทั่วไปหรือไม่ หรือบนเดสก์ท็อปประสิทธิภาพสูงยังมีปัญหาอยู่หรือเปล่า
ที่ตลกคือ ทั้งที่เราไม่ค่อยรู้รายละเอียดมากนัก แต่ก็ยอมรับโดยปริยายกับความคิดทำนองว่า “QUIC คือ HTTP/2 ตัวใหม่” เพียงเพราะ เร็ว = ดี
คล้ายกับการซื้อโทรศัพท์ 5G รุ่นใหม่เพราะเขาบอกว่ามันเร็วกว่า 4G หลายเท่า
ทั้งที่จริง ๆ แล้ว 1) โทรศัพท์ 4G ของฉันไม่เคยทำงานถึงความเร็วสูงสุดของ 4G เลยสักครั้ง และ 2) ปัญหาการเชื่อมต่อแทบจะมักไม่ได้เกิดจากความเร็วของสายอินเทอร์เน็ต แต่เป็น DNS server, เว็บไซต์ปลายทาง หรืออุปกรณ์ multiplexing การเชื่อมต่อฝั่งผู้ให้บริการที่มีปัญหา
ถึงอย่างนั้นก็ยังกลายเป็นว่า “แต่มันเป็น 5G นะ”
โฆษณา “ไฟเบอร์ broadband” ที่ทำเหมือนคนดูทีวีแล้วผมปลิวเพราะแรงลมก็ตลกเหมือนกัน
ของจริงไม่ได้ทำงานแบบนั้น
สมัยก่อนยังสตรีมด้วยการเชื่อมต่อ 8Mb ได้ ดังนั้น 300Mb อาจดีสำหรับบางงาน แต่ก็สงสัยว่าจะรู้สึกถึงความแตกต่างมากแค่ไหน
ถ้า QUIC มี โหมดที่ไม่ใช่ TLS ก็คงดี
ระหว่างพัฒนาในเครื่อง บางครั้งก็แค่อยากดูว่าอะไรวิ่งไปมาบนสายบ้าง แต่นี่เพิ่มแรงเสียดทานที่ไม่จำเป็นเข้ามาเยอะมาก
ดังนั้นจึงไม่สามารถทำงานได้หากไม่มีสิ่งนั้น