On Linux rate limiting and the magic value of 34.64 Gbps...
From: Maciej Żenczykowski <hidden>
Date: 2011-03-25 07:14:26
Hey, The Linux rate limiting code relies on the rate field of struct tc_ratespec. This field is a __u32 and measures rate in "bytes per second". This basically means maximum representable rate is 4GB per second. This is equivalent to 34.36 Gbps and I just ran across that limit with 40 Gbps (which behaves like 5.64 Gbps because of overflow/truncation). Seeing as this structure is exposed to userspace for both read and write via various netlink paths (in cbq, htb, tbf, etc...) there doesn't seem to be a particularly clean way to increase the size of this field. While there is a __reserved field that could theoretically be repurposed as some sort of rate bit shift register, I don't think we can rely on __reserved having been set to zero by userspace (by older programs), and we will definitely see problems with output by programs (tc) that don't expect to have to parse this field to output an understandable rate limit... Anybody have any bright ideas? Thanks, Maciej