จำกัด แบนด์วิดท์ขาเข้าและขาออกและเวลาแฝงใน linux


15

ฉันรู้ว่ามีคำถามที่คล้ายกันจำนวนมากถูกถามไปแล้ว แต่จนถึงตอนนี้ฉันยังไม่พบวิธีแก้ปัญหาของฉัน

ฉันมีเซิร์ฟเวอร์ลินุกซ์เสมือน (เรียกใช้ Debian Squeeze) ที่ฉันใช้สำหรับการทดสอบความเร็วของเว็บไซต์เพื่อวัดการเพิ่มและลดความเร็วในการโหลดของเว็บไซต์ดังกล่าว ฉันพยายาม จำกัด แบนด์วิดท์และเวลาแฝงของเซิร์ฟเวอร์นี้เพื่อให้สามารถใกล้เคียงกับเวลาในการโหลดในโลกแห่งความเป็นจริงบนเว็บไซต์ แต่ล้มเหลวมาก

สิ่งที่ฉันต้องการเป็นพิเศษคือ:

  • เพื่อตั้งค่าเวลาแฝงเข้าและออกจาก 50 ms
  • ในการตั้งค่าขีด จำกัด แบนด์วิดท์ที่เข้ามาของ 512 kbps
  • หากต้องการตั้งค่าขีด จำกัด แบนด์วิดท์ขาออก 4096 kbps

ฉันอ่าน netem มาแล้วและใช้tcคำสั่ง แต่ก็ยังอยู่เหนือหัวฉันเล็กน้อย ฉันได้รวบรวมคำสั่งนี้เพื่อควบคุมเวลาในการตอบสนองซึ่งดูเหมือนว่าจะใช้งานได้ แต่ฉันไม่แน่ใจว่ามันจะจัดการกับเวลาแฝงที่ส่งออกหรือทั้งสองอย่าง:

tc qdisc add dev eth0 root netem delay 50ms

ผู้เชี่ยวชาญด้านเครือข่ายใดบ้างที่สามารถช่วยเหลือฉันได้

แก้ไข:

หลังจากการวิจัยเพิ่มเติมฉันได้ครึ่งสู่เป้าหมายของฉันโดยใช้คำสั่งนี้ปริมาณการใช้ข้อมูลขาออกทั้งหมดทำงานตามที่ฉันต้องการ:

tc qdisc add dev eth0 root tbf rate 4.0mbit latency 50ms burst 50kb mtu 10000

อย่างไรก็ตามฉันยังไม่สามารถเค้นอัตราการเข้าชมอย่างถูกต้องได้ ฉันได้เรียนรู้ว่าฉันควรจะใช้ "Ingress Policer filter" ฉันพยายามทำอย่างนั้นกับคำสั่งด้านล่างเล่นด้วยค่าต่าง ๆ แต่ไม่มีโชค

tc qdisc add dev eth0 ingress
tc filter add dev eth0 parent ffff: protocol ip u32 match ip src 0.0.0.0/0 flowid :1 police rate 1.0mbit mtu 10000 burst 10k drop

แบนด์วิดท์จะได้รับผลกระทบจากคำสั่งแม้ว่าค่าข้างต้นจะทำให้ความเร็วเริ่มต้นที่ 2MB / s และในขณะที่การถ่ายโอนดำเนินไปอย่างช้าๆลดลงไปที่ประมาณ 80-90kB / s ซึ่งมาถึงหลังจากถ่ายโอนประมาณ 30 วินาที

มีความคิดเห็นเกี่ยวกับสิ่งที่ฉันทำผิดหรือเปล่า?


netem delay 50msไม่ได้ จำกัด เวลาในการตอบสนอง มันเพิ่มเวลาแฝงโดย50msเปรียบเทียบกับสิ่งที่มันเคยเป็น
kasperd

แน่นอนว่าคุณพูดถูก ลบขีด จำกัด คำเนื่องจากเป็นการเพิ่มขึ้น 50ms ที่ฉันกำลังมองหา (เนื่องจากเป็นเครื่องเสมือนจริงในคอมพิวเตอร์เครื่องเดียวกันเวลาแฝงดั้งเดิมอยู่ใกล้กับ 0 ต่อไป)
yzfr1

คำตอบ:


12

ในที่สุดฉันก็ตัดสินด้วยการตั้งค่าแบนด์วิดท์ / เวลาแฝงที่ส่งออกบนเซิร์ฟเวอร์จากนั้นทำเช่นเดียวกันกับไคลเอนต์เพื่อให้ได้ผลลัพธ์เดียวกัน

นี่คือคำสั่งที่ฉันรันบนเซิร์ฟเวอร์และไคลเอนต์ตามลำดับเพื่อให้บรรลุเป้าหมายของฉัน:

เซิร์ฟเวอร์: 4 Mbit 50 ms

tc qdisc add dev eth0 handle 1: root htb default 11
tc class add dev eth0 parent 1: classid 1:1 htb rate 1000Mbps
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 4Mbit
tc qdisc add dev eth0 parent 1:11 handle 10: netem delay 50ms

ลูกค้า: 512 kbit 50 ms

tc qdisc add dev vmnet1 handle 1: root htb default 11
tc class add dev vmnet1 parent 1: classid 1:1 htb rate 1000Mbps
tc class add dev vmnet1 parent 1:1 classid 1:11 htb rate 512kbit
tc qdisc add dev vmnet1 parent 1:11 handle 10: netem delay 50ms

ฉันค้นหาสิ่งนี้มาหลายเดือนแล้ว ขอบคุณ หนึ่งคำถาม? คุณจะลบกฎได้อย่างไร ราก tc class del dev eth0 แสดงคำตอบ RTNETLINK: ไม่มีไฟล์หรือไดเรกทอรี
Nur

ไม่กี่เดือนที่ผ่านมา แต่ฉันจำได้ว่ามันเพียงพอที่จะลบ qdisc: tc qdisc del dev eth0 root
yzfr1

2

ประมาณ 80-90 kByte / s กำลังจะเกิดขึ้น

    tc filter add ... police rate 1.0mbit ...

คุณขอให้โยนข้อมูลขาเข้าออกเมื่อมันมาถึง 1 mBit / s นั่นคือประมาณ 125 kByte / s รีโมตเซิร์ฟเวอร์จะปล่อยให้ต่ำกว่านั้นมาก (อาจครึ่งหนึ่งไม่แน่ใจ) หลังจากนั้นแพ็กเก็ตทั้งหมดจะผ่านเข้ามาดังนั้นรีโมตปลายทางจะรับความเร็วอย่างช้า ๆ จนกว่าจะถึง 125 kByte / s คุณได้รับปริมาณงานเฉลี่ยต่ำกว่า 125 kByte / s ซึ่งเป็นเรื่องปกติของการปรับรูปร่าง

ฉันประหลาดใจเล็กน้อยที่ความเร็วควรถึง 2 MByte / s พร้อมตัวกรองนโยบายการเข้า คุณวัดจากที่ไหน - ที่ดาวน์สตรีมไคลเอ็นต์ (โปรแกรม) หรือที่เร้าท์เตอร์บางตัว? หรือบางทีคุณอาจเริ่มการเชื่อมต่อและหลังจากนั้นคุณก็เริ่มทำการกรองนโยบายเข้า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.