论文部分内容阅读
随着互联网技术的不断发展,数据中心网络和企业网络的规模发生了快速的增长,数据中心的服务器的数量可能是数万台甚至数十万台。巨大而又复杂的数据中心网络将会使得路由表的规模变的很大。SDN技术的快速发展,OpenFlow流表中的匹配域越来越越多,不同匹配域之间的组合使得OpenFlow流表的流表项发生爆炸式的增长。另一方面网络速率的迅速增加,单位时间到达交换设备的数据包变多,数据包必须被及时的处理和转发。面对如此之大的表项数目,如果使用TCAM来存储,存储成本会大大的增加,而且功耗也比较大,实现查表算法也不够灵活。如果使用软件查表又会面临linux系统处理数据包的开销问题,这些开销包括中断处理、上下文切换、数据拷贝等,这会严重影响快速处理数据包的能力。而本文设计了一种软硬结合的数据包查找方案,此方案将占用内存较大的查表部分由软件实现,降低了成本。且硬件只传送用于查表的数据包包头给软件,可以减少软硬件之间的PCIe的宽带利用率。本文的主要工作包括三个部分:1.基于DPDK的数据包转发实现。在DPDK中实现数据包查找的优势在于我们可以利用它的用户空间轮询模式驱动、大页内存、CPU affinity等特性来提升数据包的处理速度。2.Cuckoo hash表的实现。Cuckoo hash表具有内存利用率高,O(1)的查找时间优点,本文通过对比和分析基于细粒度锁实现的Cuckoo hash算法和基于计数器实现的Cuckoo hash算法,最终采用了基于计数器的Cuckoo hash算法,并针对这个算法进行了两个优化:1)通过添加tag字段来加速哈希桶的匹配速度。2)移位路径搜索方式的优化提升了插入性能,减少了插入对读的影响。3.为了解决单流表过度膨胀,OpenFlow采用了多级流表。这里我们利用OpenFlow多级流表的思想,采用多个逻辑表,每个逻辑表负责不同的匹配域,再将不同的逻辑表分配到不同的逻辑核,不同的逻辑核负责不同匹配域的匹配,在数据包流过来的时候,形成流水线查找。并对多级查找进行了两个优化来提升查找性能。最后我们对表的内存利用率、单级查找性能、插入性能、多级查找性能等进行了相关测试和对比,并对结果进行了分析。