2018年,Simics 产品市场推广著名人物 Jakob Engblom 对 Intel Simics 产品首席架构师 Bengt Werner 进行了采访。
Simics 作为一款商业产品即将迎来其二十周年纪念。在本篇博客文章中,我们回顾一下 Simics 走向商业化之前的故事。该产品于1998年6月下旬正式发布。而在此时,其代码早已作为瑞典计算机科学研究所(SICS)一个研究项目的一部分,开发了整整七年之久。最早的代码可追溯至1991年。我向 Bengt Werner 提出了一些问题,他正是最初参与开发 Simics 项目的成员之一,希望了解当初的计划究竟是什么,以及后续又是如何发展的。
JE:您是如何参与到 Simics 项目的?
BW:我于1992年加入 SICS,此前已在爱立信(Ericsson)的一家研发公司工作了三年,并拥有隆德工学院(LTH)的计算机工程硕士学位。当时 SICS 正在研究大规模并行计算机系统,并提出了一种名为 COMA(Cache-Only Memory Architecture,仅缓存内存架构)的新构想。我的任务是构建一个 COMA 原型。在办公室的另一张桌子上,Peter Magnusson 正在开发一个能够模拟多处理器系统的仿真器,后来它被命名为 Simics。
JE:这个研究项目具体是关于什么的?
BW:COMA 的目标是让大规模并行计算机更加高效,核心思路是在将处理器数量扩展到数千个节点时,仍能确保缓存有效运作。该项目涉及的问题范围很广,从处理器缓存的设计,到操作系统(OS)和应用程序等软件会受到怎样的影响。所考虑的架构非常激进,需要探索的设计空间极为庞大。而仿真是当时唯一可行的方式来回答这些问题。
JE:所以 Simics 就这样应运而生了吧?
BW:建模与仿真在我的教育背景中占有重要地位,因此我惊讶于工业界对此方法的应用竟如此之少。但在 SICS,使用仿真是理所当然的事。为了研究缓存效应,团队此前开发了一种应用追踪方案,但这种方法无法考察操作系统调度应用程序的方式,也无法分析操作系统内部执行的所有代码。因此,我们希望构建一个能够运行完整操作系统代码的多处理器仿真器。开发这样的仿真器本身就是一个重要的研究课题,很快我们就开始寻找其他潜在用户。
JE:你们找到了哪些用户?他们有什么需求?
BW:尽管我们在与工业界的研究合作中最初将 Simics 定位为一种缓存分析工具,但人们很快发现,这类工具在软件开发过程中也非常有用,尤其是那些与硬件直接交互的部分。然而,企业无法长期依赖由研究机构团队开发和维护的工具。这成为1998年成立公司、将 Simics 商业化的重要推动力。
JE:我们在早期 Simics 的市场宣传材料中经常使用那张图的各种版本------即便到了今天,这张图依然很好地描述了我们在英特尔(Intel)所做的许多工作。这确实是一个颇具前瞻性的理念(尽管在 Simics 出现之前,功能仿真已经存在,并曾用于挽救一些项目)。
当时还有哪些其他项目?它们的理念又是什么样的?
BW:请注意,我们现在讨论的是1998年之前的 SICS 时期,"当时"并不是指2002年。
当仿真本身成为研究主题后,我们的关注点发生了变化。重点不仅在于仿真器的速度,还包括通用性和功能特性。我们开始与其他仿真项目进行比较,引用各种基准测试的速度数据,以及能够运行哪些软件。其中与 Simics 最为接近的是斯坦福大学的 SimOS 项目。两者都属于所谓的"全系统仿真器",不仅能运行应用程序,还能运行完整的操作系统和驱动程序代码。1998年,当我们发表论文《SimICS/sun4m:一台虚拟工作站》时,我们成为首个公开宣布成功启动未经修改的商业操作系统的仿真器团队。
JE:关于1998年的这项成就,可参阅上一篇博客文章《在风河® Simics® 虚拟平台上运行大型软件:过去与现在》!
值得一提的是,论文标题中仿真器的名字写作 "SimICS",最后三个字母大写。这是最初的名称,意为 "SICS 开发的仿真器(Simulator from SICS)"。当 Simics 走向商业化并切断与 SICS 的联系后,产品名称才改为常规拼写的 "Simics"。
稍微换个话题......当我本人在2002年加入 Virtutech 时,我记得最初使用的是 Simics 1.2 版本,随后很快推出了 1.4 和 1.6 版本。在为本系列博客回溯早期历史的过程中,我发现从项目启动到发布 1.0 版本其实经历了相当长的时间......这是为什么呢?
BW:Simics 从一开始就有非常高的目标。其中一个体现就是,我们希望 1.0 版本是真正"完整"的。这意味着它必须包含一长串在1998年尚未实现的功能。因此,在 Simics 1.0 最终于2001年正式发布之前,我们先向客户提供了多个定制化版本,并开展了多次 Beta 测试计划。
JE:早期有哪些比较重要的功能?
BW:速度可能是最重要的功能。用户绝不可能接受花上几天甚至几小时才能启动操作系统,而 Simics 的性能足以避免这种情况。更高的速度也加快了模型开发的节奏,因为我们需要大量测试运行。
此外,还有一些几乎是不可或缺的功能。例如:用于与仿真器交互的命令行界面、用于扩展和自动化交互的编程接口,以及便于添加新模型的架构------这三项功能 Simics 在早期就已着手开发。
确定性(Determinism)对我们客户和我们自身都很重要:客户可以更容易地复现问题,而我们也因此大幅减少了调试和测试的工作量。检查点(Checkpointing)是另一个有趣的功能,对客户和我们都有帮助。客户可以跳过重复的仿真部分;而对我们来说,它迫使我们明确定义模型的核心状态。
更抽象地说,早期一个非常重要的"功能"其实是工程师与 Simics 用户之间的紧密联系------这确保了我们始终专注于开发真正需要的功能。