Jitter emulation

DUMMYNET(ipfw)関連のお話.


現在,研究でDUMMYNETを使っているのですが,それに関連して遅延に揺らぎ(ジッター)を入れたいということになりました.しかし,調べた限りipfwでは,遅延は固定値でしか設定できないようでして.


それで,もう少し調べてみるとdummynetのページに載っている方法で何とかいけそうな雰囲気が.

One nice feature of the new version of dummynet is the ability to simulate multiple paths between sender and receiver. This is done using probabilistic match, e.g.:
ipfw add prob 0.33 pipe 1 ip from A to B
ipfw add prob 0.5 pipe 2 ip from A to B
ipfw add pipe 3 ip from A to B
ipfw pipe 1 config ...
ipfw pipe 2 config ...
ipfw pipe 3 config ...


Given the right packet, the first rule will match with probability 1/3; in the remaining 2/3 of occurrence we move to the second rule, which will match with prob 1/2 (so overall 1/2*1/3 = 1/3), and the remaining 1/3 of occurrence will move to the third rule, which has a deterministic match. We can then configure the three pipes as desired to emulate phenomena such as packet reordering etc.

どうやら,ipfwでは,複数のpipeを作成して,確率でひとつのpipeを使うという制御ができるようです.これを使えば,例えば

# ipfw add prob 0.33 pipe 1 ip from any to any
# ipfw add prob 0.5  pipe 2 ip from any to any
# ipfw add           pipe 3 ip from any to any

# ipfw pipe 1 config delay 10ms
# ipfw pipe 2 config delay 15ms
# ipfw pipe 3 config delay  5ms

といった感じで設定すれば,5〜15msと遅延の揺らぎを作ることができそうです(実際には,pipeをもっと増やして,もう少し細かい粒度で設定した方が良さそうです).