这篇文章是剑桥大学的Marinos发表在SIGCOMM 2014上的一篇关于网络协议栈优化的工作。
主要的argue就是指出,现有通用协议栈已经成为performance和scaling方面的主要瓶颈,是时候考虑做network stack specialization了。
1. Motivation
首先,数据中心和大规模应用的出现,一定程度上改变了传统的服务需求。从之前的一台机器负责完成多个功能(1 machine n functions)变成了多台机器完成一件事情(n machines 1 function)。
同时,数据中心中低延迟和高带宽的特点,使得endhost的软件协议栈的开销逐步的成为新的瓶颈。而这些部署在数据中心中的应用又是如此的在意performance。
在对performance的更高准求的驱动下,作者认为针对n machines 1 function的应用场景有必要优化现有的软件协议栈(作者成为general-purpose stacks)。
论文中的主要例子就是conventional stacks对于短流的性能不太好,同时又拿Yahoo! CDN的观测数据证明短流的普遍存在。
2. Problem and Goals
本文想要解决的一大问题就是:短流在数据中心里低带宽利用率和高CPU使用率的问题。
问题存在的主要原因就是:memory copy/move,context switch等。
因此文章的主要目标就是设计一个定制化的协议栈,它能够更完美的做到zero-copy,更高效的做到数据的传输和响应,更聪明的利用应用的特点。
具体例子就是文章提到的sandstorm,对具体实现感兴趣的可以看下论文或PPT。
3. Highlights
- 使用netmap,将应用层与NIC相关联,减少memory copy/move;
- 利用了体系结构方面的技术:DDIO(Direct Data I/O);
- 对于短流,有2-10x的性能提升,同时CPU使用率也较低,对比对象为Linux + Ngnix和FreeBSD + Nginx。
4. My Notes
sandstorm一定程度上是提前准备好的数据,并且放在了DRAM中,作者对比的时候好像并未评测这个因素。因为Nginx从disk发数据,而sandstorm是从DRAM发数据。
本文创新方面也有待商榷,主要贡献就是利用一个demo重新在学术界呼吁了一下network stack specialization的重要性和可行性。论文最后一个作者是真神,有兴趣的可以去看下他的Google scholar。