陈海波:原复旦大学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

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

  1. Linux系统高树攀登之路

    Linux系统高树攀登之路 Linux作为一种操作系统已经发展了这么长的时间,已然有了很多的"粉丝",其中不乏有"通天之力"的Linux大牛,也有能在Linux ...

  2. 计算机、网络安全、CTF资源总结-The_Growth_Path_Of_A_Pwner(一名安全从业者的成长之路)

    The_Growth_Path_Of_A_Pwner(一名安全从业者的成长之路) github项目,会不断更新,求个star! https://github.com/tangzichengcc/The ...

  3. 应该成为一名系统工程师么?

    题外话 从家长到老师.从学生到职场精英,每个人都在说中国是应试教育,不是素质教育:中国是发展中国家,没有职业市场,一个人能成就什么,靠的是运气.胆量而不是技能.创造力.是这样么?历史有惊人的相似性,一 ...

  4. 徐烨:这20年,我与应用系统的“云化”之路

    摘要:在应用架构,物联网等方面有着丰富经验的徐烨,回望过去20年的工作经历,他表示应用系统的发展,就是一个不断"云化"的过程. 目前,以数字技术为主导的新一轮科技革命加速演进,数字 ...

  5. asp.net928-研究生报名系统

    项目编号:asp.net928-研究生报名系统 运行环境:VS+SQL 开发工具:VS2010及以上版本 数据库:SQL2008及以上版本 使用技术:HTML+JS+HTML 开发语言:C#,框架:a ...

  6. 一个微服务业务系统的中台构建之路

    一个微服务业务系统的中台构建之路 中台是近两年软件开发领域的热点话题,相关的文章也成为了各个技术社区和媒体争相报道的网红内容.作为企业支撑业务开发的核心系统,中台的重要性不言而喻,很多企业也开始尝试中 ...

  7. 得物从0到1自研客服IM系统的技术实践之路

    本文由得物技术王卫强分享,为了更好的阅读体验,有较多的内容修订和排版优化. 一.引言 客服IM的核心业务其实就是在线沟通,客服IM的好处是使得客服与用户通过实时沟通的方式可以在最短的时间内帮助用户解决 ...

  8. “超级品牌”已成型!解码名创优品的进阶之路

    随着经济复苏,消费者心智和市场趋势逐渐发生变化,零售市场竞争步入深水区,为品牌带来了更大考验.但反过来,也令更多潜力股加速崛起. 北京时间5月16日,名创优品集团(NYSE:MNSO;HKEX: 98 ...

  9. Android10.0 日志系统分析(二)-logd、logcat架构分析及日志系统初始化-[Android取经之路]

    摘要:本节主要来讲解Android10.0 日志系统的架构分析,以及logd.logcat的初始化操作 阅读本文大约需要花费15分钟. 文章首发微信公众号:IngresGe 专注于Android系统级 ...

最新文章

  1. 操作系统2--操作系统结构
  2. html5 Web Workers
  3. js解决异步的方法汇总
  4. python在线读-文档编辑工具Markdown
  5. 优秀好文收录(持续更新...)
  6. [moka同学笔记]linux服务器防火墙的设置
  7. 崩溃bug日志总结2
  8. 为什么要做短视频秒播优化
  9. MySQL对于有大量重复数据表的处理方法
  10. 基于React跑一个简易版九宫格抽奖
  11. [python+pip] 使用pip将函数库安装到Python环境或Anaconda环境
  12. UGUI ScrollRect 滑动
  13. gb28181简单实现sip信令服务器(java版基于springboot):三、sip摄像头注册(代码实现)
  14. Web项目开发流程 PC端
  15. 英语发音规则---G字母
  16. 订单系统设计 —— 数据同步与监控
  17. 标准 BT656 并行 数据结构 详解
  18. U-Boot参数设置 .
  19. pgsql之create user与create role的区别
  20. HR人力资源系统管理源码

热门文章

  1. 开元研究之中国传统媒体发展预测
  2. 九头蛇(Hydra)安装与使用
  3. 微信小程序——多人协同和版本管理
  4. Linux下文件差异比较工具
  5. HTTP 请求header信息讲解
  6. Python软件打包成EXE文件
  7. CSS空间属性z-index
  8. 网页引入svg图片的4种方式
  9. 微信universal link
  10. Spring Boot + Flowable 工作流引擎