在VLAN中注入虚拟机之间的延迟

我们想模拟在公有云上使用虚拟机的本地化的影响(比如AWS EC2)。

为此,我们希望在数据包中注入延迟,以便我们可以模拟特定的networking拓扑。

假设有三个虚拟机:A,B,C

| A | <- 5 μs delay -> B | <---- 25 μs delay ----> C 

我们怎样才能最轻松地为A和B之间的连接注入5μs的延迟(或任意值),而A和C之间的延迟为25μs? 任何解决scheme赞赏(每个虚拟机上的Linux内核级别更改/创build覆盖networking/ …)。

创build延迟可以通过Linux内核支持的stream量整形algorithm来模拟。 从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的stream量中产生±10ms的随机变化,产生200ms的延迟。