Kas*_*sth 4 networking linux traffic-shaping tc iproute2
我处于必须模拟 P2P 环境的情况(对于我的计算机科学硕士论文)。为此,我将 Docker 与 Ubuntu 一起使用来创建一堆虚拟机,这些虚拟机将连接到 BitTorrent 网络中。然后我需要确保可以设置对等点的上传和下载速率,这不是我在客户端中执行的选项(因为客户端使用睡眠来模拟较低的带宽,这会导致峰值速度)。
因此,我正在尝试为每个容器执行此操作。老实说,只要它有效,我真的不在乎这是如何完成的,但是我尝试了不同的事情但没有运气。这些是我迄今为止尝试过的事情:
我曾尝试遵循大量指南和示例,但每一个都没有奏效或如上所述。我在这里有点不知所措,所以如果有人知道上述示例应该工作的任何原因或有其他解决方案,那就太棒了。
我正在寻找的是一种限制单个 Linux 实例的方法,然后我应该能够使其适用于多个 Docker 容器。
- - - - - - - - 编辑 - - - - - - - -
我尝试了几个不同的 tc 命令,但其中一个是这样的
DEV=eth0
tc qdisc del dev $DEV root
tc qdisc add dev $DEV root handle 1: cbq avpkt 1000 bandwidth 100mbit
tc class add dev $DEV parent 1: classid 1:1 cbq rate 256kbit allot 1500 prio 5 bounded isolated
tc filter add dev $DEV parent 1: protocol ip prio 16 u32 match ip src 0.0.0.0/0 flowid 1:1
tc qdisc add dev $DEV parent 1:1 sfq perturb 10
Run Code Online (Sandbox Code Playgroud)
无论我设置什么速率,它总是给我大约 12 KB/s 的下载(没有设置限制的默认下载大约是 4MB/s)
------------编辑 2(我最终做了什么)------------
事实证明,您无法可靠地为容器内的 Docker 容器设置带宽,但是每当您创建一个新容器时,都会在名为 vethsomething 的主机上创建一个虚拟接口。例如,如果您在这些虚拟接口上使用 Wondershaper,则限制具有正确的行为:)
使用 tc(因为它是最新的,而且我最熟悉它),您应该能够毫无问题地减慢流量。
我有一台充当防火墙的服务器(称为“防火墙”——非常有创意),然后在它后面有第二台服务器(称为“mil102”)。没有任何 tc 命令,将文件从 mil102 scp 到防火墙全速移动:
root@firewall:/data#scp mil102:/root/test.tgz test.tgz
test.tgz 100% 712MB 71.2MB/s 00:10
Run Code Online (Sandbox Code Playgroud)
将以下命令添加到 mil102(更容易塑造发送流量):
#!/bin/sh
DEV=eth0
tc qdisc del dev $DEV root
tc qdisc add dev $DEV handle 1: root htb default 11
tc class add dev $DEV parent 1: classid 1:1 htb rate 4Mbps
tc class add dev $DEV parent 1:1 classid 1:11 htb rate 4Mbit
tc qdisc add dev $DEV parent 1:11 handle 11: sfq perturb 10
Run Code Online (Sandbox Code Playgroud)
现在相同的命令减慢到 4Mb:
root@firewall:/data#scp mil102:/root/test.tgz test.tgz
test.tgz 0% 6064KB 467.0KB/s 25:48 ETA
Run Code Online (Sandbox Code Playgroud)
我停止了转移——这会花费太长时间。scp 中列出的速度以字节为单位,以 tc 为单位指定,因此 467KB * 9 = 4203Kb,接近我的 4096Kb 限制(以为是 *8,但我猜有一个奇偶校验位?)。
我尝试更改为 10Mbit,我的 scp 显示我正在以每秒 1.1MB (1.1 * 9 = 9.9) 的速度移动数据。
添加了带有“sfq perturb 10”指令的最后一行,以平衡加载连接上的流量。它根据循环哈希指示队列从每个对话中获取数据包。
您可以使用和不使用 ssh 进行测试,如果不使用 ssh 会突然出现,使用会更流畅(对于 VOIP 非常重要)。'perturb 10' 告诉它每 10 秒重新计算一次哈希算法以使其随机。
| 归档时间: |
|
| 查看次数: |
6024 次 |
| 最近记录: |