在一些最大的技术公司的支持下,一个名为RISC-V的重大项目寻求促进计算机芯片的开源设计,提供开放芯片设计的可能性,超越少数主导该领域的公司。随着该项目走向正式发布,普林斯顿大学的研究人员发现了RISC-V指令规范中的一系列错误,这些错误现在正在导致新系统的改变。
研究人员测试了一种用于分析计算机内存使用的技术,发现在RISC-V处理器架构的变体中,存储和从内存中检索信息的顺序不正确,导致了100多个错误。研究人员警告说,如果不加以纠正,这些问题可能会导致在RISC-V芯片上运行的软件出现错误。RISC-V基金会的官员说,这些错误不会影响大多数版本的RISC-V,但会对更高性能的系统造成问题。
“不正确的内存访问顺序可能会导致软件使用错误的值进行计算,”休·特朗布尔·亚当斯(Hugh Trumbull Adams) 35岁的普林斯顿计算机科学教授玛格丽特·马尔托诺西(Margaret Martonosi)说,她是普林斯顿团队的负责人,该团队还包括博士生卡罗琳·特里佩尔(Caroline Trippel)和亚廷·马纳卡尔(Yatin Manerkar)。这些反过来会导致难以调试的软件错误,这些错误要么导致软件崩溃,要么容易受到安全漏洞的攻击。RISC-V处理器通常被设想为现实世界物理设备(即物联网设备)的控制处理器,这些错误可能会导致不可靠性或安全漏洞,影响系统的整体安全。”
RISC-V基金会主席Krste Asanović对研究人员的贡献表示欢迎。他说,RISC-V基金会已经成立了一个工作小组,由马尔托诺西的前研究生和合作者丹尼尔·勒斯蒂格领导,来解决记忆排序问题。Asanović是加州大学伯克利分校电子工程和计算机科学的教授,他说RISC-V项目正在寻找来自设计社区的输入,以“填补空白和漏洞,并得到一个每个人都能同意的规格。”
“我们的目标是在2017年批准该规范,”他说。“内存模型是其中的一部分。”
拉斯蒂格是马尔托诺西最近一篇论文的合著者,现在是英伟达的一名研究科学家。他说,改进RISC-V存储模型的工作正在进行中。
他说:“RISC-V很幸运,能够回顾几十年的行业和学术经验。”“它将能够从以前的尝试中吸取所有的见解和错误。”
RISC-V项目实质上提供了指导RISC-V处理器和软件应用的硬件和软件设计的规范。这些规范通常被称为指令集体系结构(Instruction Set Architecture),描述了处理器的最基本功能,包括算法和逻辑运算,以及程序使用计算机内存的方式。硬件设计师在构建新芯片时使用指令集,计算机程序员在编写新软件时依赖于它。
今天使用的绝大多数计算机,包括数以百万计的个人电脑和苹果系统,使用的微处理器是基于芯片制造巨头英特尔或ARM(例如,英特尔的指令集通常被称为x86)创建的。相比之下,RISC-V指令集从一开始就是开源的。它最初是在加州大学伯克利分校开发的,当时的想法是任何设计师都可以使用指令集来创建芯片,以及将软件应用程序从高级编程语言翻译出来,以便在上面运行的软件编译器。该项目现在由RISC-V基金会运营,该基金会的成员包括许多大学、非营利组织和顶级技术公司,包括谷歌、IBM、微软、NVIDIA和Oracle。
马尔托诺西的团队在测试他们的新系统时发现了这些问题,该系统检查跨任何计算机架构的内存操作。这个被称为TriCheck的系统允许设计师和其他对设计感兴趣的人在内存排序错误成为问题之前检测它们。TriCheck这个名字来源于计算的三个层次:创建从网络浏览器到文字处理器等现代应用程序的高级程序;作为机器基本语言的指令集体系结构;而底层的硬件实现,是专门为执行指令集而设计的微处理器。
马尔托诺西说:“我们称它为TriCheck,因为它确保这三个级别的内存排序保证是一致的。”
在一个纸在4月10日的ACM国际编程语言和操作系统架构支持会议上,研究人员介绍了TriCheck系统。论文还详细介绍了TriCheck如何识别RISC-V指令集的高性能硬件实现中潜在的内存问题。(在该体系结构的其他实现中没有发现类似的错误。)作者描述了他们如何使用C编程语言编写的高级程序来运行RISC-V指令集的测试。在一个特定的符合risc - v的设计中,TriCheck在1701个测试程序中发现了144个错误程序。
内存排序的挑战源于现代计算机的复杂性。随着设计人员从计算机系统中榨取更多的性能,他们依赖于共享计算机内存相同部分的许多并发操作。这种并行的、共享内存的操作在速度和功耗方面都非常高效,但它对计算机交错和正确排序内存使用的能力提出了很高的要求。例如,如果几个进程正在使用同一段内存,计算机需要确保操作以正确的顺序应用到内存,这可能并不总是它们从不同并发运行的处理器到达的顺序。
三个计算层(机器层、编译器和高级编程语言)中的任何一个层的细微变化都可能对其他层产生意想不到的影响。这三者必须无缝地协同工作,以确保内存错误不会突然出现。TriCheck的一个优点是,它允许其中一层中的专家避免与其他两层的冲突,即使他们在这两层中没有专业知识。
“如果我用C语言写一个程序,它会对内存排序做出一些假设,”马尔托诺西说。随后,指令集体系结构定义了一套不同的内存排序规则。我们需要检查高级程序的假设是否得到底层指令集和处理器设计的准确支持。”
然而,研究人员表示,TriCheck最大的优点是它能让设计师对内存使用有更广泛的了解。虽然设计者们对这个角度已经很感兴趣了,但是以前对全面分析内存操作的尝试都太慢了,不太实际。
TriCheck能够通过使用内存排序规则的简洁形式规范,即公理,来有效地检查内存排序。对于一个给定的程序、编译器、指令集和硬件实现,TriCheck可以从这些公理中列举出许多排序可能性,然后检查错误。通过将内存排序可能性表示为连通图,TriCheck可以通过在图中寻找循环来识别潜在的错误。这些检查可以在现代高性能计算机上非常高效地完成,而TriCheck的速度使它能够探索比以前更大、更复杂的设计。
TriCheck项目这是马尔托诺西团队四年来开发检查系统的成果跨越各种硬件、内存和软件层。最近的一个项目,PipeCheck,旨在让开发物理微芯片的团队改变他们的设计,以避免内存排序问题。通常情况下,芯片设计者会在开发的最后阶段对芯片的正确性进行详细的验证。但在设计后期解决这些问题的成本可能很高。PipeCheck允许设计人员在设计管道中更早地检查内存使用情况,并在这个成本更低的阶段更快地纠正错误。
“PipeCheck有助于确定中央处理单元是否遵守其对内存使用的承诺,”Martonosi说。
拉斯廷格曾参与PipeCheck和TriCheck项目,并在2015年获得博士学位后加入NVIDIA。现在在NVIDIA工作的Lustig说,他很欣赏这种仔细分析设计漏洞的能力。NVIDIA生产专门用于计算机图形处理的处理器。
Lustig说:“在构建新架构时,像PipeCheck和TriCheck这样的工具非常有用,特别是对于真正尝试挑战极限的设计。”他补充说,识别漏洞可能很困难,但即使它们被发现了,确保解决方案不会在系统的其他领域造成问题也会带来新的挑战。“TriCheck通过验证软件、编译器、体系结构和微体系结构,将所有的部分放在一个包中。”
除了马尔托诺西和拉斯蒂格,该论文的作者还包括:普林斯顿大学的卡罗琳•特里佩尔和亚廷•马纳卡尔;以及NVIDIA的Michael Pellauer。这项工作的部分支持是由国家科学基金会和CFAR提供的,CFAR是STARnet的六个中心之一,STARnet是由微电子高级研究公司和国防高级研究计划局赞助的半导体研究公司项目。
马尔托诺西说,TriCheck项目的目标是在bug给用户造成问题之前阻止它们。
“TriCheck是我们验证正确的总体目标中的重要一步内存订单全面跨越复杂的硬件和软件系统。”“考虑到包括金融、汽车和工业控制系统在内的世界各地对计算机系统的依赖日益增加,朝着可验证的正确操作方向发展对计算机系统的可靠性和安全性至关重要。”
了下:工业自动化
