当前位置: 首页 > 科技观察

生产环境高并发程序崩溃?马萨诸塞大学自动化多线程软件故障分析

时间:2023-03-20 12:31:55 科技观察

软件调试是一项非常枯燥且技术难度大的工作,软件故障自动化分析是一代又一代程序员的共同梦想。进入多核时代后,多个线程的并行处理大大提高了程序的性能,但同时,任务的交错使得程序的结果重现变得更加困难,使得调试工作更加繁重难的。近日,美国马萨诸塞大学阿姆赫斯特分校(简称“麻省”)电子与计算机工程系刘同平教授带领的研究团队近日开发出一种名为Watcher的自动化多线程系统。软件故障分析工具可在数秒或数分钟内自动准确定位软件错误原因。有望彻底解决生产环境下并行程序调试难的问题,可显着提升自动驾驶等关键系统的可靠性。从智能手表到大型服务器,从零售终端到金融交易平台,软件服务存在于日常生活的方方面面,极大地方便了人们的日常生活。但是,软件总是包含一些潜在的缺陷或错误。尽管严格的软件测试有助于及早发现这些缺陷,但开发人员常常被迫在没有进行全面测试的情况下匆忙发布软件。而且,一些软件缺陷只有在特定的输入条件下才会被触发,或者只有在特定的任务交互下才会出现。即使是严格的测试也不能完全消除大型软件的所有缺陷,尤其是并发软件。.这些程序中的缺陷往往会漏过软件测试的网,进而导致系统崩溃、程序挂起或在运行过程中出现安全漏洞。尽管现在有一些软件调试系统可用,但大多数都需要人工干预。这样的系统不能直接部署在实际的应用生产环境中。人们使用微软的Office软件很多,但是你不能指望普通用户能够调试这些软件的问题。普通用户既没有能力也没有义务帮助调试。因此,软件公司只能收集用户错误报告,然后进行离线诊断。但是,离线诊断有各种缺点:首先,由于上传数据时无法区分与故障相关的信息,离线诊断必须收集故障现场的所有数据,其中还包括一些用户的隐私数据。例如,如果用户只是用IE浏览器登录网银账户,然后就死机了,错误报告中会包含用户的帐号和密码等隐私信息;其次,由于离线诊断通常依赖于统计方法,或者通过错误状态进行逆向推理程序,这些方法的诊断能力非常有限。因此,迫切需要一种更有效的软件诊断系统来替代传统的离线诊断方式。“无论技术如何进步,软件故障始终是一个令人担忧的问题。”刘同平教授表示:“我们研究的软件故障诊断系统Watcher,可以在原运行环境下现场快速诊断出程序故障的根本原因。与以往的其他工具相比,Watcher避免了其他分析软件的隐私问题。”用户不再需要上传整个内存镜像,Watcher只会提供软件相关故障的报告,而且Watcher部署方便,不依赖于自定义硬件或操作系统(但目前Watcher只提供Linux系统支持)),无需修改程序代码或重新编译程序,研究团队使用Watcher成功检测出数十款软件(包括一些大型应用)的故障,评估结果表明Watcher能够准确识别故障根源在短短几秒钟内出现软件故障。”“冻三尺非一日之寒,行千里非一日之功”。软件故障诊断的这一突破,也源于刘教授及其研究团队长期的艰苦奋斗和艰苦奋斗:早在10年前,刘同平教授还是博士生时,就开始研究确定性问题并行软件,他的成果发表在计算机软件系统顶级会议-操作系统原理会议(SOSP'11)上。博士后期开始研究确定性记录回放系统(record-and-replay)Watcher软件系统的基础工作,相关成果发表在顶会软件工程(ICSE'16)和编程语言峰会(PLDI'18)。2015年,当刘教授还在德克萨斯大学圣安东尼奥分校工作时,他的学生刘宏宇继续着这方面的研究工作。经过8年的努力,软件故障诊断取得了今天的重大突破。刘教授说:“Watcher的成功离不开它的基石——iReplayer,这也是我们组PLDI'2018的成果。iReplayer是一个能够准确复现程序错误,保证程序运行一致性的系统:在重新执行过程中,“相同的指令将在相同的内存位置/寄存器上执行与原始运行相同的读写操作。该特性为软件故障诊断提供了坚实的基础。”Watcher是基于iReplayer进行软件错误现场诊断的,基本原理如下图所示:记录程序的一些运行情况,但其性能开销不到3%。当程序出现错误时,会自动打开Watcher的诊断模块,在回放过程中进行自动诊断。Watcher结合二进制静态分析、动态分析和硬件调试技术,实现软件故障自动诊断。目前,该研究已发表在编程语言与软件工程顶级学术会议OOPSLA'2020上,相关合作单位包括普渡大学、德克萨斯大学圣安东尼奥分校、伊利诺伊大学香槟分校。Watcher的错误诊断基于一个关键发现:错误通常是由程序将不正确或无效的值写入某些内存然后在后续运行时抛出异常引起的。Watcher基于这一发现,采用混合分析的方法,确定了导致程序错误发生的内存单元、相关指令、错误值传播路径。如果二进制分析出现不确定的情况,Watcher通过replay运行过程再次收集确认程序错误的相关信息,从而准确报告程序错误的根本原因。此外,Watcher利用硬件寄存器以非侵入方式收集对特定内存的访问并动态分析与程序错误相关的片段。Watcher分析完成后会生成完整的错误值报告,程序员可以根据报告快速定位并修复程序错误。Watcher的优势之一是它可以用于软件开发、部署、生产的所有阶段。可以预见,对于各种急需现场错误诊断的系统,尤其是与人身安全相关的领域,如航空系统或自动驾驶等,Watcher将大有裨益。自动驾驶领域的一大痛点是如何快速诊断错误,以便程序员修复缺陷,提高系统的健壮性。但是由于无线通信等传输瓶颈,无法传输整个内存映像,或者即使有内存映像也无法准确定位问题。自动驾驶企业难以快速优化系统,带来安全隐患。因为Watcher可以判断故障根源,避免离线分析或静态分析的多重问题,这些痛点都会被Watcher解决。根据2017年的数据,软件故障每年造成的经济损失超过1.7万亿美元,每个程序员平均每年花在程序调试上的时间超过1500小时。无侵入式部署,多线程故障精准自动复现,秒级自动错误原因分析,Watcher带来了生产环境软件故障分析的曙光,可能有百亿美金的市场?论文链接:https://people.umass.edu/tongping/pubs/Watcher_OOPSLA20.pdf