由于syscall仿真要容易得多,所以我想知道在运行userland程序时使用完整的系统仿真有什么好处。
换句话说,在整个系统中建模了哪些有趣的方面,而不是syscall仿真模式,它们什么时候有意义?
在docs at:benchmarks中提到完整的系统是
实际情况:您需要实际的Linux线程调度程序来调度您的线程
这是唯一的优势,还是对正在优化应用程序或研究微体系结构的用户来说还有什么其他优势?
我还怀疑MMU仿真是另一个重要的特性,只有在完全系统模式下才能正确建模,并且可能影响程序的性能。
发布于 2018-06-21 07:38:53
SE的优势:
SE的缺点:
所以我的建议是:
发布于 2019-05-30 02:44:53
最好采用完整的系统模式(当可能使用时)。使用它是有好处的,主要是在仿真中保真度,这在系统调用仿真模式下是不可能的。(根据研究人员正在进行的研究,与应用程序的内核交互可能很重要。)此外,用户不需要担心实现(或调试)系统调用实现。
尽管如此,在适当的条件下,系统调用仿真模式可能是有用的。运行应用程序代码更快,因为后台没有运行内核。如果您想要完全减轻系统噪音,也没有系统噪音。可以说,引导一个新的设备模型也更容易。您可以在没有驱动程序支持的情况下对模型进行处理,并通过假接口实现魔术。(这就省去了你必须完美地模拟裸金属界面,或者编写你自己的设备驱动程序。)
您对动态链接和多线程支持的评论是相关的。如果动态链接是固定的,您应该能够使用您的系统的线程库,并且可以完全忘记与m5threads的链接。在模拟器中已经有一段时间了(系统调用使它正常工作所必需的)。
但是,对线程实现有一个警告。您需要在模拟开始时预先分配足够的线程上下文(通过调用-n脚本上的se.py选项)。
详细说明,在后台没有运行操作系统来调度处理器上的线程。(我在这里非常宽松地使用线程和处理器这个术语。)为了避免调度问题,您必须预先分配足够的处理器,以便能够在调用克隆/执行时创建线程。有一个限制,就是您永远不能拥有比处理器更多的线程(不像真正的系统那样,操作系统可以随意安排线程)。
配置脚本可能不会表现出研究者希望它们对多线程工作负载的行为。研究人员需要验证缓存配置是否正确,并且它们是否共享某些缓存级别,就像真正的机器所做的那样。如果应用程序多次调用克隆/execve,则可能无法使生成的配置实际运行。
你上次关于加速器建模的说法是不正确的。AMD GFX8模型确实使用了系统调用仿真模式。(此外,我们开发了NIC模型,但从未公开发布。)它涉及创建一个假驱动程序,并通过与实际驱动程序相同的ioctl接口对其进行操作。Linux将一切都当作文件对待,因此驱动程序是通过开放的系统调用接口打开的,您可以在那里捕获它。您可能还需要做其他一些事情(比如配置中的map mmio范围),但是驱动程序接口是主要的部分。应用程序与驱动程序交互,驱动程序与加速器模型交互。
https://stackoverflow.com/questions/48986597
复制相似问题