Kernel Bypass & Offload 介绍
系统网络优化可以有两方面的工作可以做:1 绕开内核(bypass);2 用硬件替代软件(offload)。
具体包括:
1. 绕开内核:
- 不使用内核内核子系统的功能,采用自己实现的相同功能的代码来处理。
- 从用户空间直接访问和控制设备内存—避免数据从设备拷贝到内核,再从内核拷贝到用户空间。
2. 用硬件替代:
- 用专用的硬件设备替代软件的部分功能。
- 典型的用硬件替代软件的例子有:DMA engines, GPUs, Rendering screens, cryptography, TOE(TCP Offload Engines).
为什么要做两方面的工作呢?主要原因可以归结为:
1. UNIX经过设计和优化,目前它的主要任务是支持多个进程同时运行,并且避免任何进程因为缺少资源而长时间挂起。 但是在高频交易领域,我们希望某些特定的进程处理每条消息的响应时间快,延迟波动小,而不需要所在机器上所有进程的平均性能很好。
2. TCP/IP协议栈被优化为防止链接丢失和有效的利用带宽。
目前已经有很多成熟的解决方案可以用了,他们是:
- ntop.org DNA
- netmap
- Intel DPDK
- Myricom Sniffer10G and DBL
- 6WINDGate
- SolarFlare OpenOnload
- Napatech
这些解决方案每个都有他们自己的解决思路。
- 定制设备驱动。.netmap和DNA在标准Intel驱动的基础上加入了I/O内存到用户空间的映射。
- 定制硬件。Myricom和Napatech有他们自己定制的硬件以及对应的驱动(Myricom用的是ASIC, Napatech用的是FPGA)。
- 用户空间的库。这些解决方案每个都提供了用于访问他们扩展功能的库。这些功能差异极大:以太网I/O、libpcap的兼容、多进程处理的硬件辅助的消息包分发、缓存管理、整个TCP/IP层的功能。
- Licensing。netmap是开源的,DNA用户库需要适度的license。Napatech需要NDA,而且还要依赖昂贵的硬件。
参考文章:
http://ttthebear.blogspot.com/2008/07/linux-kernel-bypass-and-performance.html
<Kernel in the Way Bypass and Offload Technologies> -- Christoph Lameter
http://lukego.github.io/blog/2013/01/04/kernel-bypass-networking/