2021年06月19日

高性能技术整理(DPDK、SPDK、RDMA等)

可提高性能的方式有:

  • 减少数据拷贝;
  • 使用缓存;
  • 提高查表效率(减少总条目(如大页)、哈希、排序、数组、索引等等);
  • 硬件 offload(把某些事交给硬件去做);
  • “资源池”的使用(实际上是优化资源的分配环节);
  • 减少没必要的等待(物尽其用);
  • 采取高效的逻辑、算法。

等。

DPDK

1. 绕过内核(Kernel bypass)

  • 少了内核处理环节,便于减少数据的拷贝;
  • 可使用更轻量级的协议栈。

2. 轮询收包,而不是中断
中断会强行打断 cpu 当前正在执行的任务。任务被中断然后再恢复,可能会导致重新加载 CPU 缓存,从而影响效率。另外轮询可以每次批量处理多个包,但中断可能每个包都会触发难以优化收包次数。

3. 大页
使用大页可以提高 TLB 的查询效率,也就提高了地址翻译的效率。

4. “零拷贝”理念
在许多数据处理环节可以使用同一段 buffer,从而减少了数据拷贝。

5. dpdk ring
“无锁”队列。实际上是尽量减少资源独占的时间,减少没必要的等待。

SPDK

1. 运用了 DPDK 的技术和理念;
2. 抽象了存储单位;
3. 底层对接了各种存储方式;
4. 基于抽象出来的存储块,提供各种上层服务。

RDMA

1. 将可靠数据传输的协议栈交由网卡处理(硬件 offload)

2. 减少数据拷贝
与用户程序共用内存,减少数据拷贝。