原创翻译,转载请注明出处。算法
下面是一个支持Qos的复杂报文处理流水线的图;
流水线是经过DPDP可重用的软件库构建出来的。在流水线里实现QoS主要是以下模块:policer,dropper,shceduler。下面是这些模块的功能性描述。缓存
# | 模块 | 功能描述 |
1 | Packet I/O Rx&Tx | 从网卡端口接收/发送报文,Intel 1/10GbE轮询模式(PMD) |
2 | Packet parser | 肯定报文的协议栈,检查报文头的完整性 |
3 | Flow classification | 映射输入报文到一个已知的流,使用hash函数(jhash,CRC等)精确匹配表查找和用桶处理冲突。 |
4 | Policer | 报文统计,使用srTCM(RFC2697)或者trTCM(RFC2698) |
5 | LoadBalancer | 分发报文给每一个工做者,并使得每一个工做者负载均衡。保持对每一个工做者的传输流的亲和性与报文在流的顺序。 |
6 | Worker threads | 特定上层应用程序工做量的代称(好比IP协议栈) |
7 | Dropper | 使用随机丢弃或者带权随机丢弃算法来拥塞管理。丢包是基于当前调度器队列负载级别和报文优先级,若是拥塞,首先丢弃低优先级报文 |
8 | Hierarchical Scheduler | 5级分层调度(级别是:出端口,子端口,流水线,流分类和队列),有成千上万(典型是64K)的叶子节点(队列)。在子端口和流水线实现了流量整形,在流分类实现严格优先级,在每一个流水线的流分类的队列里实现WRR(加权循环)。 |
下面列出的基础模块始终在整个报文处理流水线中使用负载均衡
# | 模块 | 功能描述 |
1 | Buffer manager | 支持全局缓冲区池和每一个线程的私有的缓存 |
2 | Queue manager | 支持在流水线之间传递消息 |
3 | Power saving | 支持在低利用率期间节能 |
在每一个特定应用程序须要的性能级别上,流水线块到CPU核的映射是可配置的,而且这些特性对每个流水线块都是开启的。当其余的块可能映射到同一个CPU核时,有些流水线块可能会消耗多个CPU核(即每一个CPU核运行不一样的块实例来处理不一样的收包)。函数