2014年8月6日 西米奇

本质上,所有的模型都是错误的,但有些是有用的

作者:Daniel Aarno

D.Aarno


这是我吃过苦头才学会的。大约十年前,我坐在5台电脑占据了我很小的学生宿舍的大部分空间。我当时正在为我的硕士论文寻找一个项目,目前正在考虑一家名为Virtutech的公司提出的创建Power Mac G3模型的建议。我记得我在思考如何在逻辑级别上模拟处理器的位和互连,类似于可合成的SystemC的样子。直到后来我才意识到这种方法对于构建一个可以用于系统级软件开发的模型是多么的错误。更令人担忧的是,有多少人也采用了我最初的、错误的方法。

最终我没有继续这个项目,而是继续写我的论文,并在哈佛大学继续攻读博士学位自动系统中心(CAS),专注于人机协作。在中科院,我们的座右铭是“那些不能模拟的人,那些能做的人”——尝试所有从未离开MATLAB的机器人研究。我在这里学到的教训是,同时调试软件和硬件是极其困难的。我们已经习惯了以pc的形式拥有稳定的硬件,所以我们总是希望硬件能够工作。在实验室里的机器人身上,情况并非总是如此。通常情况下,花费数小时或数天的时间调试软件,最终只能通过更换有缺陷的传感器或修复糟糕的焊接来解决问题。

我在CAS的经验使我确信,您确实希望在受控环境中进行尽可能多的开发和测试,比如模拟,然后只在实际系统上进行最终测试和调优。最后一点也是很重要的一点,模拟器并不是真正事物的替代品;这是一个强大的工具,可以帮助你更有效地构建真实的东西。

作为我在中科院研究的一部分,我在研究交流计划在哥本哈根,四月的一个沉闷的早晨,窗外下着湿漉漉的雪,Virtutech向我提供了一个开发人员的职位,后来我接受了这个职位。当我加入Virtutech时,我发现naïve和我之前关于如何模拟计算机系统以运行实际软件的思考是完全无用的。我很惊讶地了解到团队是如何解决这个问题的,以及在系统上运行的软件不知道的情况下,您可以“欺骗”多少。在即将出版的Simics书中,我希望分享我在以一种易于访问的格式为系统软件开发构建模型方面的经验。

我学到的第一个教训是,您不应该试图建模硬件,而是您需要建模的硬件/软件接口。这意味着寄存器和中断等抽象比总线和位重要得多。这包含在您应该建模的格言中什么硬件则不然如何它。毕竟,从软件的角度来看,重要的是体系结构,而不是体系结构的特定实现。在即将出版的书中,使用虚拟平台进行软件和系统开发我们将讨论如何确定你需要建模什么,以及如何在正确的抽象级别上建模。

为了更好地理解选择正确抽象层次的重要性,请考虑与物理学的类比。在现代物理学中有四个主要的“抽象层次”或模型:经典(牛顿)力学、相对论力学、量子力学和量子场论。

经典力学非常擅长处理日常情况;也就是在地球上发现的以远低于光速运动的物体。然而,一旦一个物体开始以接近光速的速度移动,或者它们开始接近原子的大小,就需要其他模型。试图用量子场理论来计算行星的运动变得难以处理,因为所选的模型过于详细。类似地,试图用相对论甚至经典力学来计算亚原子粒子的运动是不可能的,因为模型太抽象了。

这个类比也适用于虚拟平台模型。如果抽象级别太低,模型就有可能成为性能瓶颈,并将整个模拟速度降低到不可接受的速度,更不用说创建模型所需的时间增加了。另一方面,如果抽象级别太高,可能不可能执行所有需要的任务。

在正确的抽象级别上创建的模型可以比实际的东西多得多。这些模型有助于软件开发人员提高他们的生产力,因为它们提供了无与伦比的检查、配置和注入功能,以及优于传统基于硬件的解决方案的调试工具。例如,在设备模型中提供良好的日志消息这样一件简单的事情可以极大地帮助设备驱动程序开发人员,因为开发人员现在可以访问设备视图中正在发生的事情。

一个让我信服的有趣案例是,我们在Simics模型上启动了客户的操作系统。Simics发出一条警告消息,表示一个64 MB的页面被强制对齐到下一个更低的64 MB边界。实际上,试图将一个64 MB的页面放在0xe00000处的MMU映射实际上将其放在0xec000000处。该体系结构的规范明确指出,如果一个MMU页面没有按照自己的大小对齐,那么映射将隐式强制对齐,处理器将继续执行。Simics与真正的处理器做同样的事情,代码继续运行,但是除此之外,Simics还发出了警告(因为这可能是一个错误)。

事实上,这是程序员的一个错误。目的是在0xefe00000处只映射1 MB,但效果是在地址下面映射62 MB,为操作系统保留它。这个bug已经潜伏了几年,直到用户最终创建了一些任务,使得操作系统试图使用错误映射的区域来获取用户数据。访问失败,导致任务崩溃,并向操作系统供应商报告错误。这显示了在模型中提供良好日志消息的价值。即使代码看起来可以在硬件上工作,它也可能有潜在的问题,即使硬件没有抱怨,模型也会发现这些问题。

使用虚拟平台的软件和系统开发将深入讨论这些以及虚拟平台开发中经常遇到的许多其他问题。这本书还将解决一些常见的错误和误解,这些错误和误解令人惊讶地持续存在。提供很好地理解如何创建设备模型,在书中一个章节的将提供一个具体的建模的例子,一个DMA控制器的模型构建按部就班,从规范,考虑几个权衡和设计决策。然后将完成的模型集成到一个虚拟平台中,并使用定制的Linux设备驱动程序进行测试,以便将所有内容整合在一起。

我已经多次看到在虚拟平台上进行软件和系统开发所能获得的好处,因此我确信这是在硅之前和硅之后进行开发的最佳方式。记住,虚拟平台不是真实的东西;这是帮助你建立最终使你成功的东西。因此,总是需要在实际系统上进行最终的测试和调优。考虑到这一点,我现在准备将我的旧座右铭更新为:21、那些不会失败的人,那些会做的人会先模拟。

请了解更多关于Simics的信息点击这里

Daniel Aarno是英特尔公司的工程经理,他领导一个团队致力于Simics全系统仿真产品。Daniel拥有电气工程硕士学位和计算机科学执照学位。
这里表达的观点和观点是作者的,不一定是英特尔公司风河系统有限公司,或子公司。

* George E. P. Box, Norman R. Draper。“经验模型构建与响应面”,1987。ISBN: 0471810339

以前的风河加入汽车互联联盟
下一个嵌入式开发的转型时间-第4部分