我们想使用公共云(比如 AWS EC2)中的虚拟机来模拟本地性的影响。
为了实现这一点,我们希望在数据包中注入延迟,以便我们可以模拟特定的网络拓扑。
假设有三台虚拟机:A、B、C
|
A | <- 5 μs delay -> B
| <---- 25 μs delay ----> C
我们如何才能最轻松地为 A 和 B 之间的连接注入 5 μs 延迟(或任意值),而为 A 和 C 之间的连接注入 25 μs 延迟?任何解决方案都值得赞赏(每个虚拟机上的 Linux 内核级别更改/创建覆盖网络/...)。
答案1
可以通过 Linux 内核支持的流量整形算法来模拟创建延迟。从netem
手动的:
# tc qdisc add dev eth0 root handle 1: prio
# tc qdisc add dev eth0 parent 1:3 handle 30: tbf rate 20kbit buffer 1600 limit 3000
# tc qdisc add dev eth0 parent 30:1 handle 31: netem delay 200ms 10ms distribution normal
# tc filter add dev eth0 protocol ip parent 1:0 prio 3 u32 match ip dst <IP_of_server_B>/32 flowid 1:3
当在服务器 A 上发出该命令时,会导致到服务器 B 的流量出现 200ms 的延迟和 ± 10ms 的随机变化。