开源L4负载均衡器DPVS源码分析

本文探讨了如何通过DPDK技术实现高效的连接跟踪表设计,包括使用ThreadLocal和哈希表解决冲突,以及连接老化定时器和无锁通信设计。同时介绍了FullNAT的优势和DNAT的问题,以及资源分配对最大连接数的影响。

1. 连接跟踪表设计

  • 技术重点:DPDK ThreadLocal+哈希表+DPDK大页内存池
  • Conntrack表就是很简单的5元组哈希表,哈希冲突利用双向链表来解决;
  • 个人感觉为了开发方便可以直接用DPDK提供的rte_hash;
  • Conntrack表使用了DPDK Threadlocal,提供无锁的Conntrack信息访问,每个核维护一个Conntrack表;
    在这里插入图片描述
  • Conntrack表key是五元组,value是连接上下文的地址,指向存储在DPDK的rte_mempool中连接上下文。利用内存池能加快申请和释放内存,内存池每一个socket一个。
    在这里插入图片描述
    2. 连接老化设计
    • 准确来说是定时器设计,使用了很经典的时间轮算法,空间换时间,比经典的WebServer中的小根堆要快。它会占用很大的内存来存储每个时间点,但是DPDK本身就会使用大页占很多系统内存,这点真的不算什么,哈哈哈哈哈;
    • 轮子转动频率是1000HZ,就是1s会走1000次,就是每1ms走一下;
    • 只用了两级时间轮,大概是为了提高运行效率(空间换时间),然后每一级轮子有2^18个格子,能够允许的超时时长还是很大的;
    • 轮子使用rte_timer来驱动的,每1ms会驱动最低级的轮子走一格,这个也可以用rte_rdtsc()获取cpu cycles来驱动。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值