By Jakob Engblom
One very important property of a virtual platform like Simics is its speed of execution. Without sufficient execution speed, a virtual platform is not very useful – users want to have results in reasonable time. Raw simulation speed (getting as many target instructions as possible simulated each second) is important, and Simics is certainly pretty good at that. It is not necessarily the case that the best way to get a job done faster is to process instructions faster. Sometimes, working smarter rather than harder is possible.
Typically, working smarter means doing less to achieve the same goal. If the simulator needs to do perform less work, the task will complete the task in less time.
One way of avoiding work is to do something only once, and reuse the result many times. In Simics, this is supported by checkpointing. For example, saving the state of a booted target to avoid having to redo the boot each time a target is put to use. A previous blog post discusses checkpointing in more detail.
It is worth pointing out that a checkpoint can be prepared by one person and used by many. This can be used to implement a nightly boot workflow, where a platform team configures and boots a standard setup for all developers to use. In this way, a complex target is booted only once for an entire project, rather than once per individual developer.
We can also use simulator backdoors to speed up certain tasks.