一名系统研究者的攀登之路-陈海波-

2023-11-04

陈海波:原复旦大学Pa ra lle l Proc e s s ing Institute实验室的牛人,在sosp,EuroSys等世界最顶级会议上发表过论文的大牛人(不过,现在被上交软件学院给挖走了 ,哈哈)

1. 引言
写好计算机系统领域的研究论文非常不容易,不仅需要有非常好的想法,还要证明这个想法的可行性和应用效果。因此,准备一篇论文的周期通常应在一两年以上。计算机系统领域的学术会议通常每年只接收二十多篇研究论文,以保证学术交流会(single-track  session)对每篇论文进行充分的讨论。2011年计算机系统的几大会议——S O S P(O S D I在偶数年召开)、E u r o s y s、U S E N I X  A T C接收的研究论文总计只有79(28  +  24  +  27)篇。较长的投稿准备周期与较少的论文接收总数使得在计算机系统领域里发表会议论文异常困难。长期以来,这些学术会议的论文被美国、欧洲的一些著名高校、科研机构和公司研究院所占据,我国乃至亚洲地区学者在这些会议上发表论文的数目极少。据统计,截至2 0 1 0年底,亚洲学者40年来在S O S P上独立发表研究论文的数目仍然为零。作为一名计算机系统领域的研究者,在计算机系统相关的高水平学术会议上发表研究论文无疑是非常重要的。自2 0 0 4 年起我开始了计算机系统的相关研究,2 0 1 1 年终于与复旦大学并行处理研究所的学生分别在EuroSys 2011、USENIX ATC 2011与SOSP 2 0 1 1 上发表了研究论文或被接收了论文。在论文撰写与投稿的过程中,我们经历了挫折,也积累了一些经验。在此我非常荣幸地将我在计算机系统领域开展研究的经历与感受与大家分享,希望对目前正在从事系统方向研究的研究生有所启发。
2. 研究经历
我接触计算机研究是在2002年的7月,大学二年级结束后的暑假。一次偶然的机会,我接到臧斌宇教授的邀请,加入了复旦大学并行处理研究所的研究团队。当时我参与的是一个与编译相关的项目,主要的工作是为飞利浦T r i m e d i a 芯片的超长指令字(very long instruction word,VLIW)指令集GCC(一套由G N U 开发的编程语言编译器)移植后端,再进行优化。2 0 0 3 年下半年开始,我们开展了可重配置体系结构的研究,探索如何为媒体与通信应用设计可重配置的处理器结构。

2 0 0 4 年英特尔公司的王文汉博士讲到系统虚拟化将会在十年内流行并产生重大影响。很荣幸,我从读研究生开始就在臧斌宇老师的安排下从事了系统虚拟化的探索工作。当时国内虚拟化研究工作虽然刚刚起步,但是很多需求已经显现出来了。上海电信相关部门的负责人当时提出了面临服务器与服务整合和提高电力供应的问题。当时我们觉得用系统虚拟化应该是一个非常好的解决方案。我们的第一个切入点就是如何去度量企业应用在虚拟化的情况下的性能与服务质量的问题。为此,我们选择了很多的基准测试程序包括TPC-C与TPC-W等来对比分析虚拟化层可能存在的问题。

当时我们的想法是用客户操作系统与虚拟机监控器进行配合以减少虚拟环境下性能开销与服务的不确定性。从2004年11月开始设计,到2005年5月我们终于有了一个雏形并准备测试。就在此时,我在查看相关研究动态的时候,突然发现被V E E  2005接受的一篇论文跟我们的想法很像。当时给我的感觉是:“撞车了!”真有种万念俱灰的感觉,半年多的工作白费了。我在惋惜、灰心的感觉中度过好几周才慢慢恢复过来。

我们开展的第二项工作是基于系统虚拟化的动态更新系统。某天在浏览电子公告板(B B S )的时候,W i n d o w s  X P系统突然跳出一段提示:“您的补丁已经下载完毕,请重启您的电脑以应用更新。”这段提示不断地跳出来让人觉得很烦。晚上睡觉我思考接下来的研究方向时,迷迷糊糊之际突然想到是否可以用虚拟机监控器来为操作系统实现动态更新,而不需要重启计算机。因为传统的操作系统直接运行于硬件层。操作系统在运行时需要修改自己的状态。如果操作系统自我动态更新的话就涉及到自我状态与被更新状态的相互影响的问题,这就有点像鸡生蛋还是蛋生鸡的问题,需要一个解决(b o o t s t r a p)的办法。因为在虚拟化的环境下,操作系统实际上是运行在虚拟机监控器上的,完全可以用虚拟机监控器来控制客户操作系统的状态以保证更新过程中的状态一致性。基于这个想法,我们设计了一个“双向同步写穿”的协议,维护更新过程中的新旧状态的一致性。这项工作最后被V E E  2006接受,当时在大会演讲的时候引起了较长时间的讨论。会上美国伊利诺伊大学的维克拉姆(V i k r a m A d v e )教授还特意跑到我面前说这是个非常酷的工作。后来V M W a r e公司也开发出了基于虚拟化的补丁管理系统。在这个工作的基础上,后来我们又开发了第一个支持多线程应用数据结构动态更新的系统P O L U S(I C S E  2007)。之前的系统需要在更新的时候一直将操作系统运行在虚拟机监控器上,从而带来了较大的性能开销。我们又设计实现了动态虚拟化系统,从而使操作系统只有在需要的时候才会被虚拟化。为此,我们获得了ICPP 2007的最佳论文。

由于之前进行过一段时间的编译与体系结构的工作,后来我就思考是否可以将现在进行的系统领域研究与它们进行结合。于是2 0 0 7 年初就开始了利用动态信息流加强系统安全的工作。当时利用软件进行动态信息流跟踪的主要问题是性能开销太大,然而基于硬件的动态信息流系统则需要较多目前尚不存在的硬件扩展。由于安腾处理器为了支持猜测执行为每个寄存器增加了一个状态位来跟踪猜测执行过程中的异常情况,于是我们就尝试利用猜测执行硬件支持来实现高效的动态信息流跟踪,并且实现了一个叫S H I F T的系统(I S C A  2008)。在S H I F T工作的基础上,我们又探索这样的特性是否可以解决其他问题。后来,我们设计实现了基于动态信息流的程序控制流混淆系统,通过用户态异常来隐藏程序控制流,从而达到抗逆向分析的效果(M I C R O 2009)。

2008年初,美国麻省理工学院的M.弗兰斯· 卡肖克(M.  Frans  Kaashoek)院士对微软亚洲研究院进行为期半年的访问。我非常荣幸地和其他同学一起在弗兰斯的指导下开展了为期半年的研究工作。期间主要探索如何为众核平台设计性能可伸缩的操作系统。在这期间,我与其他同学一起设计实现了C o r e y操作系统(O S D I  2008)。我负责的是内存密集多核应用的行为分析以及对应的内核抽象支持以提供可伸缩的性能。经过与弗兰斯一起工作,我学习到了非常多的东西,也有非常深刻的体会,后面将具体提到。

2 0 0 9 年1 月博士毕业后我留校继续在并行处理研究所带领系统研究组开展相关计算机系统的研究。在工作中,我们针对众核环境中的软件运行栈进行分析与优化,以提高其性能可伸缩性;同时针对云计算环境下的用户数据的安全性与隐私性开展研究。期间与实验室成员一道设计与实现了T i l e d  M a p R e d u c e(通过分块等办法改进M a p R e d u c e的编程模型,P A C T   2 0 1 0 );第一个可移植的并行全系统模拟器C O R E M U(P P o P P  2011);基于操作系统簇集的众核操作系统可伸缩解决系统Cerberus(Eurosys 2011);面向J V M平台的高效执行重放平台O R D E R(U S E N I X  A T C  2011)与基于嵌套虚拟化的云平台数据保护系统CloudVisor(SOSP 2011)。

3. 感触
九年的研究生涯,我与实验室成员得到了不少的教训,也积累了一些经验,感受颇深。在此结合计算机系统领域的研究把自己的体会介绍给大家:
批判性思维
系统研究中的自由性使系统研究很容易走向“重新发明轮子”或者“发明一个不相干的轮子”的误区。因此,系统研究尤其需要批判性的思维。在与弗兰斯一起工作中,弗兰斯就特意告诫我思考问题需要极度的批判性(s u p e r-c r i t i c a l)。我现在还很清楚地记得当时我向他介绍我们发表在I S C A  2008上的论文时候的情形:刚开始介绍论文的意义,我就被他的一连串问题给难住了。“为什么要采用动态信息流跟踪来做攻击检测?”我举了B u f f e r O v e r f l o w的例子。弗兰斯反驳说,“B u f f e r  O v e r f l o w已经有很多办法来解决了,如地址空间随机话与不可执行栈。”我就举了SQL注入的例子。弗兰斯又反驳说,“为什么不能用静态分析的方法来解决?”后来我知道,弗兰斯对这些问题都是非常了解的,他希望通过问答的方式看到我在这个过程中对涉及到的问题是否深入地、批评性地思考过了,而不是简单地接受其他人或论文上的观点。
扎实的基本功
计算机系统偏向于实践,强调的是解决问题的整体能力。因此,比较全面的知识面,扎实的系统编程能力与快速学习能力将对开展系统方向的研究至关重要。而这些能力往往需要较长时间的培养。在这里,我要感谢复旦大学软件学院的以实践为导向的课程体系,为我提供了比较扎实的基本功,使我在本科阶段就积累了比较好的操作系统、体系结构与编译系统等的设计与实现能力。在国外许多著名高校,都是将教学与研究联系得非常紧密的。例如,目前我在教授操作系统课程时采用一个基于显示内核(E x o k e r n e l )的J O S 作为操作系统的课程实验(源自M I T的课程代号为6.828的操作系统课程)。而2008年我们的C o r e y操作系统(O S D I  2008)就是以J O S为基础,进行面向众核操作系统的性能可伸缩性的扩展,来设计多种抽象为众核设计操作系统。而麻省理工学院的分布式系统的课程项目则是由当时影响了很多分布式文件系统设计(包括Google文件系)的Frangipani(SOSP  1997)而来。这样,他们就很容易通过课程实践的项目为学生提供较强的基本功,从而很容易就能将课程上学到的知识应用到研究项目中去。
发散式思维
在研究过程中,如果问题A得到解决,那么是否可以解决问题B?如果问题A通过方法1得到解决,是否还可能通过方法2进行解决呢?各种解决方法各有什么样的优缺点?在研究过程中就需要不断地进行这样发散式的思维。例如,在使用虚拟机更新操作系统的方式提供操作系统的动态更新后,是否可以将类似的想法应用到多线程应用呢?于是我和其他
组员一起设计与实现了第一个支持多线程数据结构更新的动态更新系统POLUS(ICSE    2007)。同样,在完成使用动态信息流跟踪的研究后,我就在想是否可以利用它来解决其他问题呢,于是我们就设计实现了基于信息流的控制流混淆技术。同样,在完成C o r e y的工作后,我们尝试一方面为众核提供更好的开发工具C O R E M U(P P o P P  2011),另一方面将C o r e y中的一些功能应用到日用操作系统中去(C e r-berus, Eurosys 2011)。 
开阔的视野与专注的研究
这看起来更像是一个采用深度优先还是广度优先进行学习与研究的例子。看似一对矛盾体,因此需要去做动态平衡。我个人的体会是,对研究生而言,在一段特定的时间内需要有一个专注的研究点。在选择研究点的时候需要批判性的思考。这样的一个研究点是否值得去做?而一旦这个研究点确定下来了,就要持续深入地去研究一个相对较长的时间,直到可以很肯定地告诉自己这个研究点的问题已经全部解决了,否则就不轻易放弃。在专注的过程中,还需要以一个开放性的心态去关注其他领域的动态,通过学术会议、报告与小组讨论等方式去获取新的信息。但如果在这个过程中有了新的想法,先别急着去改变自己的方向,而是先将其记录下来,隔段时间拿出来思考一下,然后在当前专注的研究点有了结论后再去尝试新的想法。我在指导学生的过程中也碰到过一些非常聪明的学生。他们的想法非常多,但大部分想法都没有经过深入地带批判性的思考,就会出现这周做系统安全的相关研究,下周又去探索多核操作系统的性能可伸缩性,再下周又去探索分布式系统了。出现这种情况,我通常建议先专注于一个研究点,直到这个研究点有结论了以后再去探索其他的研究点。
认真、逻辑严密的写作
系统领域对写作非常重视,因为大家普遍认为,严谨细致的写作是严谨细致思维的体现。因此,所有系统领域的顶级会议在接受论文后,都会给每篇论文指定一个指导(S h e p h e r d),  督促与帮助作者完成论文的最终版本的工作。比如,我们与M I T合作的C o r e y论文被O S D I  2008接受后,又重新写了一遍论文,系统的设计、实现与实验也重新做了一遍。尽管我们Eurosys  2011论文的6位审稿人都给出了肯定的评价,但我们在准备最终版本的时候仍然修改了五遍。在这个过程中,我的体会是,中国学者的英文写作可能会存在一定劣势。计算机系统方面的英文写作最重要的是如何理清思路与逻辑,以严谨、清晰的方式将所要表达的意思传递出来。因此对整篇论文、每个章节、每个段落乃至每个句子的逻辑与结构都要进行仔细地推敲这是非常重要的。
耐心
由于计算机系统领域研究的周期相对比较长,因此切忌急功近利。例如,C e r b e r u s、C O R E M U与C l o u d V i s o r系统的周期都接近两年。此外,我们还要沉得住气,尤其是要全面系统地看待他人的工作。系统领域很多研究需要平衡很多因素,强调解决问题的方法应简单与优雅,  这样很多非常有影响力与实用价值的论文看起来比较简单。所以很多同学(包括学生时代的我)很容易觉得计算机系统方面的论文很容易就搞定了。我看到过一些同学(包括过去的我)一直盯住一些会议的截止日期,   在还有一个月到三个月的时候从零开始,抱一堆相关领域的论文,试图在短时间内搞定一个顶级会议。这种方式到最后基本上都会失败。 由于系统强调实用性,大部分系统领域的研究论文都要有工作原型系统的实现以验证其想法的可行性。所以,经常有可能出现一个b u g 需要几周的时间来调试。在调试的过程中需要不惧怕艰难的心态,而不是碰到一点困难就在第一时间放弃。弗兰斯在2011年获得A C M-I n f o S y s奖的访谈时也谈到,系统方向研究最重要的是兴趣与恒心(Persistence)。

面对拒稿
由于计算机系统领域研究人员的极度批判性思维以及总体较少的论文数目,计算机系统领域论文被拒的情况便是家常便饭。如何面对论文被拒,这就需要培养一个良好的心态去面对拒稿,分析其中的原因并进行改进。在学生时期,我们的一篇使用虚拟机监控器来保护不被信任操作系统应用的论文投到了S O S P  2007被拒了。后来我去V M W a r e公司位于Palo  Alto的总部实习的时候,才知道被拒的一个重要原因是因为当时V M W a r e 公司与斯坦福大学也投了一篇具有类似想法的论文,因此程序委员会委员觉得不能接受两篇想法相似的论文,所以两篇都被拒了。后来V M W a r e 公司与斯坦福大学的论文发表在A S P L O S   2 0 0 8 上。这让我感觉非常沮丧,觉得我的工作与别人发生了冲突,已经没有意义了。因此当弗兰斯劝我再在原有的基础上进行改进创新重投O S D I  2008时我都没有信心。现在回想起来觉得当时没必要那么灰心,其实是可以将工作做得更加彻底的,也许很有可能就有新的发现。同样,我的第一个工作也不应该就此放下,可以通过与同行的工作进行对比,将问题了解得更加清楚,从而获取新的收获

4 结语

通过9年的科研工作,我经历了很多的失败,也收获了成功的喜悦。最为重要的是,在这个过程中我学到了很多相关的知识与技能。希望通过对我成长过程的描述,能给同行一些参考,起到抛砖引玉的作用。我要感谢我的导师臧斌宇教授,我的课题组过去与现在的成员,麻省理工学院的M.弗兰斯· 卡肖克(M.F r a n s  K a a s h o e k)院士,明尼苏达大学的游本中(P e n-c h u n g  Y e w)教授与加州大学圣巴巴拉分校(U C S B)的佛雷德(F r e d  C h o n g)教授,以及在我攀登过程中对我提供帮助的人。



陈海波
CCF会员,2009年CCF优秀博士学位论文奖获得者。复旦大学并行处理研究所讲师。主要研究方向为系统软件与系统结构等。
 oldseawave@gmail.com

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一名系统研究者的攀登之路-陈海波- 的相关文章

  • 主线程退出后,子线程会不会退出

    额 好吧 这是个标题党 其实所有的线程都是平级的 根本不存在主线程和子线程 下文所述为了方便 将在main函数中的线程看做主线程 其它线程看成子线程 特此说明 先考虑以下代码 include
  • Java 多线程模式 —— Guarded Suspension 模式

    Part1Guarded Suspension 模式的介绍 我们只从字面上看 Guarded Suspension 是受保护暂停的意思 1Guarded Suspension 模式 在实际的并发编程中 Guarded Suspension
  • JAVA使用线程池查询大批量数据

    前言 在开发过程中可能会碰到某些独特的业务 比如查询全部表数据 数据量过多会导致查询变得十分缓慢 虽然在大多数情况下并不需要查询所有的数据 而是通过分页或缓存的形式去减少或者避免这个问题 但是仍然存在需要这样的场景 比如需要导出所有的数据到
  • 高效程序员的40个好习惯和行为方式

    每一个好的习惯 开头都会相应有一个唱反调的句子哦 1 做事 出了问题 第一重要的是确定元凶 找到那个人 一旦证实了是他的错误 就可以保证这样的问题永远也不会再发生了 指责不会修复bug 把矛头对准问题的解决办法 而不是人 这是真正有用处的正
  • centos8安装postgresql步骤

    1 安装源 1 sudo yum y install epel release 2 postgresql官网发布的postgresql对应的安装源 sudo yum install y https download postgresql o
  • 线程常见方法

    目录 线程常见的方法 设置优先级 Join方法 Sleep方法 setDaemon 线程常见的方法 starto 启动当前线程 表面上调用start方法 实际在调用线程里面的run方法 run 线程类继承Thread类或者实现Runnabl
  • GIF演示排序算法

    最近在准备笔试 面试 看了不少关于排序算法的知识 总感觉代码有余 直观不足 所以想利用直观的GIF动图来演示各种排序算法 1 插入排序 Insertion Sort 1 1算法简介 插入排序 Insertion Sort 的算法描述是一种简
  • C++多线程(并发、进程、线程的基本概念和综述)

    并发 进程 线程的基本概念和综述 并发 并发表示两个或者更多任务 独立的活动 同时发生 进行 例如 一面唱歌一面弹琴 一面走路一面说话 画画的时候听小说等 回归到计算机领域 所谓并发 就是一个程序同时执行多个独立的任务 以往计算机只有单核C
  • 【Excel】工作中会用到的excel操作和技巧

    最近入职培训 接受了一些企业文化的洗脑课 不过也有一些是很有实际应用的课程 比如excel操作和技巧 现将自己觉着很有用的地方总结如下 1 基础性操作与技巧 说在前面 一个好的工作表格 需要主要以下几点 首行首列要留白 外边框要加粗 字体字
  • VirtualBox虚拟机网络连接设置的四种方式

    VirtualBox是一款SUN出品的非常优秀的虚拟机程序 版本也非常齐全 你可以在官网上找到适合各种操作系统平台的版本 这里我先给大家大致讲解下VBox的网络配置及应用 VirtualBox的提供了四种网络接入模式 它们分别是 1 NAT
  • 结束了在MSRA的实习

    从5月到11月底 总共在MSRA渡过了7个月的实习时光 这7个月似乎是我感觉过得最快的7个月 或许是一个人在北京 生活上没有太多的琐事 只有很单纯的工作 于是就有这种时光飞逝的感觉 当然 记忆里面也并非都是工作上的事情 在MSRA还认识来自
  • 人生就像一次旅行

    我很欣赏一个广告 特别是那句话 人生就像一次旅行 不必在乎目的地 在乎的是沿途的风景以及看风景的心情 人生怎样才能够真正做到如此的豁达 人生是一段旅程 在旅行中遇到的每一个人 每一件事与每一个美丽景色 都有可能成为一生中难忘的风景 一路走来
  • 2020最新版KVM虚拟机安装详解

    VMware Workstation Pro15 5下 1 操作环境 CentOS Linux release 7 7 1908 Core 2 需要用到的工具 XSHELL Centos任意版本镜像 3 必须安装的软件 Xmanager p
  • 导航电子地图的制作过程

    背景知识 1 导航原理 现代导航通过实时测定运动客体的当前位置及速度 方向等运动参数 以此为基础通过分析和计算 确定若干条符合某些条件要求如 距离 速度 时间 方向 的路线和行驶方案 然后利用系统进行引导和控制客体沿确定路线行驶 并提供必要
  • KVM虚拟化技术的-NUMA技术和应用

    NUMA技术是解决多CPU共同工作的技术方案 多CPU共同工作主要有3中架构 SMP Symmetric Multi Processor 非统一存储访问结构 NUMA Non Uniform Memory Access 以及海量并行处理结构
  • ESXI 7.0 版本配置N卡显卡直通

    ESXI 7 版本配置N卡显卡直通 前因 ESXI版本太新 网上啥参考资料没有 显卡直通各种问题 虚机一装显卡驱动就直接把宿主机直接整挂了 于是各种查资料 各种尝试 终于搞定直通问题 配置 名称 版本 服务器 DELL R720 ESXI
  • 前端工作总结03

    1 includes 与indexOf 的结合使用解决删除否的情况 因为我们的列表中有些会有签发signMark的值 有些没有 我用map方法返回相应数组某些值 返回一些新数组 如果没有返回的是 undefined 此时我们的length为
  • 多线程编程与性能优化

    引言 在上一篇的入门篇中 我们对Android线程的基础概念和多线程编程模型有了初步了解 本篇将深入探讨多线程编程技术和性能优化策略 以提升应用的效率和响应性 高级多线程编程技术 使用线程池管理线程 线程池是一组预先创建的线程 用于执行任务
  • 前端基础Vue项目中的插槽使用

    概念 简单理解就是组件内部留一个或多个的插槽位置 可供组件传对应的模板代码进去 插槽的出现 让组件变的更加灵活 1 匿名插槽 父组件
  • JUC的常见类

    目录 Callable ReentrantLock Semaphore CountDownLatch JUC 即 java util concurrent 其中存放了一些进行多线程编程时有用的类 Callable Callable是一个接口

随机推荐