Simics 4.8 is Here

Simics 4.8 is now generally available for old and new users to enjoy. I will be doing a
series of blog posts going into the details on what is new and improved in this
release. Simics 4.8 represents a significant improvement in the Simics user
interface and collaboration features, as well as tweaks to the simulator
performance, debugger, and modeling workflow, so there  is quite a bit to talk about. We start off with an overview of the news.

The most visible new functions in Simics 4.8 are found in the Eclipse user
interface. We have added several new views and features to help users gain insight into
their simulations, debug more efficiently, ease device modeling, and communicate within and between teams. We have also added some significant new performance
technologies and more collaboration features to Simics checkpoints.


The System
provides a GUI display of the hierarchy of components and devices that make
up a Simics target system, making it much easier to understand how a system is
constructed. It lets you inspect the properties of all parts of the system, and
also to make changes to the setup including tasks like adding in new PCI cards
or connecting and disconnecting network cables. The Device Register view provides
information on the bit fields in a device register, making it easier to find
the value of flags and other bit fields. I will discuss the details of the System Editor in an upcoming blog post.

Eclipse system editor overview 4.8.5


Modeling support in Eclipse has been extended in Simics 4.8,
in particular with the ability to run device unit tests and to browse
example source code. In the screenshot below, we see the Test Runner in the upper-right hand corner, and the Sample Device browser below it. The
Eclipse “New Sample Device” wizard creates new devices (and other modules)
based on the examples provided with Simics (or just an empty skeleton if that
is all you need). The Sample Device view lets you look at the example code
without necessarily creating a new device model in your own workspace, which is
quite convenient.

Modeling perspective

Syntax highlighting for Simics DML is provided by the Simics
Eclipse plugins. If you want syntax highlighting for Python code, it is simple
to add a Python development environment to Eclipse. The popular PyDev
environment works just fine with Simics, as would be expected from well-behaved
Eclipse plugins.


Building on TCF-based debugger,
we have added several new views to the Simics Eclipse UI to help debug and
analyze a system more efficiently. 

The most innovative view is the Stop Log, where the debugger notes where the execution has stopped
and the time since the last stop. We have noted that it is quite easy to get
lost in time and space when using reverse execution. As you move back and forth
in time, just where are you and how did you get where you are? While the
timeline view tells you where you are, the stop log tells you how you got
there. Here is a simple example from a reverse debug session:

Stop log view

Note how we first run the execution forwards for 177
thousand steps (instructions), and then turn around and reverse back some 79
thousand steps to hit a breakpoint. After that, we finished up by doing some
system-level single steps forwards and backwards. In this way, it is very easy
to tell if you hit a breakpoint close in time, or if you misunderstood the
situation and suddenly jumped way back in the execution history of the system. It
makes it much easier to understand just where in time you are, and the debug
actions that got you here.

The Symbol Browser
is a TCF
feature that was added to Simics 4.8 (and which is also rolling out in the
Simics 4.6 Eclipse debugger). It makes it possible to search the debug
information loaded for a target system to find particular symbols, variables,
and functions. It provides an efficient workflow for setting breakpoints on
functions and variable accesses, as well as a way to understand the symbols
loaded and where they are located. This helps in working out low-level debug
scenarios where you might have to manually relocate symbols or understand where
something is loaded or mapped.

Symbol browser


The Simics checkpoint system now includes the ability to
include a recording of an execution as part of a checkpoint. This means that
rather than just communicating the instantaneous state of the system at a single point in
time, checkpoints can now communicate the system execution from a period of time. Checkpoints in Simics
4.8 can thus be considered like a movie recording of the execution of a system, making it very
simple to show team members and others just what has been observed in a Simics

Users can also add comments to the simulation as it
executes, attaching little notes of information to certain points in time. These
comments are stored in checkpoints and provide a persistent log of major
operations on the system, as defined by the user.

Collaboration views simple overview

The collaboration features of Simics 4.8 will be explored in more depth in a future blog post.


There are some new performance technologies debuting in
Simics 4.8.

First of all, we have automatic hypersimulation.
Hypersimulation is the ability of Simics to run very quickly forward when
nothing is happening in the virtual system. Essentially, since Simics has total
control over the target, when the target software is idling, it can skip ahead
to the next interrupt, device action, or timer event in the simulated system.
Simics has always exploited simple waiting patterns like a branch-to-self
instruction, the x86 HLT instruction, and a Power Architecture processor going
into nap mode. With Simics 4.8, it can also analyze the instruction stream and
automatically detect loops that do nothing, automatically turning them into
hypersimulation. This ability catches most typical OS idle loops, and brings
marked speed increases to many target systems that used to idle poorly.

A second technology is the use of the host MMU to simulate
the target MMU, which reduces the overhead of MMU simulation for certain types
of target code. This has significant effect on the performance of code that
makes a lot of memory accesses. A third technology is the offloading of the
Simics ISS JIT engine to a second host core, reducing the performance jitter
resulting from the JIT compiler alternating with the main execution thread of
an ISS.

Taken together, Simics 4.8 keeps advancing the performance
of Simics, keeping Simics at the forefront of fast virtual platform instruction
set simulation.