บริการอินเทอร์เน็ต L4S เพื่อความหน่วงต่ำ การสูญเสียต่ำ และ throughput ที่ขยายตัวได้: RFC 9330
(datatracker.ietf.org)- RFC 9330 กำหนด สถาปัตยกรรม L4S เพื่อลด ความหน่วงจากการเข้าคิวและการสูญเสียจากความคับคั่ง ของแอปพลิเคชันอินเทอร์เน็ต โดยมองว่าสาเหตุรากของความหน่วงอยู่ที่การควบคุมความคับคั่งแบบค้นหาความจุของฝั่งผู้ส่ง มากกว่าตัวคิวเอง
- L4S ผสาน Scalable congestion control ของโฮสต์ผู้ส่ง, AQM ที่จุดคอขวด และโปรโตคอลที่อิง ECN เข้าด้วยกัน และใช้ codepoint ECT(1) ในฟิลด์ IP-ECN เพื่อระบุแพ็กเก็ต L4S
- เป้าหมายความหน่วงจากการเข้าคิวคือค่าเฉลี่ยต่ำกว่า 1ms และเปอร์เซ็นไทล์ที่ 99 ประมาณต่ำกว่า 2ms โดยในตัวอย่าง DCTCP และ Dual-Queue Coupled AQM แม้มีโหลดเกิน ความหน่วงจากการเข้าคิวที่เปอร์เซ็นไทล์ที่ 99 ก็อยู่ราว 1~2ms
- เพื่อให้อยู่ร่วมกับ Classic congestion control ตระกูลเดิมอย่าง Reno/CUBIC ได้ L4S ถูกออกแบบให้แยกความหน่วงของทราฟฟิก Classic กับทราฟฟิก L4S ออกจากกัน แต่ไม่แบ่งแบนด์วิดท์แบบตายตัว และให้แชร์กันในระยะยาว
- L4S ไม่ได้มาแทนที่ Diffserv, FQ-CoDel, PIE หรือ BBR แต่เป็นส่วนเสริม โดย TCP ต้องการ feedback ที่ละเอียดอย่าง AccECN ส่วน QUIC และ DCCP ให้ ECN feedback ที่ L4S ต้องการอยู่แล้ว
ปัญหาความหน่วงที่ L4S ต้องการแก้
- มีสถานการณ์เพิ่มขึ้นเรื่อย ๆ ที่ทราฟฟิกซึ่งต้องการ ความหน่วงต่ำ เช่น เว็บ เสียง วิดีโอคอนเฟอเรนซ์ เกม เดสก์ท็อประยะไกล แอปพลิเคชันคลาวด์ AR/VR และการควบคุมระยะไกล เข้าไปเติมลิงก์คอขวดจนเต็ม
- แม้การวางแคชและเซิร์ฟเวอร์ไว้ใกล้ผู้ใช้จะลดความหน่วงจากการแพร่สัญญาณลงแล้ว แต่การเข้าคิวยังคงเป็นองค์ประกอบหลักและเกิดเป็นระยะของความหน่วง
- แม้มี AQM สมัยใหม่ สไปก์ความหน่วงระดับหลายร้อย ms ก็ยังไม่ใช่เรื่องหายาก
- Classic AQM มักถูกตั้งค่าให้บัฟเฟอร์ความผันผวนของคิวแบบฟันเลื่อยของโฟลว์ระยะยาวเดี่ยว ทำให้พีคของความหน่วงทั้งเครือข่ายระหว่างโฟลว์ระยะยาวอาจสูงราวสองเท่าของความหน่วงพื้นฐานของเส้นทาง
- เป้าหมายของ L4S คือ ความหน่วงจากการเข้าคิวที่ต่ำมาก การสูญเสียต่ำมาก และ throughput ที่ขยายตัวได้
- ความหน่วงจากการเข้าคิวที่ต่ำมากหมายถึงค่าเฉลี่ยต่ำกว่า 1ms และเปอร์เซ็นไทล์ที่ 99 ประมาณต่ำกว่า 2ms
- แอปพลิเคชันแบบโต้ตอบที่ต้องการมากขึ้นจะเริ่มรู้สึกไม่เป็นธรรมชาติเมื่อความหน่วงปลายทางถึงปลายทางเกิน 50ms หรือ 20ms
- เนื่องจากการสูญเสียทำให้เกิดความหน่วงจากการส่งซ้ำในแอปพลิเคชันแบบโต้ตอบ การสูญเสียต่ำ จึงเป็นเป้าหมายสำคัญเช่นกัน
สาเหตุของความหน่วง: Classic congestion control มากกว่าคิว
- L4S มองว่าสาเหตุรากของความหน่วงจากการเข้าคิวอยู่ที่ การควบคุมความคับคั่งแบบค้นหาความจุ ของผู้ส่ง มากกว่าตัวคิวเอง
- Classic congestion control อย่าง Reno และ CUBIC ทำให้อัตราการครอบครองคิวเปลี่ยนแปลงเป็นรูปฟันเลื่อยขนาดใหญ่
- หาก AQM ตั้งคิวให้ตื้นเกินไป Classic congestion control จะใช้ลิงก์ได้ไม่เต็มที่ในทุก ๆ จุดต่ำสุดของฟันเลื่อย
- ยิ่งความเร็วของโฟลว์เพิ่มขึ้น เวลากู้คืนของ Classic congestion control ก็ยิ่งนานขึ้น ทำให้การควบคุมคิวและการใช้งานลิงก์หลวมลง
- Scalable congestion control ทำให้เวลาเฉลี่ยระหว่างสัญญาณความคับคั่ง หรือ เวลากู้คืน คงที่ แม้ความเร็วของโฟลว์จะเพิ่มขึ้น
- DCTCP เป็นตัวอย่างที่ใช้กันอย่างแพร่หลายในสภาพแวดล้อมที่ควบคุมได้
- มีการอิมพลีเมนต์และใช้งานใน Windows Server Editions, Linux และ FreeBSD
- Prague over TCP/QUIC, SCReAM สำหรับ L4S และส่วน L4S ECN ของ BBRv2 ก็รวมอยู่ในตัวอย่างของ Scalable congestion control ด้วย
องค์ประกอบสามส่วนของสถาปัตยกรรม L4S
- L4S ประกอบด้วยองค์ประกอบสามอย่าง
- Scalable congestion control ของโฮสต์ผู้ส่ง
- AQM ที่คอขวดของเครือข่าย
- โปรโตคอลที่อิง ECN ซึ่งรับผิดชอบการระบุแพ็กเก็ตและสัญญาณความคับคั่งระหว่างสองฝ่าย
- ความหน่วงต่ำไม่ได้เกิดจากเครือข่ายจัดให้โดยตรง แต่เกิดจากพฤติกรรม Scalable congestion control อย่างระมัดระวังของผู้ส่ง L4S
- บทบาทหลักของเครือข่ายคือ แยก ความหน่วงต่ำของทราฟฟิก L4S ออกจากความหน่วงจากการเข้าคิวที่มากกว่าซึ่งทราฟฟิก Classic ต้องการ
- เครือข่ายใช้ ECN เพื่อแจ้งสัญญาณเริ่มต้นมาก ๆ ของการเพิ่มขึ้นของคิวไปยังชั้น transport ทันที
- ไม่รอให้ทำให้ความผันผวนของคิวเรียบในระดับมากก่อนค่อยส่งสัญญาณเหมือน Classic AQM
- การรองรับ ECN เป็นสิ่งจำเป็นสำหรับ L4S
- ผู้ส่งใช้ฟิลด์ ECN เพื่อให้เครือข่ายแยกแพ็กเก็ต L4S ออกจากแพ็กเก็ต Classic ได้
ECN และ codepoint ECT(1)
- L4S ต้องการ สัญญาณความคับคั่งที่ละเอียดกว่า ซึ่งหลุดจากข้อจำกัดของ Classic ECN ที่ว่า “สัญญาณ ECN ต้องถูกปฏิบัติเสมือนเทียบเท่ากับการ drop”
- ต้องสามารถเกิดสัญญาณได้บ่อยขึ้น
- ต้องส่งสัญญาณได้ทันทีโดยไม่ต้องมีความหน่วงมากเพื่อทำให้ความผันผวนของคิวเรียบ
- RFC8311 ผ่อนคลายข้อกำหนดบางส่วนของ RFC3168 ทำให้การทดลอง L4S เป็นไปได้
- RFC9331 กำหนดให้ใช้ ECT(1) เป็นตัวระบุแพ็กเก็ต L4S
- codepoint CE ใช้เพื่อระบุ Congestion Experienced ทั้งในการประมวลผล L4S และ Classic
- หาก Classic AQM ที่อยู่ต้นเส้นทางทำเครื่องหมายแพ็กเก็ต ECT(0) เป็น CE อาจมีความเสี่ยงที่จะถูกจัดเข้าคิว L4S ผิด
- ตามภาคผนวก B ของ RFC9331 ผลกระทบที่เป็นอันตรายจะเกิดขึ้นได้ก็ต่อเมื่อเงื่อนไขที่พบได้ยากห้าข้อเกิดพร้อมกันทั้งหมด และแม้ในกรณีนั้น โอกาสเกิดการส่งซ้ำผิดพลาดก็ต่ำมาก
- ผู้ปฏิบัติการอาจต้องการใส่ทราฟฟิกที่ไม่ใช่ L4S ซึ่งต่ำและเรียบพอจนไม่สร้างคิว เข้าไปในคิว L4S
- ตัวอย่างคือ VoIP, ดาตาแกรมอัตราต่ำสำหรับการซิงก์เกมออนไลน์, DNS, LDAP เป็นต้น
- ในกรณีนี้จำเป็นต้องมีเครื่องหมายแยกต่างหาก เช่น EF, NQB หรือตัวระบุเฉพาะของผู้ปฏิบัติการ
Dual-Queue Coupled AQM
- L4S มีเป้าหมายให้คอมโพเนนต์เครือข่ายมอบความหน่วงต่ำได้โดยไม่จำเป็นต้องประมวลผลแยกตามโฟลว์
- แบบออกแบบตัวแทนคือ Dual-Queue Coupled AQM ซึ่งใช้สองคิว
- คิว L4S รักษาความหน่วงต่ำ
- คิว Classic สามารถมีคิวที่ใหญ่กว่าซึ่งจำเป็นต่อการที่ทราฟฟิก Classic จะรักษาการใช้งานลิงก์
- DualQ ถูกออกแบบให้ทำงานเหมือน เยื่อกึ่งซึมผ่านได้ ที่แยกความหน่วงออกจากกัน แต่ไม่แบ่งแบนด์วิดท์แบบตายตัว
- Classic AQM สร้างความน่าจะเป็นในการ drop/mark ตามความคับคั่งของคิวตนเอง แล้วนำไป coupling กับสัญญาณของคิว Classic และคิว L4S
- สัญญาณความคับคั่งที่ถูก coupling จะทำให้โฟลว์ L4S ลดความเร็วลงเพื่อเหลือความจุที่โฟลว์ Classic ต้องการ
- scheduler สามารถให้ลำดับความสำคัญกับคิว L4S ได้
- ในสเกลเวลาสั้น ๆ จะระบาย burst ของ L4S ได้อย่างรวดเร็วเพื่อปกป้องความหน่วงต่ำ
- ในสเกลเวลาระยะยาวตั้งแต่ระดับ round-trip time ขึ้นไป การ coupling สัญญาณความคับคั่งของคิว Classic จะชดเชยสิทธิ์แบนด์วิดท์ ทำให้เกิดความเป็นธรรมโดยประมาณในระดับต่อโฟลว์
- เมื่อมีแต่ทราฟฟิก L4S AQM ของคิว L4S จะเริ่ม marking ความคับคั่งในคิวที่ตื้นมากเพื่อรักษาความหน่วงจากการเข้าคิวให้ต่ำ
ความแตกต่างระหว่างวิธีคิวต่อโฟลว์กับ DualQ
- คิวต่อโฟลว์ อย่าง FQ-CoDel และ FQ-PIE ก็สามารถใช้กับ L4S ได้
- ใน Linux มีการปรับแก้ให้ใช้ threshold การ mark ECN แบบตื้นเฉพาะกับแพ็กเก็ต ECT(1) ได้
- โฟลว์ Not-ECT หรือ ECT(0) จะใช้ Classic AQM ส่วนโฟลว์ ECT(1) โดยทั่วไปจะใช้ threshold ตื้นระดับต่ำกว่า ms
- แนวทางต่อโฟลว์แยกคิวของแต่ละโฟลว์ แต่ไม่ได้กำจัดการเข้าคิวที่โฟลว์นั้นสร้างขึ้นเอง
- วิธี DualQ ไม่ต้องตรวจลึกกว่าชั้น IP เพราะตัวระบุ L4S อยู่ในฟิลด์ IP-ECN
- ใช้ได้แม้ในสภาพแวดล้อมที่ตัวระบุชั้น transport ถูกเข้ารหัส เช่น IPsec หรือ VPN tunnel ที่เข้ารหัส
- วิธีต่อโฟลว์ทำให้เครือข่ายรับหน้าที่ควบคุมความเร็วสัมพัทธ์ระหว่างโฟลว์ของแอปพลิเคชัน
- DualQ แยกปัญหาการให้ความหน่วงต่ำออกจากการควบคุมความเร็วของโฟลว์ และหากจำเป็นก็สามารถเพิ่มการ policing ความเร็วของโฟลว์แยกต่างหากได้
ข้อกำหนดฝั่งโฮสต์
- ผู้ส่งต้องอิมพลีเมนต์ Scalable congestion control
- DCTCP เป็นตัวอย่างที่ใช้กว้างที่สุด แต่หากจะใช้บนอินเทอร์เน็ตสาธารณะ ต้องปรับปรุงด้านความปลอดภัยและประสิทธิภาพ
- ส่วนของข้อกำหนด Prague L4S ที่เกี่ยวข้องกับความเสี่ยงในการก่อผลเสียต่อผู้อื่นถูกบรรจุเป็นข้อกำหนดเชิง normative ใน RFC9331
- TCP Prague ถูกอิมพลีเมนต์เป็น reference implementation บน Linux
- โปรโตคอล transport อื่นนอกจาก TCP หากต้องการใช้บริการ L4S ก็ต้องอิมพลีเมนต์การตอบสนองต่อความคับคั่งแบบ Scalable และระบุด้วย codepoint ECT(1)
- กำลังมีการพิจารณา variant แบบ Scalable สำหรับ QUIC
- ส่วน L4S ECN ของ BBRv2 ถูกเสนอเป็น Scalable congestion control สำหรับ TCP และ QUIC เป็นต้น
- variant L4S ของ SCReAM สำหรับสื่อ RTP ก็ถูกอิมพลีเมนต์แล้ว
- สถานะของ ECN feedback แตกต่างกันตามแต่ละโปรโตคอล
- DCCP และ QUIC ให้ ECN feedback ที่ละเอียดเพียงพอสำหรับ L4S
- ECN feedback เดิมของ TCP มีสมมติฐานว่า ECN mark เทียบเท่ากับการ drop จึงใช้กับ Scalable TCP ไม่ได้
- receiver ของ TCP ต้องรองรับ AccECN ซึ่งเป็น ECN feedback ที่แม่นยำกว่า
- SCTP ต้องอิมพลีเมนต์และ deploy การออกแบบ ECN ใหม่เพื่อรองรับ L4S
- RTP มีการกำหนด ECN feedback ที่เพียงพอไว้ใน RFC6679 และ RFC8888
ทำไมจึงต้องมีสัญญาณความคับคั่งแบบชัดแจ้ง
- L4S ใช้ สัญญาณความคับคั่งแบบชัดแจ้ง แทนการสูญเสียเป็นกลไกหลัก
- การ drop เป็นทั้งความเสียหายต่อประสิทธิภาพและเป็นสัญญาณในเวลาเดียวกัน จึงสร้างความตึงเครียดระหว่าง “ความเสียหายที่ยิ่งน้อยยิ่งดี” กับ “สัญญาณที่ยิ่งมากยิ่งดี”
- สัญญาณแบบชัดแจ้งที่อิง ECN ใช้ได้หลายครั้งต่อหนึ่ง round-trip time โดยไม่ก่อความเสียหาย จึงได้เปรียบในการรักษาคิวให้สั้น
- L4S ย้ายการทำให้เรียบจากเครือข่ายไปยังโฮสต์
- เครือข่ายไม่รู้ RTT ของแต่ละโฟลว์ ดังนั้นวิธี Classic จึงต้องสมมติ RTT ที่แย่ที่สุด
- ด้วยเหตุนี้ สัญญาณความคับคั่งแบบ Classic จึงอาจล่าช้า 100~200ms
- โฮสต์แต่ละตัวรู้ RTT ของตนเอง จึงทำให้เรียบเท่าที่จำเป็นได้ โดยทั่วไปอยู่ระดับไม่กี่ ms
- คิว L4S ใช้ variant ใหม่ของ L4S ECN ที่ไม่เทียบเท่ากับการ drop ส่วนคิว Classic ใช้ Classic ECN หรือการ drop
เหตุผลด้าน throughput scalability
- Classic Reno congestion control มี เวลากู้คืน ยาวขึ้นเมื่อเข้าสู่สภาพแวดล้อมที่มีผลคูณแบนด์วิดท์-ความหน่วงสูง
- เงื่อนไขตัวอย่างคือ RTT สูงสุดที่ยอดฟันเลื่อย 30ms
- เมื่อ packet rate ของ Reno เพิ่มจาก 1,250packet/s เป็น 10,000packet/s หรือเพิ่ม 8 เท่า เทียบกับแพ็กเก็ต 1500B จะเพิ่มจากราว 15Mb/s เป็น 120Mb/s และเวลากู้คืนเพิ่มจาก 422ms เป็น 3.38s
- CUBIC ทำงานในโหมด Reno-friendly ที่ 120Mb/s และใช้เวลาราว 4.3s ในการกู้คืน
- ที่ 960Mb/s จะเข้าสู่โหมด true CUBIC และเวลากู้คืนกลายเป็น 12.2s
- ที่ 7.68Gb/s เวลากู้คืนเพิ่มขึ้นถึง 24.3s
- Scalable congestion control อย่าง DCTCP หรือ Prague โดยเฉลี่ยจะกระตุ้นสัญญาณความคับคั่ง 2 ครั้งต่อ RTT และคุณสมบัตินี้คงอยู่ไม่ขึ้นกับความเร็วของโฟลว์
- ในปี 2020 ความจุเฉลี่ยของการเชื่อมต่อ fixed access ทั่วโลกอยู่ที่ 103Mb/s และในปี 2019 RTT พื้นฐานเฉลี่ยไปยัง CDN อยู่ที่ 25~34ms
- โฟลว์ดาวน์โหลด CUBIC เดี่ยวอาจใช้เวลาฟื้นตัวหลังลด congestion window ราว 200 RTT หรือ 5 วินาที แม้ในกรณีที่ดีที่สุด
ความสัมพันธ์กับเทคโนโลยีเดิม
- Diffserv จัดการการจัดสรรแบนด์วิดท์ของทราฟฟิกสำคัญและความหน่วงจากการเข้าคิวของทราฟฟิกที่ไวต่อความหน่วง แต่ L4S จัดการเฉพาะปัญหาความหน่วงจากการเข้าคิว
- Diffserv มีประสิทธิผลเมื่อมีเพียงทราฟฟิกบางส่วนที่คอขวดต้องการความหน่วงต่ำ
- หากทราฟฟิกทั้งหมดที่คอขวดต้องการความหน่วงต่ำ ประโยชน์ของการแยกประเภทด้วย Diffserv จะหายไป
- ตัวระบุ L4S ไม่ได้บ่งบอกข้อกำหนดด้านคุณภาพ แต่บ่งบอกคำมั่นด้านพฤติกรรมว่าจะตอบสนองต่อความคับคั่งแบบ Scalable
- Classic AQM อย่าง PIE และ FQ-CoDel ลดความหน่วงจากการเข้าคิวได้มากเมื่อเทียบกับกรณีที่ไม่มี AQM เลย
- L4S เป็นส่วนเสริมของสิ่งเหล่านี้ และไม่ได้มาแทนความจำเป็นในการ deploy อย่างกว้างขวาง
- AQM เพียงอย่างเดียวทำให้ความตึงเครียดระหว่างความหน่วงกับการใช้งานลิงก์หมดไปได้ยาก เพราะฟันเลื่อยขนาดใหญ่ของ Classic congestion control
- ABE เปลี่ยนการตอบสนองของโฮสต์ต่อ ECN marking เพื่อเพิ่มการใช้งานลิงก์และ throughput ของโฟลว์ ECN แต่ยังสมมติว่าเครือข่ายปฏิบัติต่อ ECN และการ drop เหมือนกัน
- BBR ควบคุมความหน่วงจากการเข้าคิวแบบ end-to-end โดยไม่ต้องมีลอจิกเครือข่ายพิเศษ
- BBR รักษาความหน่วงจากการเข้าคิวให้อยู่ในระดับต่ำอย่างสมเหตุสมผล แต่ไม่ต่ำเท่า L4S
- BBRv2 สามารถใช้ L4S ECN และพฤติกรรม Scalable L4S congestion control ได้หากเป็นไปได้
แอปพลิเคชันที่ใช้ได้
- L4S สามารถปรับปรุงคุณภาพของแอปพลิเคชันเดิมได้อย่างมากในสภาวะมีโหลด
- เกมและคลาวด์เกม
- VoIP
- วิดีโอคอนเฟอเรนซ์
- การท่องเว็บ
- การสตรีมวิดีโอแบบปรับอัตรา
- ข้อความโต้ตอบแบบทันที
- ความหน่วงจากการเข้าคิวที่ต่ำลงทำให้ฟังก์ชันอย่างวิดีโอแบบโต้ตอบบนคลาวด์และ VR/AR บนคลาวด์เป็นไปได้
- ในเดโม L4S วิดีโอแบบโต้ตอบบนคลาวด์และ VR ทำงานร่วมกันในสถานการณ์ที่แอปพลิเคชันที่ไวต่อความหน่วงหลายตัวและการดาวน์โหลดแชร์คิวคอขวดเดียวกันบนลิงก์บรอดแบนด์ 40Mb/s
- จากความหน่วงพื้นฐานปลายทางถึงปลายทาง 7ms ความหน่วงจากการเข้าคิวเพิ่มเติมอยู่ราว 1ms
- ใน AQM ทางเลือก วิดีโอตามหลังท่าทางนิ้วและการเคลื่อนไหวศีรษะอย่างสังเกตได้
- งานอย่างการแพนวิดีโอด้วยการปัดนิ้วหรือการเคลื่อนไหวศีรษะมีข้อกำหนดด้านความหน่วงเข้มงวดกว่า VoIP มาก
- telepresence ระยะไกลแบบโต้ตอบ และการควบคุมระยะไกลแบบมีวิดีโอช่วยสำหรับเครื่องจักรและกระบวนการอุตสาหกรรม ยากที่จะเชื่อถือได้หากไม่มีความหน่วงจากการเข้าคิวที่ต่ำมาก
โมเดลการ deploy และการนำมาใช้แบบค่อยเป็นค่อยไป
- L4S AQM ไม่ได้เป็นโครงสร้างที่ต้อง deploy ทั่วทั้งอินเทอร์เน็ตจึงจะเห็นผล
- เครือข่ายเข้าถึงอินเทอร์เน็ตสาธารณะมักถูกออกแบบให้คอขวดเกิดบนลิงก์เชิงตรรกะหนึ่งเส้นที่ทราบได้ตามแต่ละไซต์
- ไซต์รวมถึงบ้าน อุปกรณ์มือถือ และเครือข่ายแคมปัส/องค์กรขนาดเล็กถึงกลาง
- เป็นการสรุปทั่วไปที่ใช้กับเทคโนโลยีเข้าถึงหลากหลาย เช่น xDSL, เคเบิล, PON, cellular, wireless และดาวเทียม
- ฝั่ง downstream จะได้ประโยชน์ส่วนใหญ่หาก deploy L4S AQM ที่จุดเข้า link คอขวด และฝั่ง upstream ก็ใช้หลักเดียวกันหาก deploy ที่จุดเข้า upstream link
- โดยทั่วไป โฟลว์ L4S หนึ่งโฟลว์จะได้ประโยชน์ต้องมีสามองค์ประกอบ
- congestion control ของผู้ส่ง
- AQM ที่คอขวด
- feedback ของ receiver ที่อัปเกรดแล้วสำหรับ transport เก่าอย่าง TCP
- ลำดับการ deploy อาจหลากหลาย
- สามารถใช้ DCTCP ที่มีอยู่แล้วในสภาพแวดล้อมทดสอบที่ควบคุมได้
- เมื่อ deploy TCP Prague และ AccECN ก็จะใช้ L4S ในสภาพแวดล้อมอินเทอร์เน็ตสาธารณะได้
- QUIC รองรับ ECN feedback ที่ L4S ต้องการตั้งแต่แรกอยู่แล้ว จึง deploy Prague congestion control ฝั่งผู้ส่งได้ง่าย
ข้อจำกัดตามเทคโนโลยีลิงก์
- Wi-Fi, PON และเคเบิลจะ aggregate ข้อมูลหลายแพ็กเก็ตเป็น burst และบัฟเฟอร์แพ็กเก็ตที่เข้ามาระหว่างสร้าง burst
- Ethernet และ DSL ไม่ทำ packet aggregation แบบนี้
- บัฟเฟอร์เพื่อการ aggregate นี้ผู้ส่งลดไม่ได้ จึงไม่ควรนับเป็นคิวที่ AQM ควบคุม
- ลิงก์ไร้สายอย่าง cellular, Wi-Fi และดาวเทียมอาจมีความจุเปลี่ยนแปลงอย่างรวดเร็วและมาก จึงมองว่าคิวคงค้างเพื่อใช้ประโยชน์จากความจุที่เพิ่มขึ้นอย่างฉับพลันเป็นสิ่งพึงประสงค์
- เครือข่าย cellular ซับซ้อนขึ้นเพราะมีข้อกำหนดด้านบัฟเฟอร์เพื่อให้ handover ไม่เป็นที่สังเกต
- L4S ไม่สามารถกำจัดความจำเป็นในการบัฟเฟอร์ทั้งหมดเหล่านี้ได้
- หากกำจัด “เสาหลักที่ยาวที่สุด” อย่างบัฟเฟอร์สำหรับฟันเลื่อยขนาดใหญ่ของ Classic congestion control ได้ ก็จะเกิดแรงจูงใจให้ลดองค์ประกอบบัฟเฟอร์อื่น ๆ ต่อ เช่น ขนาด burst จาก packet aggregation หรือช่วงเวลา scheduling ของ MAC
คอขวดที่ไม่ใช่ L4S และการจัดการ loss
- แม้ L4S จะเปิดใช้งานระหว่างโฮสต์สองตัว หากคอขวดไม่รองรับ ECN ผู้ส่ง L4S ต้องอยู่ร่วมกับ Reno อย่างปลอดภัยเมื่อเกิดการ drop
- กฎนี้ปกป้องทราฟฟิก Classic แต่ทำให้บริการ L4S แย่ลงเมื่อมี loss
- loss ที่คอขวดชั่วคราวจาก burst ของคิวตื้น
- ข้อผิดพลาดการส่ง เช่น การรบกวนทางไฟฟ้า
- rate policing
- แนวทางสามอย่างในการจัดการเรื่องนี้ยังเป็นพื้นที่วิจัยในปัจจุบัน
- การละเลย loss บางส่วนใน Prague congestion control ที่ไม่น่าจะเกิดจากความคับคั่ง
- การกู้คืนข้อผิดพลาดการส่งด้วยการผสาน RACK, L4S และการส่งซ้ำของลิงก์แบบไม่มี reordering
- hybrid ECN/drop rate policer
- สถานการณ์ deploy ที่มีปัญหาเหล่านี้น้อย เช่น เครือข่ายมีสาย สามารถดำเนินไปควบคู่กับงานวิจัยดังกล่าวได้
ความปลอดภัยและการ policing ทราฟฟิก
- ปัจจุบันอินเทอร์เน็ตมักจัดการการแบ่งความจุของลิงก์ที่แชร์ระหว่างไซต์ด้วย scheduler และไม่ได้ policing ความเร็วของโฟลว์แอปพลิเคชันรายตัวโดยทั่วไป
- L4S ถูกออกแบบไม่ให้ทำลายสภาพนี้
- DualQ ถูกออกแบบไม่ให้ให้ข้อได้เปรียบด้านความเร็วแก่โฟลว์ที่ไม่ตอบสนองมากไปกว่า AQM แบบคิวเดียว
- หากต้องการ policing ความเร็วต่อโฟลว์ ก็สามารถเพิ่มได้อย่างเป็นอิสระจากการแยก L4S/Classic
- L4S ถูกออกแบบให้ลดความหน่วงโดยไม่ทำร้ายความหน่วงหรือความเร็วของทราฟฟิก Classic ดังนั้นจึงไม่จำเป็นต้อง policing การเข้าถึงบริการ L4S ด้วยความเร็วเพียงเพื่อปกป้อง Classic
- ผู้ปฏิบัติการบางรายอาจให้บริการ L4S เฉพาะกลุ่มจำกัด เช่น ลูกค้าพรีเมียม
- ในกรณีนี้สามารถใช้ตัวระบุภายใน เช่น ช่วงที่อยู่ต้นทาง ร่วมกับฟิลด์ ECN ได้
- หากตัวระบุภายในไม่ตรง แม้มี ECT(1) ก็สามารถส่งไปยังคิว Classic ได้
- บริการ L4S ต้องการการยับยั้งไม่ใช่แค่ด้านความเร็ว แต่รวมถึง ความเป็น burst ด้วย
- ฟังก์ชันปกป้องคิวความหน่วงต่ำสำหรับ DOCSIS ใช้วิธี redirect โฟลว์ที่สร้างคิวบางส่วนไปยังคิว Classic เพื่อรักษาความหน่วงต่ำ
- ฟังก์ชันปกป้องคิวเดี่ยวไม่ใช่องค์ประกอบจำเป็นของสถาปัตยกรรม L4S และส่วนหนึ่งของการทดลอง L4S คือการตรวจสอบว่าจำเป็นต้องมีฟังก์ชันแบบนี้หรือไม่
Tunnel และความเป็นส่วนตัว
- L4S AQM ส่งสัญญาณความคับคั่งผ่านฟิลด์ ECN ดังนั้นเมื่อทำงานภายใน tunnel หรือชั้นล่าง ฟิลด์ ECN ต้องถูกส่งต่อระหว่างชั้นตามมาตรฐาน
- สถาปัตยกรรม L4S ไม่ได้排除วิธีที่ตรวจตัวระบุชั้น transport
- ตัวอย่างคือ FQ-CoDel ที่เพิ่มการรองรับ L4S
- นวัตกรรมหลักอย่าง DualQ AQM ไม่ต้องตรวจลึกกว่า IP header ชั้นนอกสุด
- แม้ผู้ใช้เข้ารหัสตัวระบุโฟลว์ของแอปพลิเคชันด้วย IPsec หรือ VPN tunnel ที่เข้ารหัส ก็ไม่จำเป็นต้องสละความหน่วงต่ำ
- เนื่องจาก L4S สามารถให้ความหน่วงต่ำแก่ชุดแอปพลิเคชันที่กว้าง จึงลดความจำเป็นที่ต้องแยกแยะรายแอปพลิเคชันหรือคลาสย่อยระหว่างทางผ่านเครือข่าย
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
อันนี้เจ๋งมากจริง ๆ เดือนที่แล้วได้ดูเดโมสดที่ IETF 118 ใน Prague ดูเหมือนจะกำจัด bufferbloat ได้หมดเลย เหมาะกับวิดีโอแชตมาก
ดูเหมือนว่าจะต้องใส่บิตเพิ่มเติมในแพ็กเก็ต IP เพื่อบอกข้อมูลอย่างเช่นบัฟเฟอร์เต็มหรือไม่ แต่ของจริงมันทำงานได้ และให้ความรู้สึกว่า “ไม่คิดเลยว่าจะทำแบบนี้ได้”
ถ้าลิงก์เวลาไม่ทำงาน ให้ไปที่ 1 ชั่วโมง 21 นาที แก้ไข: ไม่ใช่ อันนี้เป็นสรุปแฮกกาธอน และหาพรีเซนเทชันจริงค่อนข้างยาก
สงสัยว่าฝั่งรับแจ้งความคับคั่งกลับไปยังฝั่งส่งอย่างไร เลยลองค้นดู แต่หาได้ยากกว่าที่คิด ประเด็นหลักมีเอกสารอยู่ที่ https://www.rfc-editor.org/info/rfc3168
พูดง่าย ๆ คือไม่ได้มีแค่แฟล็กเดียว แต่มีราว ๆ สามแฟล็ก มีแฟล็กที่ฝั่งส่งใช้บอกเราเตอร์ว่า รองรับ ECN ได้ แฟล็กที่เราเตอร์ใช้บอกฝั่งรับว่ามีความคับคั่ง และแฟล็กที่ฝั่งรับตั้งค่าเมื่อส่งแพ็กเก็ต ACK
ฝั่งส่งระบุการรองรับ ECN ด้วย ECT codepoint และเราเตอร์ที่รองรับ ECN จะตั้งค่า CE codepoint ใน IP header แล้วส่งต่อ แทนที่จะทิ้งแพ็กเก็ต ฝั่งรับจะตั้งค่า ECN-Echo ใน TCP ACK ถัดไป และฝั่งส่งจะตอบสนองต่อความคับคั่งเหมือนกรณีแพ็กเก็ตสูญหาย จากนั้นตั้งค่าแฟล็ก CWR ใน TCP header ของแพ็กเก็ตถัดไป
Bob Briscoe คิดในแนวทางนี้มานานแล้ว แนะนำบทความคลาสสิกที่เกี่ยวข้องด้านล่าง
http://www.sigcomm.org/sites/default/files/ccr/papers/2007/A...
https://dl.acm.org/doi/pdf/10.1145/1080091.1080124
มีการทดสอบบางส่วนบนเครือข่ายเคเบิลของ Comcast และสไลด์ด้านล่างอธิบายไว้
https://datatracker.ietf.org/meeting/118/materials/slides-11...
ไม่รู้ว่าจะนำไปสู่อะไร แต่เริ่มคิดว่า ISP อาจเริ่มเก็บค่าผ่านทางสำหรับช่องทางด่วนก็ได้
ความเห็นส่วนตัว แต่ผมทำงานที่ Comcast
ถ้าอยากรู้จัก L4S เพิ่มเติม ซีรีส์เว็บบินาร์ที่ understandinglatency.com เริ่มตั้งแต่วันนี้ มีทั้งผู้เขียน L4S บางคน ผู้รับผิดชอบการทดสอบภาคสนาม L4S ของ Comcast และเสียงวิจารณ์เข้าร่วมบรรยาย
เจอเดโมสั้น ๆ ที่ใช้งานจริงกับฟีดวิดีโอของรถ RC: https://www.youtube.com/watch?v=RZmS10djDEg
เป็นความคืบหน้าในทิศทางที่ถูกต้องก็จริง แต่ถ้ามี ผู้ร่วมระบบที่ประสงค์ร้าย แม้เพียงรายเดียวที่เพิกเฉยต่อ feedback เรื่องความคับคั่งและต้องการแค่ส่วนแบ่งแบนด์วิดท์ที่มากขึ้น ก็จะเกิดปัญหา จากนั้นผู้ร่วมระบบรายอื่นจะถอย และฝ่ายที่ไม่เป็นธรรมก็จะได้สิ่งที่ต้องการไป
ผู้ร่วมระบบที่ดีมักรู้ได้ยากว่ารายอื่นทำตามกฎหรือไม่ และต้องรู้ว่ามี fair queuing อยู่ จึงจะเชื่อได้ว่า L4S จะจัดการอย่างเป็นธรรม
ปัญหานี้แก้ได้ด้วยการเสริม L4S ด้วย fair queuing อย่าง fq_codel และทำให้ congestion control ตรวจจับการมีอยู่ของ fair queuing ได้: https://github.com/muxamilian/fair-queuing-aware-congestion-...
ข้อถกเถียงเรื่อง fair queuing เป็นส่วนหนึ่งของข้อถกเถียงที่ใหญ่กว่า หากไม่มี fair queuing ความเป็นธรรมก็ถูก implement โดย end host อยู่แล้ว ไม่ว่าจะเกี่ยวกับ L4S หรือไม่ และ end host อย่างเซิร์ฟเวอร์ก็สามารถเพิกเฉยต่อการตอบสนองต่อความคับคั่งเพื่อเอามากกว่าส่วนแบ่งที่เป็นธรรมได้ นี่ไม่ใช่ปัญหาใหม่ที่ L4S สร้างขึ้น แต่ก็มีฝ่ายที่มองว่า L4S ทำให้เอาส่วนแบ่งที่มากขึ้นได้ง่ายกว่า
ผู้สนับสนุน fair queuing มองว่าเครือข่ายควรรับประกันการแบ่งปันอย่างเป็นธรรม แต่ไม่ใช่ทุกคนจะเห็นด้วยกับตัวชี้วัดความเป็นธรรมที่พวกเขาเลือก โดยเฉพาะหนึ่งในผู้สนับสนุนหลักของ L4S ไม่เห็นด้วย และดูได้จากบทความที่ลิงก์ไว้ตรงนี้: https://news.ycombinator.com/item?id=38598023
ในมุมผู้ใช้ อยากรู้ว่าในทางปฏิบัติจะเปลี่ยนอะไรบ้าง เช่น วิดีโอคอลจะใกล้เคียง real-time มากขึ้นไหม? ปกติมีดีเลย์ประมาณ 0.5~1 วินาที เลยพูดทับและขัดจังหวะกันบ่อย ๆ ยังมีแอปพลิเคชันอะไรอีกที่ดีขึ้นมาก?
หากต้องการให้บิตเรตต่ำกว่า 3Mbps ต้องแลกกันยากระหว่างคุณภาพ บิตเรต เวลา CPU และ latency แล็ปท็อปทั่วไป CPU ช้า หรือแม้มี CPU 6 คอร์ แต่เมื่อใช้แบตเตอรี่ก็มักคง clock ไว้ต่ำ การเข้ารหัสวิดีโอแบบ hardware acceleration ก็ยังไม่แพร่หลาย ทำให้ต้องเสียคุณภาพและ latency ไป
Wi-Fi ก็เพิ่ม latency โดยเฉพาะเมื่อแล็ปท็อปทำงานด้วยแบตเตอรี่ บริการวิดีโอแชตจำนวนมากใช้เซิร์ฟเวอร์คลาวด์เป็นตัว relay เพื่อจัดการ NAT ซึ่งเพิ่ม latency เข้าไปอีก
https://hpbn.co/wifi/#measuring-and-optimizing-wifi-performa...
ฟังก์ชันที่มีการโต้ตอบสูงอย่างเกมและวิดีโอคอนเฟอเรนซ์ก็ดีขึ้นมากโดยไม่มี latency การเรนเดอร์เว็บเพจ การสตรีมวิดีโอ หรือการจัดการปฏิสัมพันธ์กับ AI assistant อย่าง Alexa ตอนนี้ต้องใช้ round trip จำนวนมาก ดังนั้นแทบทุกอย่างที่ผู้ใช้กับอุปกรณ์โต้ตอบกันก็น่าจะดีขึ้นได้
โดยเนื้อแท้แล้ว L4S คือเทคโนโลยีที่ลด latency feedback loop ช่วงท้ายของวิดีโอนี้อธิบายได้ค่อนข้างดี: https://youtu.be/tAVwmUG21OY?si=lydbqfNL80Y8Uxvp