Linux TC类/过滤器编号


12

我目前正在为ISP级公司开发一种流量整形解决方案,但遇到了一个有趣的(有点哲学上的)问题。

寻找系统应该处理的端点数量(大约2万个),我有点担心当我需要对更多用户的流量进行策略/调整时会发生什么。由于我目前在整个网络中使用HFSC整形树(请参阅tc-hfsc,与众所周知的HTB大多相同,但较冷的东西),因此,我需要使用更多的ClassID(显然,对于每个用户,至少要使用一个ClassID)网络)。我发现的问题是TC ClassID是有限的-它们是16位数字,这使我最大可能受此解决方案影响的64k用户。

同样,如果我想有效地管理TC过滤器(例如,不使用“全部刷新”),则需要能够删除或修改单个过滤器条目。(我正在使用类似于LARTC [1]中的哈希表的东西)。同样,似乎唯一适用的方法是使用单独的优先级对所有过滤器进行编号(tc filter add dev ... prio 1)。没有其他参数可用于此目的,遗憾的是,prio也是仅16位的。

我的问题是:是否存在某种扩大可用“标识符空间”的好方法,例如用于“ tc类”命令的32位clsid和用于“ tc过滤器”的32位优先级(或任何其他修改句柄)命令?

非常感谢,

-mk

(顺便说一句,我希望这不会出现在“ 64k用户应该对每个人都足够”的情况下...)


所有这些值都存储在内核空间中,要使其更大,您需要重新编译内核和用户空间实用程序。您是否尝试过使用64位内核?它们在那里可能被定义为32bit。
休伯特·卡里奥

64位内核使用相同的大小。例如,过滤器编号是u32整数,它由上层(协议)和下层部分(prio)组成,显然都是16位。类ID硬编码为u16。可能会尝试在LKML上询问某人。
exa

1
即使使用哈希作为过滤器,如果使用那么多的过滤器,您也会遇到很多IO问题(我猜上游和下游)。我花了很多时间,不得不在内核中修补队列实现,以使ksoftirqd可以正常工作。我使用了一个四年前在LARTC遇到的名为Simon Lodal的人的补丁。看一下他的补丁程序mail-archive.com/lartc@mailman.ds9a.nl/msg16279.html。您可以尝试向他发送电子邮件,因为他总是有一个非常更新的版本(针对最后一个内核)。
Pabluez 2011年

@Pabluez非常感谢,我将尽最大努力。
exa

1
我认为您的要求是有效的,但正如Pabluez所写,这肯定涉及很多内核更改。我不想说“您做错了”,但我鼓励您检查一下openflow,其中数据包处理的下半部分是在交换机级别完成的,而监管是在定制软件中完成的,大概是在用户空间中运行。我不知道它是否符合您的要求,但是值得进行调查。
AndreasM 2012年

Answers:


2

我认为您不应将具有上游和下游类以及每个过滤器的64k用户放在同一接口上。您可以为每个接口重复处理程序,因此添加更多接口。您将需要一个令人难以置信的工作/服务器/ NIC来拥有这些东西。如果服务器崩溃,您将有64k用户处于脱机状态(如果流量如此之大,它将很容易崩溃)。不要忘记,通过您的网卡的EACH数据包将由过滤器进行检查和分类,然后发送到要排队的类。对于拥有64k客户的ISP网关的NIC,这是很多工作。主要是我们目前拥有的所有视频流(很难正确排队)。


我在其他方面确保服务的可用性,但感谢您的关注。实际上,有了良好的NIC,拥有可以转发10Gbits的Linux路由器并不难。
exa

对于原始问题,我对诸如为每个用户添加5个不同的类这样的东西更感兴趣,这将使我能够做得非常出色的QOS工作(例如分别处理流和实时流量),但是在当前条件下(我认为目前约有2万个端点的用例,我已经超出了限制)。
exa

1
好的,转发10Gbits没问题,问题是有很多64k * 2(ups downs)过滤器和类。祝您好运:D
Pabluez 2012年

0

您可以将流量处理分为两台计算机(使用第三台计算机),而不是在一台计算机上处​​理所有流量。可以简单地根据源IP地址路由流量。因此,如果您可以平均划分IP范围,则将有10,000个最佳用户。

当然,如果需要,您可以使用两台以上的计算机。我认为这可能比修补Linux内核并进行其他一些黑客攻击要好。简而言之,流量整形将分布在多台计算机上。中央节点将只是将流量转发到正确的处理节点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.