This section describes the Probes Framework in Simics.
Simics' Probes framework provides a generic mechanism for measuring counters and other statistics in Simics. The probe measurement points are distributed across the entire simulated system.
Probes can be related to target processors, device models, the host system (where Simics runs), instrumentation tools etc. There are also probes which present sums of other probes in the system on cell or global level.
Currently, most probes have been added for the purpose of measuring and understanding the performance of Simics. Additional probes could focus more on the target hardware and software aspects.
A probe offers a simple way to extract the value, and also contains type information and formatting hints on the probe itself to present the value of the probe, in an uniform and user-readable format.
A probe is identified by a probe name, which is a string with a
hierarchical namespaces separated with dots (.
). For
example, cpu.cycles
would be found in each processor model
in the system and represents how many cycles that has elapsed on the
specific processor. The cell.cycles
probes are related to the
cell objects and this returns the sum of executed cycles of
processors which located under the specific cell.
Finally, sim.cycles
is not related to any object but form a
singelton sum of all the processor's cycles elapsed.
Probes can also be derived from other probes, offering a some
calculated metric. For example sim.slowdown
is calculated
as the fraction between sim.time.virtual
and sim.time.wallclock
, providing an indication how fast
the virtual time elapsed compared to the real wallclock time on the
system which Simics runs on.
Simics itself is aware of all probes that currently exist in the system, allowing commands to list the probes or read out their values from Simics command line interface.
Probes may either be explicitly implemented in the various
Simics objects, or can be implicitly created by the probes
framework itself. For example, Simics may detect that a new
object is created that implements the cycle
interface
and then automatically create probes for accessing the new object's
cycle information.