Score:0

พารามิเตอร์ HTB "rate" จำกัดแบนด์วิธที่มีอยู่

ธง jp

ขอให้เป็นวันที่ดี,

ฉันมีสถานการณ์ต่อไปนี้: 4 TCP สตรีมข้อมูลจากเครื่องหนึ่งไปยังอีกเครื่องหนึ่ง แต่ละสตรีมมีพอร์ต TCP ปลายทางของตัวเอง 4 สตรีมมีลำดับความสำคัญต่างกัน: สูง กลาง ต่ำ เป็นกลุ่ม สูง กลาง ต่ำสร้าง 1.67Mbit/s และจำนวนมากสร้าง 10Mbit/s (iperf3 ใช้เพื่อสร้างทราฟฟิก) แพ็กเก็ตของแต่ละสตรีมถูกทำเครื่องหมายด้วยเครื่องหมาย DiffServ (DSCP) ที่เหมาะสม และเครื่องหมายนี้ใช้สำหรับจำแนกประเภทของการรับส่งข้อมูลใน HTB qdisc

เป้าหมาย: ควรกำหนดค่า HTB qdisc ในลักษณะที่เมื่อใดก็ตามที่สตรีม prio สูงได้รับ 1.67Mbit/s ที่จำเป็น พรีโอปานกลางยังรับประกัน 1.67Mbit/s แต่ด้วย prio ที่ต่ำกว่าเล็กน้อย และทราฟฟิกที่เหลือควรรับประกัน 50kbit/ ส. แต่ละสตรีมต้องสามารถใช้ลิงก์ทั้งหมดได้หากไม่ได้ใช้งาน และสตรีมสร้างแบนด์วิธมากกว่าที่กำหนดไว้ในตอนแรก

การสร้างทราฟฟิก:

ลำดับความสำคัญสูง:
iperf3 -c 192.168.88.254 -p 5150 -t 62 -b 1.67M -l 128 -S 224 
ลำดับความสำคัญปานกลาง:
iperf3 -c 192.168.88.254 -p 5160 -t 62 -b 1.67M -l 4K -S 160 
ลำดับความสำคัญต่ำ:
iperf3 -c 192.168.88.254 -p 5170 -t 62 -b 1.67M -l 4K -S 96 
จำนวนมาก:
iperf3 -c 192.168.88.254 -p 5180 -t 62 -b 10M -l 4K -S 0 

การกำหนดค่า HTB qdisc

NI = "เอท 2"
AC="sudo /sbin/tc คลาสเพิ่ม dev "

# ลบ qdiscs ก่อนหน้า
sudo /sbin/tc qdisc del dev $NI รูท

# เพิ่ม HTB เป็นรูทด้วยคลาสเริ่มต้น 40 สำหรับการเข้าชมที่ไม่มีหมวดหมู่
sudo /sbin/tc qdisc เพิ่ม dev $NI root handle 1: htb default 40
คลาส sudo /sbin/tc เพิ่ม dev $NI parent 1: classid 1:1 อัตรา htb 3.5mbit ceil 1,000mbit

# สตรีมที่มีลำดับความสำคัญสูง DSCP 224 - 1110 0000 - 0xE0
$AC $NI parent 1:1 classid 1:10 อัตรา htb 1.7mbit ceil 1,000mbit prio 1
# สตรีมที่มีลำดับความสำคัญปานกลาง 
$AC $NI parent 1:1 classid 1:20 อัตรา htb 1.7mbit ceil 1,000mbit prio 2
# สตรีมลำดับความสำคัญต่ำ
$AC $NI ผู้ปกครอง 1:1 classid 1:30 อัตรา htb 50kbit ceil 1,000mbit prio 3
#สตรีมจำนวนมาก
$AC $NI พาเรนต์ 1:1 classid 1:40 อัตรา htb 50kbit ceil 1,000mbit prio 4 

# เพิ่มตัวกรองเพื่อจำแนกแพ็คเก็ตตามเครื่องหมาย dscp

# ลำดับความสำคัญสูง DSCP 224 - 1110 0000 - 0xE0
ตัวกรอง sudo /sbin/tc เพิ่มโปรโตคอล dev $NI ip parent 1: prio 1 u32 จับคู่ ip tos 0xE0 0xff flowid 1:10
# ลำดับความสำคัญปานกลาง DSCP 160 - 1010 0000 - 0xA0
ตัวกรอง sudo /sbin/tc เพิ่มโปรโตคอล dev $NI ip parent 1: prio 2 u32 จับคู่ ip tos 0xA0 0xff flowid 1:20
# ลำดับความสำคัญต่ำ DSCP 96 - 1100 0000 - 0x60
ตัวกรอง sudo /sbin/tc เพิ่มโปรโตคอล dev $NI ip parent 1: prio 3 u32 จับคู่ ip tos 0x60 0xff flowid 1:30
# DSCP จำนวนมาก 0 - 0000 0000 - 0x00
ตัวกรอง sudo /sbin/tc เพิ่มโปรโตคอล dev $NI ip parent 1: prio 4 u32 จับคู่ ip tos 0x00 0xff flowid 1:40

จำแนกการจราจรได้อย่างถูกต้อง ฉันสามารถเห็นตัวนับที่เกี่ยวข้องในสถิติคลาส tc ที่เพิ่มขึ้น ฉันตรวจสอบซ้ำหลายครั้ง

ปัญหา: การกำหนดค่านี้จัดสรรแบนด์วิธให้กับสตรีมพรีโอสูงและปานกลางได้อย่างถูกต้อง prio ต่ำและจำนวนมากยังได้รับ 50kbit อย่างไรก็ตาม, ฉันไม่สามารถผลักดันผ่านลิงค์มากกว่าค่าที่ระบุในรูท คลาส 1:1 เช่น ประเมิน เช่น 3.5mbit

ในทุกบทความและคู่มือเกี่ยวกับ HTB ที่ฉันอ่านมีการระบุไว้ว่า พารามิเตอร์ "rate" คืออัตรารับประกันขั้นต่ำสำหรับคลาส และ "ceil" คือจำนวนสูงสุดที่รับได้ ในกรณีของฉันดูเหมือนว่า "อัตรา" จะจำกัดลิงก์ตามค่าที่ระบุ นี่ไม่ใช่พฤติกรรมที่ต้องการและคาดหวังอย่างแน่นอน

หากฉันตั้งค่าพารามิเตอร์ "อัตรา" ของคลาสรูทเป็นค่าเดียวกับ "ceil" เช่น 1,000mbit จะไม่มีการจัดลำดับความสำคัญและแบนด์วิธที่มีอยู่จะถูกแบ่งเท่าๆ กันระหว่างโฟลว์ทั้งหมด นี่ไม่ใช่ลักษณะการทำงานที่ต้องการ เนื่องจากในกรณีที่มีความผันผวนของแบนด์วิธที่มีอยู่ การรับส่งข้อมูลก่อนหน้าจะได้รับน้อยกว่า 1.67Mbit/s

ฉันเข้าใจความหมายของพารามิเตอร์ "อัตรา" ในคลาสรูทผิดหรือไม่ ปัญหานี้เกี่ยวข้องกับพารามิเตอร์ HTB เช่น "ควอนตัม" หรือไม่ ฉันยังสังเกตเห็นว่าทุกคลาสมีจำนวนโทเค็นติดลบระหว่างการส่งข้อมูล มันไม่ดีเหรอ? ถ้าเป็นเช่นนั้น ฉันควรปรับพารามิเตอร์ใดและอย่างไร

ขอบคุณล่วงหน้า!

Score:0
ธง us

พารามิเตอร์ ceil ไม่มีผลในคลาสรูท คุณควรตั้งค่าอัตราเดียวเท่านั้น

หากเป้าหมายของคุณคือทำให้ส่วนเพดานของระดับคลาสย่อยเป็นเพดาน คุณสามารถใช้ hfsc แทน HTB ได้ แต่จะไม่ขัดขวางไม่ให้ขออัตราสูงสุดแม้ว่าคุณจะมีแบนด์วิดท์ไม่เพียงพอ

หากเป้าหมายของคุณคือการจัดการกับการเชื่อมต่ออินเทอร์เน็ตที่ผันผวน วิธีนี้จะไม่ได้ผลเนื่องจากคุณกำลังจำกัดส่วนที่อัปโหลด และส่วนที่ดาวน์โหลดจะยังไม่ได้รับการจัดลำดับความสำคัญ คุณสามารถค้นหา ifb เพื่อจำกัดแบนด์วิธการดาวน์โหลด

ไม่ว่าในกรณีใด tc จะไม่สามารถตรวจจับแบนด์วิธที่มีอยู่จริงของคุณได้ อย่าลืมใช้ fq_codel เพื่อการจัดการคิวที่ดีขึ้น bbr สำหรับ TCP และเคอร์เนล Linux ล่าสุด ดังนั้นคุณจึงจำกัดผลกระทบจากการขอแบนด์วิดท์เพิ่มเติมที่คุณมี

jp flag
ขอบคุณสำหรับคำแนะนำเกี่ยวกับ HFSC และ BBR! การชี้แจงในประโยคแรก: ดังนั้นสำหรับคลาสรูท พารามิเตอร์ "rate" จะมีบทบาทเป็น "ceil" โดยการจำกัดแบนด์วิธที่มีอยู่สำหรับ qdisc?
setenforce 1 avatar
us flag
ใช่ ในคลาสรูท จะใช้ค่าอัตราสำหรับอัตราและเพดาน

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา