我目前正在为ISP级公司制定stream量调整解决scheme,并且出现了一个有趣的(仁慈的哲学)问题。
看看系统应该处理的端点数量(大概在20K左右),我有点担心当我需要策略/塑造更多用户的stream量时会发生什么。 因为我正在使用HFSC整形树(请参阅tc-hfsc,大多数情况下HTB更像冷却器),所以我需要使用更多的ClassID(显然每个用户至less有一个networking)。 我发现的问题是,TC ClassID是有限的 – 他们是16位数字,这给我一个可能的最大64k用户由此解决scheme塑造。
同样,如果我想要有效pipe理TCfilter(例如不使用“flush all technique”),我需要能够删除或修改单个filter条目。 (我正在使用类似于LARTC [1]中的哈希表)。 再一次,似乎正在处理这个唯一的方法是使用单独的优先级来编号所有的filter(tc filter add dev … prio 1)。 没有其他的参数可以用于这个目的,可惜的是,prio也是16位的。
我的问题是:是否存在一些扩大可用“标识符空间”的好方法,例如“tc class”命令的32位clsid,以及“tc filter”的32位优先级(或任何其他修改句柄)命令?
非常感谢,
-MK
(顺便说一句,我希望这不会去“64K用户应该是足够的每个人”场景…)
我认为你不应该把64k的用户与上游和下游的类和filter在每个人在同一接口。 您可以为每个接口重复处理程序,因此添加更多接口。 你将需要一个令人难以置信的工作/服务器/网卡有这个东西。 如果服务器崩溃,你将有64k的用户离线(这将很容易崩溃的stream量)。 不要忘记,通过网卡的每个数据包都将被filter检查和分类,并发送给class级进行排队。 对于64k客户的ISP网关的NIC来说,这是很多工作。 主要是现在我们所有的videostream(很难排队)。
您可以将stream量处理拆分为两台机器(使用第三台机器),而不是处理一台机器上的所有stream量。 stream量可以简单地根据源IP地址进行路由。 所以,如果你能平均分配IP范围,你将拥有最好的10k用户。
当然,如果需要,可以使用两台以上的机器。 我认为这可能比修补Linux内核和做一些其他的黑客更好。 总之,stream量整形将分布在多台机器上。 中央节点只会将stream量转发到正确的处理节点。