(转载自 微软亚洲研究院

作为计算机网络领域资历最老的顶级学术会议,ACM SIGCOMM自1977年起已经举办了37届。美国计算机学会(ACM)通信专业组(SIGCOMM)在其主页上无不自豪地将SIGCOMM称为其年度旗舰会议。40年来,从计算机网络教科书里的TCP拥塞控制协议到云数据中心里的软件定义网络(SDN)和网络功能虚拟化(NFV),SIGCOMM见证了众多计算机网络关键技术的诞生与发展。

SIGCOMM的论文以高质量著称,每年只录用40篇左右,录取率在15%左右。全世界的网络研究者都把在SIGCOMM上发表论文视为一种荣誉。每篇论文都经过严格的双盲评审,例如今年有三轮评审,第一轮从225篇选出99篇,第二轮选出66篇,第三轮选出60篇进入程序委员会(PC)讨论,在一天半的会议后决定最终被录用的39篇论文。每篇被录用的论文平均收到了8个评审意见,长达十几页。即使最终没有被录用,这些专家审稿人的意见对论文后续的改进也是很有帮助的。

SIGCOMM议程

今年是SIGCOMM会议第一次在南美洲举行,选择了奥运之国巴西。会议的开幕式恰好选在奥运会闭幕式的后一天,也就是8月22日。可惜,天有不测风云,寨卡疫情让与会者们很担心,会议地点从东北部的大城市萨尔瓦多迁到东南部的小岛Florianópolis。今年的SIGCOMM会议有五天,第一天和最后一天是workshop和tutorial,中间三天是single track的主会,每篇论文都做20分钟的口头报告和5分钟的提问。同样由于疫情的威胁,今年SIGCOMM破例允许远程演讲,即事先录好演讲视频现场播放,提问环节则通过Skype进行。21篇poster、18篇demo、12篇主会论文附带的poster和8个工业界demo分为三批,穿插在主会三天的茶歇时间展示。

SIGCOMM会场外的沙滩和大西洋

本届SIGCOMM会议录用的39篇论文中,微软参与其中的就有11篇。其中第一作者为微软研究院的3篇(ClickNP、ProjectToR、Via),第一作者为微软工程部门的2篇(Dynamic Pricing、RDMA),与高校合作的6篇(Domino、2DFQ、Control Plane Analysis、Don’t Mind the Gap、WebPerf、NetPoirot)。

与往届SIGCOMM一样,微软是网络学术界当之无愧的领导者。微软一方面发表论文分享来自微软研究院的“黑科技”(如ClickNP用FPGA实现网络功能)和数据中心运营经验(如RDMA大规模部署中的问题);另一方面与高校共享来自大规模网络服务的真实问题和数据,便于高校找到真正重要的问题,做出有影响力的工作。

谷歌、Facebook、思科等网络巨头今年也都有在SIGCOMM上发表论文。继承往年的传统,华为派出了十几名员工的强大阵容参加SIGCOMM大会。思科在会场设置了招聘材料分发点,Facebook也邀请一些论文作者参与沙龙活动。

SIGCOMM上的中国面孔

今年SIGCOMM主会有两篇论文来自中国大陆(微软亚洲研究院的ClickNP和中科院的CS2P),两篇论文来自中国香港(香港科技大学陈凯教授组的CODA和Karuna)。更为振奋的是,主会39个报告里有14个是华人所作(其中12个是第一作者,2个是第二作者),听起来倍感亲切。

中国大陆学术界在poster和demo上的表现也很优秀。21篇poster中,就有8篇来自中国大陆。清华大学有3篇:PieBridge、SLA-NFV和FAST;西安交大有3篇:SDN编译器、OpenFlow计数器和流表溢出问题;还有南京大学的Conan和国防科大的任务调度。18篇demo中,也有4篇来自中国大陆,包括清华的SDN源地址检查、北邮的EasyApp、国防科大的FPGA深度包检测和华为未来网络实验室的ADN (Application Driven Network)。

参加poster session的部分华人合影

Talk to professors!

来开会之前,我也犹豫不远万里冒着生命危险来开会是否值得。论文都可以在网上看到,为什么还要千里迢迢来开会呢?导师告诉我,开会是为了当面交流,认识朋友,寻求合作机会。在出发前和我结束自己论文的报告后,导师又反复叮嘱,要多跟教授交流,多认识朋友。

会议第一天的欢迎晚宴(Welcome Reception)没有座位,所有人在大厅里站着,吃着自助,跟周围的人聊着天。第二天的会议晚宴(Conference Banquet),前一半时间也是吃着生蚝,喝着酒,四处找人聊天,后一半时间才是坐下来吃饭。会议组织者之一,阿卜杜拉国王科技大学的Marco Canini教授跟我们说,在会议上最重要的事情是什么?Talk to professors!可惜我的英语口语不好,也不习惯老外的文化,大多数聊天还是在华人中进行的。尽管有时可以切换到中文模式或者觅食模式休息一会儿,一晚上给自己的论文做十几次elevator pitch也是蛮累的。

欢迎晚宴

每天的早餐是酒店提供的自助餐,热情的与会者们早饭的时间也在忙着四处搭讪,了解各自的研究方向,讨论学术问题。这时我才发现网络学术圈子里男女比例高得吓人,餐厅里经常只有一个妹子(服务员除外)。为了欢迎381位与会者里20位左右的女生,本届SIGCOMM还专门组织了一个N2Women晚宴。

每年SIGCOMM在会议晚宴之后,都会有一个笑话专场。今年讲笑话的是Marco Canini教授,“发布”了多个学术研究的应用。Instapaper,模仿Instagram的界面,paper上的图一定要好看;Snaptract,摘要就是论文,如果30秒内没有人对你的摘要感兴趣,这论文就消失了;Trustnami,研究者声誉和论文真正影响力的信任系统,每个引用可以是正面也可以是负面的,引用的权重是引用者的h-index;Menta,用网络领域大佬作为训练集的AI,可以告诉你一个想法是不是新的,生成相关工作列表,对实验结果给予评价,还能帮论文起好听的名字,避免名字撞车。

会议晚宴

第三天的学生晚宴是在距离会议地点30公里的市中心的Ataliba餐厅,终于吃到了心心念念的巴西烤肉!但我太没经验了,上来就吃了很多自助,烤肉吃到一半的时候肚子已经快要溢出了……说实话,跟国内的巴西烤肉没太大区别。

学生晚宴

SIGCOMM研究热点

接下来是学术时间,总结三个我在会议上看到的热点研究方向:高性能网络处理、流量调度和无线背向反射(backscatter)。

热点1:高性能网络处理

今年5月30日的全国科技创新大会上,紧接着习总书记的讲话,华为总裁任正非说,“随着逐步逼近香农定理、摩尔定律的极限,而对大流量、低时延的理论还未创造出来,华为已感到前途茫茫,找不到方向……重大创新是无人区的生存法则。”

今年的SIGCOMM大会上,就有多篇论文致力于实现大流量、低时延的网络功能。数据中心网络的需求日新月异,网络功能的可编程性因而越发重要。在网络处理的性能和可编程性之间找到平衡点成为了研究热点。

数据包处理的硬件体系结构大致分为三个方向:硬件加速器、网络处理器和通用处理器(如多核CPU、众核CPU、GPU)。本届SIGCOMM大会上比较火的硬件体系结构包括可编程交换机芯片、可重构硬件(FPGA)这两种硬件加速器,以及多核通用处理器(CPU)。在编程语言方面,P4则快要一统江湖了。

体系结构之一:可编程交换机芯片

网络领域大佬、斯坦福大学教授Nick McKeown创立的Barefoot Networks公司今年发布的可编程交换机芯片可提供每秒6.5 Tb的数据包处理速度,并获得了Google等公司1.3亿美元的投资。该可编程交换机芯片使用开源的P4语言编程,可以支持灵活的网络协议和转发规则。

Anirudh Sivaraman提出的可编程交换机芯片架构(图片来源:Domino slides)

今年SIGCOMM上麻省理工学院的Anirudh Sivaraman在网络领域新星Mohammad Alizadeh的指导下,在同一个session发了两篇相关论文,大概是创下了SIGCOMM的记录。第一篇是用C语言的一个子集(称为Domino)编写“数据包事务”来描述数据包处理的行为,编译到称为“原子”的指令集,该指令集实现在可编程交换机芯片内,每秒可处理10亿个数据包,每条原子指令的延迟在纳秒级以下。第二篇是在第一篇的基础上,提出了任意位置入队、顺序出队的通用队列(PIFO),在交换机芯片上实现了可编程的数据包调度器。

使用可编程交换机芯片的一个例子是约翰·霍普金斯大学Zaoxing Liu的UnivMon,提出了一种通用的概率数据结构(universal sketch)来监控网络流量,如统计流量大小分布、异常检测、入侵检测等,比基于采样的流量监控更加细粒度,可以使用P4语言实现在可编程交换机芯片中。

体系结构之二:FPGA

微软公司引领了FPGA在数据中心中应用的潮流。自2014年微软研究院在计算机体系结构领域顶级会议ISCA上发表FPGA加速必应搜索的论文后,微软、百度等互联网巨头相继把FPGA大规模部署在数据中心,加速深度学习、存储、网络等应用。Intel公司以167亿美元收购了FPGA行业巨头Altera公司,希望把FPGA整合进CPU,继续保持在数据中心等领域的优势。

微软采用FPGA加速网络功能(图片来源:ClickNP slides)

在2015年的SIGCOMM大会上,微软Azure网络部门总监Albert Greenberg获得SIGCOMM终身成就奖,并在获奖演讲上宣布了网卡与FPGA整合的SmartNIC(智能网卡)。有了SmartNIC,我们可以把各种网络虚拟化应用的数据平面和一部分控制平面卸载(offload)到FPGA中,从而大大减轻CPU的负担。今年SIGCOMM上我们的ClickNP就是基于这个SmartNIC平台开发的一套框架,使用类C的高级语言模块化编程FPGA,并使CPU和FPGA能够细粒度分工合作,使得软件开发者可以轻松实现大流量(100 Gbps或每秒2亿个数据包)、低时延(微秒级)的网络功能。

FPGA在网络领域的应用源远流长,十多年前就有斯坦福大学开发的NetFPGA平台,但FPGA硬件编程语言难写、难调,大多数软件开发者长期无法使用。ClickNP利用近年兴起的高层次综合(HLS)技术,使得软件开发者可以像在多核处理器上一样用高级语言编程FPGA。

ClickNP的编程模型(图片来源:ClickNP slides)

细心的读者也许注意到了,前面提到的麻省理工学院的论文也是把类C的高级语言编译到硬件。他们是编译到可编程交换机芯片的指令集,我们是编译到FPGA。前者性能更高,但编程上受到的限制更多,适合用在交换机上;后者能够实现更为复杂的网络功能,但FPGA时钟频率就不如专用芯片,FPGA适合在服务器上做防火墙、加密解密、负载均衡、流量调度等虚拟化网络功能的加速,同时还可用于加速机器学习等其他应用。

无独有偶,清华毕军教授实验室的SLA-NFV也是结合使用FPGA和CPU来实现网络功能虚拟化。与ClickNP的做法略有不同,ClickNP是考虑到FPGA的高吞吐量和低时延,把网络功能优先放在FPGA上,不适合FPGA的任务放在CPU上;而SLA-NFV则是考虑到FPGA片上资源的限制,把网络功能优先放在CPU上,CPU不能达到预期性能的再用FPGA加速。

P4FPGA架构(图片来源:P4FPGA slides)

本届SIGCOMM大会上,还有多篇论文使用FPGA。康奈尔大学的DTP(Datacenter Time Protocol)利用数据中心网络的物理层特征来实现极高精度的时钟同步。为了实现该时钟同步协议,Han Wang同学写了几千行Bluespec代码来修改NetFPGA的物理层。通过这个项目“练手”之后,Han Wang又实现了一个从P4语言到Bluespec的编译器,这个P4FPGA的工作发表在会议第一天的NetPL workshop上。P4语言与FPGA的结合也引起了工业界的重视,本届SIGCOMM的工业界demo中展示了Xilinx公司从P4语言到NetFPGA SUME的编译器。

在poster和demo环节,国防科大使用FPGA实现了60 Gbps的深度包检测系统,基于Aho–Corasick算法进行字符串匹配,使用片外DRAM和片上缓存来存储有限状态自动机(DFA)。西安交大利用FPGA作为OpenFlow计数器的fast path,在FPGA上只缓存计数器增量,批量刷新到CPU cache并压缩存储,减少了FPGA的内存开销。

体系结构之三:多核CPU

CPU作为最通用的体系结构,在性能方面也不善罢甘休。近年来netmap和DPDK等高性能数据包处理框架运用多种工程最佳实践,处理每个数据包平均只需几十个CPU时钟周期,单个CPU核每秒能处理逾千万个数据包。这些最佳实践包括轮询取代中断、用户态驱动避免系统调用和内存拷贝、使用大页和NUMA-aware内存分配减少内存访问、数据结构对齐缓存行、使用无锁队列、线程独占CPU减少进程切换、把数据包分片及计算校验和等操作卸载到网卡硬件。

今年SIGCOMM上,多篇论文和poster、demo利用DPDK在CPU上高效处理数据包。

PISCES把P4程序编译到Open vSwitch(图片来源:PISCES slides)

普林斯顿大学Nick Feamster组的PISCES把P4程序编译成Open vSwitch(最流行的开源虚拟交换机软件)中的C语言代码,解决了在Open vSwitch中增加功能的麻烦。以往在Open vSwitch里添加一个TCP flag,需要修改20个文件、370行代码。使用PISCES,只需修改4行P4代码。

Ericsson研究院的ESwitch提出了一个把OpenFlow(最流行的网络控制平面协议)编译到x86机器码的虚拟交换机架构。Open vSwitch的做法是缓存已经建立的连接,对于缓存未命中的数据包则存在流表查询慢的问题,这也给拒绝服务攻击打开了方便之门。ESwitch的解决方案是让交换机内的流表自动定制化。尽管用户指定的OpenFlow转发规则在一张功能复杂的大表里,但ESwitch可以自动将这张大表拆分为若干张功能简单的小表,每张小表只负责特定的匹配功能,整个数据平面的转发性能提升了数倍至数百倍。

在demo环节,匈牙利Eötvös Loránd大学演示了从P4语言到DPDK和飞思卡尔网络处理器的编译器,单核每秒可处理1千万个数据包。

dpdkr poster

意大利Politecnico di Torino大学提出的dpdkr网络处理框架为DPDK增加了虚拟机之间直接通信的管道。该管道对应用程序和OpenFlow控制器完全透明,同一物理机的虚拟机间通信就可以绕过Open vSwitch实现加速。

热点2:流量调度

从Van Jacobson在1988年的SIGCOMM上提出TCP拥塞控制协议,拥塞控制和流量调度就是网络领域经久不衰的古老话题。我的导师谭焜的一项重要发明就是CTCP拥塞控制协议,应用在Vista至今的Windows操作系统中。近十年来,拥塞控制和流量调度的研究重心从广域网转移到了数据中心。

数据中心拥塞控制与流量调度

虚拟化数据中心里异构的应用(图片来源:2DFQ slides)

数据中心里的不同应用有不同的带宽和延迟需求,例如响应搜索引擎查询显然比后台日志备份更紧迫。为了用有限的带宽满足应用千差万别的需求,服务器需要决定以怎样的速度发送数据包,而交换机需要决定来自不同连接的数据包的排队顺序,以及有多条路径的情况下数据包从哪条路走。这分别对应着拥塞控制、流量调度和负载均衡三个研究领域,发表了数以千计的论文,近年来也有越来越多的论文将这三个方面结合起来考虑。

琳琅满目的拥塞控制和流量调度协议(图片来源:NUMFabric slides)

花样繁多的拥塞控制协议之间并不都是公平的,例如DCTCP和传统TCP Cubic共享同一条网络链路的时候,DCTCP就会“蛮横”地挤占绝大部分带宽。数据中心里不同客户的虚拟机可能使用不同的操作系统和网络协议栈,如何保证它们之间的公平性呢?如果客户的虚拟机在使用老的拥塞控制协议,能不能不要求客户升级就用上更适合数据中心网络的新协议?

拥塞控制协议的翻译(图片来源:Virtualized Congestion Control paper)

今年SIGCOMM有两篇相似的论文独立提出并解决了这个问题。其中一篇是斯坦福大学和VMWare的《虚拟化拥塞控制》(VCC),另一篇是威斯康辛大学麦迪逊分校和IBM研究院的《交流/直流TCP》。它们的思想都是在虚拟化层(虚拟交换机)里对拥塞控制协议进行翻译,把虚拟机内采用的不同拥塞控制协议翻译成统一的拥塞控制协议。这些翻译方案包括直接读取和修改虚拟机内存、修改TCP头、做缓冲、生成虚假TCP ACK、TCP代理等,VCC论文比较了这些方案的优劣。

拥塞控制的首要目标是保证网络连接之间的公平性,而流量调度的首要目标则是最大化网络作为一个整体的效益。在传统拥塞控制协议中,源端根据网络拥塞的反馈信息动态调整发送速率,需要多次往返才能收敛到最佳发送速率,在收敛之前网络带宽不能得到充分利用。如果每个连接只有几个数据包(例如访问网页),那么网络带宽的利用率是较低的。

斯坦福大学Mohammad Alizadeh研究组提出了一个收敛迅速的公平带宽分配协议NUMFabric。在NUMFabric中,源端指定每条流的权重而非发送速率,网络中的交换机通过加权公平队列(WFQ)进行调度,这保证了网络在加权max-min意义下的公平性(即优先保证需求少的,不能被满足的需求平均分享剩下的资源)。在此基础之上,NUMFabric动态调整每条流的权重,快速收敛使得网络效益最大化。

理想调度和2DFQ、WFQ、WF2Q生成的调度(图片来源:2DFQ paper)

加权公平队列虽然保证了网络流量的公平性,但从应用的角度来看,流量可能变成了bursty的。如上图(c)(d)所示,两个大请求(如数据库扫描)把两个CPU核占满了,小请求(如数据库主键查询)被暂时饿了一会儿,小请求的延迟就会显著升高。如果请求延迟可预测,理想的调度如图(a)所示,让一个核专门处理小请求,一个核专门处理大请求。微软与布朗大学合作提出的2DFQ就是这样一种调度策略。使用2DFQ后,在大多数请求的延迟可预测的情况下(不可预测的当作是大请求),微软Azure云存储的响应时间稳定了很多。

使用WFQ、WF2Q、2DFQ后的请求响应时间(图片来源:2DFQ slides)

这篇论文的演讲对WFQ的可视化做得非常好,个人认为是本届SIGCOMM最棒的一场演讲,建议感兴趣的读者到SIGCOMM会议主页下载其演示文稿(等视频发布了看视频效果更佳)。

Coflow概念(图片来源:CODA slides)

2012年,加州大学伯克利分校Ion Stoica研究组提出了Coflow的概念,即一个分布式任务由若干条并行的数据流构成,只有这些流都完成了,下一阶段的计算才能开始。因此我们关注的不是每条流的完成时间,而是一组Coflow的完成时间。然而,软件开发者需要修改现有的软件来指定Coflow信息。今年SIGCOMM上香港科技大学的张弘提出了CODA (COflows in the DArk),可以自动从网络流量中识别Coflow,并且其调度策略能够容忍一定程度的识别错误,从而不再需要对现有软件做任何修改。

流量调度领域的另一篇主会论文同样来自香港科技大学陈凯教授研究组。数据中心里一部分流是有完成期限的,另一部分流没有。如果简单地把有完成期限的流设为高优先级,那么其他流就会被饿死。陈力的Karuna论文提出,有完成期限的流并不需要占用全部的带宽,只需分配按期完成所需的带宽,就可以把剩余带宽分给没有完成期限的流,最小化无期限流的完成时间。

广域网流量工程

以上几篇都是数据中心内部的流量调度,跨数据中心的广域网同样需要流量工程(traffic engineering)。2013年SIGCOMM,谷歌的B4和微软的SWAN分享了逻辑上集中式的大规模广域网流量工程经验。

PieBridge(鹊桥) poster

今年SIGCOMM,清华大学张宇超与百度合作的PieBridge(鹊桥)系统使用中心化调度的P2P网络,实现了海量数据在异地数据中心间的高效同步。

华为ADN demo

华为未来网络研究院的ADN (Application Driven Network)是本届SIGCOMM唯一搬了三台工作站到现场的demo。他们把工作站放在行李箱里,搬过来都累坏了。运营商网络中有多种类型的应用,每种应用有不同的服务质量需求(如高带宽、低时延、保证带宽和时延),需要若干种类型的网络资源(如无线、广域网、数据中心网络)。ADN把物理网络分片为若干虚拟网络,把应用映射到虚拟网络,虚拟网络内使用定制的网络拓扑、路由协议和流量调度策略来满足异构应用的服务质量需求。

流量调度与经济

流量调度不仅是一个技术问题,同时也是一个经济问题。本届SIGCOMM大会上有几篇论文从经济的角度探索流量调度的新方向。

在跨数据中心的网络通信中,客户有什么动机来标记出流量的真实优先级、带宽保证和完成期限呢?微软公司调查发现,81%的广域网客户希望延迟传输来换取更低的价格;如果数据传输开始时就能获得资费、带宽和完成期限的保证,客户可以接受动态定价。据此,Pretium提出了一套基于动态定价的流量工程策略,使得用户在经济上有动机标记流量的真实需求。

视频流量占据了互联网流量的很大一部分,一些网络运营商(ISP)违背了网络中立原则,悄悄对视频流量进行限速。今年SIGCOMM上,谷歌的论文调研了全球范围内流量限速(traffic policing)的普遍性和影响。在分析了谷歌CDN服务器7天的270 TB流量、8亿个HTTP请求后,发现大约7%的连接被限速了,被限速的连接丢包率是正常连接的6倍,显著影响了视频播放的质量。谷歌建议网络运营商采用流量整形(shaping)取代限速,内容下载服务器也要主动进行限速、pacing。

今年中科院、卡耐基梅隆大学和爱奇艺联合发表的SIGCOMM论文与谷歌对内容下载服务器的建议不谋而合。CS2P采用基于机器学习的端到端带宽估计来选择视频的最佳码率。在训练阶段,首先基于用户会话(session)特征进行聚类,然后在每一类中训练隐马尔可夫模型(HMM)来预测端到端带宽。在线上,首先根据会话特征所属的聚类决定初始视频码率,然后根据反馈和HMM模型来动态调整码率。

Network Cookies的工作原理(图片来源:Network Cookies slides)

斯坦福大学提出,与其要求运营商遵守所有流量一视同仁的网络中立原则,不如把差异化服务的选择权交给用户。只有用户最清楚哪些应用需要什么样的服务质量。例如网盘同步和软件升级一般是后台流量,但急需某个文件时又需要高优先级;视频聊天则需要保证带宽、尽量降低延迟。这篇论文提出了基于cookie的设计,用户给每种应用的网络请求打上标签,网络设备根据这些标签提供差异化的服务质量。

热点3:无线背向散射 (backscatter)

今年SIGCOMM尽管只有5篇无线领域的文章,但其中有两篇获得了最佳论文奖(最佳论文共3篇)。

无线通信比传感需要的能量多很多(图片来源:Interscatter slides)

无线网络设备的功耗往往是最大的问题,我们希望在降低功耗的同时,保持较高的数据传输速率。无线设备功耗的主要来源是射频信号,因而近年研究者希望利用空间中无处不在的电磁波所携带的能量,也就是靠反射来传递信息。

反射电视信号通信demo(图片来源:Youtube Ambient Backscatter demo)

2013年,华盛顿大学的研究者收集和反射环境中的电视信号,实现了无电源设备的短距慢速通信,获得了当年SIGCOMM最佳论文奖。这种设备从信号中收集百微瓦级的能量来驱动芯片运行,把信息编码在收集到的信号上再发射出去。需要一个专门的网关设备来接收和解码。2014年SIGCOMM,该团队把反射电视信号的通信速度提高了100倍,传输距离提高了8倍。

同样是在2014年SIGCOMM,该团队开发出了反射WiFi信号进行通信的技术,可以通过调制WiFi频道,与市售的WiFi接入点进行慢速通信,不再需要专用网关设备。2016年的NSDI上,该团队进一步发明了被动WiFi(Passive WiFi),通过反射环境中持续发射的信号,被动WiFi可以比普通WiFi芯片低1万倍的功耗,按照标准802.11b协议与市售WiFi接入点通信。被动WiFi的原型最初在FPGA上实现,随后制成芯片,目前已经商业化。

Interscatter的应用场景(图片来源:Interscatter paper)

今年SIGCOMM会议,华盛顿大学的最新黑科技Interscatter是在不同种类的无线协议之间实现反射通信,仅使用市面有售的设备,不再需要被动WiFi中持续向环境中发射信号的设备。这样植入设备就可以反射蓝牙信号来生成WiFi信号,实现上图所示的三种科幻场景:(a)隐形眼镜测量医学特征,(b)脑机接口,(c)信用卡之间通过反射手机蓝牙信号来通信。蓝牙设备发送单频蓝牙信号,Interscatter设备将单频信号反射到载波频率的单侧,生成802.11b WiFi载波,并将数据调制于其上。类似以前的工作,这次也是用FPGA实现的原型。

马萨诸塞大学的张鹏宇和胡盼等也在今年SIGCOMM上发表了用于低功耗传感器的实用反射通信技术FS-Backscatter。针对反射信号与原信号互相干扰的问题,Interscatter的解决方案是把蓝牙信号反射到WiFi频段,而FS-Backscatter的解法是把信号反射到相邻的空闲频段。FS-Backscatter实现了WiFi和蓝牙两种协议的反射通信,与Interscatter一样不需要额外的硬件设备。

主动、背向散射、被动三种无线通信方式的比较(图片来源:Bradio slides)

胡盼和张鹏宇等在今年SIGCOMM上还有另一篇论文Bradio,考虑到不同设备电池容量的天壤之别,在传统的主动无线电、反射通信和被动接收之间动态切换,节约。主动无线电发送和接收方都很耗电,信号传输距离较远。反射通信的发送方很节能,但接收方很耗电,且只适用于近距通信。被动接收则与反射通信的耗电情况刚好相反,信号传输距离较远。Bradio基于设备电量和通信距离来选择无线电的工作模式。

在结束SIGCOMM研究热点部分之前,我想最后分享一篇微软研究院的黑科技:ProjectToR。在传统数据中心网络中,机柜之间的网络连接是固定的,大多数机柜之间的连接带宽闲置,而少数机柜之间的连接带宽不够用。因此,近年SIGCOMM有多篇论文提出可重构的数据中心机柜互连方案。其中2010年的Helios和2013年的Mordia使用光交换机,2011年的Flyways和2012年的3D Beam forming使用60 GHz无线电,2014年的FireFly和今年的ProjectToR使用自由空间激光通信。

ProjectToR原理示意(图片来源:ProjectToR slides)

ProjectToR的科幻之处在于,它使用电子微镜设备(Digital Micromirror Device,DMD)来反射激光。DMD由数十万个10微米大小的镜片阵列构成,每个镜片方向固定,由内存的值决定是否反射光线。因此修改内存的值,就可以修改DMD的反射方向,就像镜子转了一个角度。每个机柜顶上有若干个激光发射和接收装置,悬在数据中心上空的DMD改变反射方向,可以建立任意两个机柜之间的光通道。ProjectToR把一部分激光器做成固定网络拓扑,另一部分激光器用来做动态调整的机会(opportunistic)连接,并设计了在这种动态网络拓扑上的路由和流量调度算法。

SIGCOMM论文是怎样炼成的

虽然我是ClickNP这篇SIGCOMM论文的第一作者,第一个在会议上作口头报告,但我的导师谭焜研究员应当得到更多的荣誉。

2013年5月,我面试加入中科大与微软亚洲研究院联合培养实习生项目。该项目每年在中科大招收20名左右大三学生参与为期一年的实习,本科毕业论文也是在微软完成。两个月的实习后,选拔7人左右成为联合培养博士生。联合培养博士生第一年在中科大上课,后面四年在微软亚洲研究院做研究。大四这一年,在无线与网络组资深研究员谭焜博士的指导下,我参与了一个虚拟化网络功能的研究项目,提出了一个可编程路由器上的容错软件框架,探索了可编程路由器的流表翻译问题。这三项研究并没有发表论文,但让我打下了数据中心网络、网络功能虚拟化和可编程路由器的知识基础。

命运总是难以预料。加入联合培养项目的时候,我绝对不知道,博士期间会做FPGA编程方面的研究。2015年7月,当我结束研究生一年级课程,回到微软亚洲研究院继续联合培养博士生项目的时候,谭焜导师对我说,你来负责ClickNP这个项目。他已经设计好了ClickNP的基本元件(element)和管道(channel)的抽象,甚至亲自编写了1000行编译器代码和几个element。我们组的FPGA专家罗腊咏博士也基本摸清了Altera OpenCL这个高层次综合(HLS)工具的脾气,并编写了一个发包工具。导师安排我和两位大四的同学,中科大计算机系的罗人千和上海交大ACM班的彭燕庆,一起来做这个项目,几乎是投入了我们组一半的实习生来做ClickNP。北航的贺同师兄负责整合PCIe channel到OpenCL框架里。

ClickNP项目的成功,团队的努力固然重要,但也要考虑到历史的行程。通用处理器的摩尔定律遇到了瓶颈,数据中心的计算规模、用户需求的灵活性却与日俱增。微软数据中心的解决方案是可编程硬件,即FPGA。微软开发了一套Catapult Shell作为FPGA的操作系统,加速必应搜索、网络、存储等,并把研究成果通过多篇论文共享给学术社区。微软Catapult团队也与Altera合作开发了适用于Catapult Shell的OpenCL BSP,以便使用Altera OpenCL框架编程FPGA,这是ClickNP项目的基础。

微软Catapult项目主页

谭焜导师对我们的指导是循序渐进的。一开始,他让我们把罗腊咏博士写的发包工具移植到ClickNP上,做成ClickNP上的第一个应用。这个工作看似简单,但具体做起来却遇到了麻烦。OpenCL工具尚不成熟,经常遇到一些bug,我们就把踩过的坑记录在文档里。

第二阶段,导师指导我们分头实现各种网络功能。罗人千负责哈希表。彭燕庆负责编写一个功能强大的发包工具。我负责给编译器增加新的语法糖、从Click重构一些基本组件。

哈希表是我们实现的第一个有状态的网络应用。由于我们对OpenCL编译器的原理尚不了解,一段代码稍微做些修改,性能就变得很差。我就做了一系列的microbenchmark,总结出一些编写高性能OpenCL代码的指导原则,后来其中的一些原则被写进编译器,实现了自动优化。

实现TCP校验和的时候,由于读完整个数据包才能计算出校验和,而校验和需要填在数据包头部,这就需要把整个数据包缓存在element内部。我们一筹莫展之际,谭焜导师想出了把两个element用两条channel对接,把数据包缓存在channel里的设计,巧妙地解决了这个问题。为了达到预期性能,两条channel需要能够同时读写,于是我们做了对ClickNP语言迄今最大的修改,放弃了直接函数调用的做法,写了一个简单的C语言语法解析器来生成中间C代码。

第二阶段结束已经是九月份,我们开始分头实现新的网络功能。罗人千负责查找表,包括IP地址前缀匹配和TCAM,做成一个OpenFlow防火墙。TCAM在FPGA中非常耗资源,受到大四在微软实习期间了解的ServerSwitch的启发,我设计了HashTCAM。彭燕庆负责实现网络虚拟化的加速,即NVGRE隧道协议的封装和解封装。我继续顺应团队的需求给编译器添加语法糖,探索在OpenCL里使用片外DRAM,实现限速功能和抓包功能。十月中旬这些功能完成时,我们感觉实现快做完了,可以开始写论文了,但导师说我们还差得远。

这段时间里,我们通过Xilinx的培训了解了Vivado HLS,也掀起了一阵用OpenCL还是用HLS的争论。最终我们发现OpenCL的编程模型并不适合ClickNP的流式数据包处理,从而决定把ClickNP做成跨平台的框架,不依赖于OpenCL的编程模型,后端既可以是Altera OpenCL也可以是Vivado HLS。

ClickNP架构

第四阶段则是实现更多的网络功能。有了更方便的ClickNP语法、库里更多的elements,我们写代码越来越得心应手,开发一个网络功能的时间从一个月缩短到了一周。罗人千继续优化防火墙,彭燕庆实现了基于sketch的端口扫描检测(没有写入论文),我实现了IPSec数据平面所需的AES和SHA-1协议,以及pFabric数据包调度器。

这个阶段,高性能的CPU与FPGA间通信是个意外收获。PCIe channel最初的设计是停等协议,只是用来实现CPU给FPGA发控制信号,但我发现它的发送和接收链路事实上是全双工的,只要稍作修改就可以变成流水线方式,不仅提高吞吐量,而且允许FPGA主动向CPU发送消息。我与贺同学长一起实现了全双工的PCIe channel,我还在CPU和FPGA上的运行时库里增加了自动batch的功能,高负载时batch大,吞吐量高;低负载时batch小,延迟低。

谭焜导师把这个通信机制拔高到了principle的高度,提出了CPU element的概念,一个element既可以编译到CPU又可以编译到FPGA,两边的element还可以高效通信,ClickNP多了一项区别于其他FPGA数据包处理框架的明显特征。SIGCOMM论文的多条评审意见表达了对FPGA/CPU联合处理的赞赏:

  • I like the ability to communicate rapidly between SW and HW, and to move functionality across that boundary.
  • Very nice modularization design using elements and host <-> FPGA PCIe channels.
  • Of particular note is the support for partitioning work between the CPU and the FPGA such that each can be utilized for the tasks best allocated to them.

第四阶段结束已是12月,距离截稿日期一个月,我们的evaluation还没有做。导师希望做一个能体现高性能CPU与FPGA通信的应用,最后选择了四层负载均衡器,把每条新连接的后端服务器分配逻辑放在CPU上。

ClickNP四层负载均衡器与Linux Virtual Server性能的比较(纵轴为对数坐标)

第五阶段,也就是evaluation,一是测量CPU上网络功能的性能,二是测量ClickNP在FPGA上的性能,三是测量每个element相比CPU的加速比、相比NetFPGA原生Verilog的资源开销。我们大大低估了这个阶段的工作量。首先,FPGA编译一遍就要几个小时,发包、测性能的程序经常需要修改。其次,我们没有DPDK的经验,花了不少时间搞清楚它的性能瓶颈,以及让DPDK Click支持多核并行。再次,在配置StrongSwan的时候遇到了一些困难。最后,实现NetFPGA里面的网络功能、编译NetFPGA SUME代码也是一件麻烦事。

由于对时间预估不足,大多数应用的结果图也是最后一周才做出来的。由于当时没有找到负载均衡器对大数据包偶尔发生死锁的原因,我们只好全部用小包来做实验,在最后一天夜里匆忙做出结果图。导师告诫我们,以后实验结果图要尽早做出来,做实验前先想清楚这张图想说明什么,有些实验根本没必要做,有些实验做不出来也无伤大雅。

最后两周,谭焜导师仔细揣摩词句、撰写论文。很惭愧,我还不能写出SIGCOMM水准的文字。其中“优化”一章,两页纸的内容,导师反复思考修改了五天,我也急中生智想出了delayed write的新优化方法。SIGCOMM的评审意见中,这一章也是被评论最多的,可见这章内容的确引起了审稿人的兴趣。

SIGCOMM截稿的那一刻,ClickNP的代码仓库刚刚突破一千个提交,约两万行代码。全组的合作者忙了八个月,大概做了三件事:第一,设计实现了ClickNP语言和工具链;第二,设计实现了近百个FPGA上的高性能网络功能模块;第三,设计和评估了五个FPGA加速的网络应用。如果说还有什么创新,就是在FPGA和CPU之间细粒度的分工和高性能的通信。尽管ClickNP是第一个在FPGA上用高级语言实现通用网络功能的高性能编程框架,我还是很惭愧,只是在现有HLS工具的基础上做了一点微小的工作,FPGA高级语言编程仍然存在诸多困难。

准备SIGCOMM演讲的时候,导师组织了三次全组的排练,每页slides都给了很多建设性的意见。除了谭焜导师,从未有人在演讲方面给我如此细致的指导。

我在微软学生技术节上向洪小文院长演示ClickNP

今年7月,ClickNP在微软学生技术节上获得了微软全球资深副总裁、微软亚洲研究院院长洪小文博士的好评,并获得最佳演示奖。8月,基于ClickNP平台的“HTTPS加速器”项目获得微软Hackathon“Cloud & Enterprise”组全球第二名。在SIGCOMM大会上,ClickNP不仅被安排为第一个口头报告,还被同一个会议上的两个口头报告和另一篇论文引用。

今年SIGCOMM终身成就奖得主Jim Kurose在获奖感言中说,选择研究课题的时候要想清楚在解决什么根本问题,这个问题未来五到十年会有多少人关心,你的优势又在哪里。我认为用可编程硬件加速数据中心这个课题很符合Jim Kurose的选择标准:通用处理器的性能瓶颈呼唤新的体系结构,新的体系结构呼唤编程语言的创新;微软作为FPGA加速数据中心领域的先驱,为学术界和工业界开辟出一片蓝海。尽管FPGA不是万能药,使用中也存在诸多困难,我还是对这种高度并行和高度灵活的体系结构充满希望。在SIGCOMM演讲的结尾,我用了一句口号:Across the memory wall and reach a fully programmable world.

Comments