Networked systems is one of the primary application areas for Simics. Simics can run many machines inside a single Simics simulation, and apply all Simics features to the system, not just to a single machine inside the system. This is something that Dan Poirot from Real-Time Innovations, RTI, has made quite extensive use of recently. It is a pretty cool use-case for Simics, so we arranged to interview Dan about his use of Simics.
Jakob Engblom: We start with the basics. Can you introduce yourself?
Daniel Poirot: Hello! My name is Daniel Poirot. I am the RTI Senior Field Applications Engineer covering the Southeast US. I came to RTI following 13 years selling development tools in the embedded industry. Prior to that I worked for 15 years as a developer in the NASA Johnson Space Center community.
JE: That's a very impressive bio, I only have about 14 years myself in the embedded space.
JE: So, what does RTI do?
DP: Realtime Innovations sells tools and services supporting and extending the Object Modeling Group (OMG) Data Distribution Service (DDS) standard. RTI DDS accelerates the integration of real-time, mobile and embedded applications with each other and with enterprise and legacy applications. RTI DDS provides the developer a data-centric, dynamically configured, fully anonymous, publish/subscribe system with many powerful Qualities of Service (QoS). Applications can be written needing very little knowledge of the deployed system ahead of time.
JE: How do you use Simics?
DP: I have used Simics at RTI as well as at positions with two earlier companies. In each case, Simics has provided a binary compatible representation of networks of different CPU types running different target operating systems! Simics is also a great way to prototype a system of systems or service oriented architecture. Additionally, Simics gives RTI a robust platform for testing our products during development.
JE: So you simulate multiple target machines in a single Simics session, right?
DP: Yes indeed, including heterogeneous systems. I have used Wind River VxWorks and Wind River Linux as well as ‘kernel.org’ Linux on a number of simulated machines at the same time. I started with a single Power Architecture target and have progressed to different Power Architecture and Intel Architecture targets.
Simics offers the developer (using Windows or Linux on their PC) access to other chips (including Intel, Power, MIPS, ARM) running other operating systems (VxWorks, VxWorks 653, WR Linux, and others).
RTI offers a common API (OMG DDS) and interoperable network wire protocol (OMG RTPS) allowing applications written in different languages (C, C++, Java, .NET, Ada) to communicate seamlessly on these targets.
If we put this together, by using Simics, we can demonstrate and test these combinations on a single PC, no need to cart around a case of different development boards.
Here is an example screenshot (click to enlarge):
We see lots and lots of windows in a system where we are simulating multiple boards for use with Windriver Workbench.
‘Simics Control’ shows the configuration of two dual-core p2020 RDB boards, ADAM and BERTIL. Their serial consoles are on the left displaying typical VxWorks 6.8 operations.
Also included is CESAR, a p2020 DS board. It’s serial console is at the bottom left. It is showing WR Linux 4.0 commands.
The ‘Simics Command Line’ window is used to configure the running system. Here we enter commands such as ‘connect-real-network-host’. Errors are logged here as well results from as my successful configuration.
To the far right we see the ‘Advanced Device Development’ perspective of Windriver Workbench configured with Target Servers for the simulated boards.
The ‘Host Shell’s at the bottom of the screen are attached to the Target Servers for ADAM and BERTIL. Here we see similar but different VxWorks output.
In a typical development use case, RTI DDS may be loaded as a series of shared libraries and the target application.
Each of the VxWorks windows shows the RTI DDS libraries, libnddscore, libnddsc and libnddscpp, as well as an application, either ‘rtiddsping’ or ‘rtiddsspy’.These Ping and Spy applications are used initially to confirm proper network connectivity.
JE: Yes, using Simics like that can simplify both testing and demonstration of solutions. The final product obviously has to run a specific physical piece of hardware, but a large part of the development can be done in a virtual world with much more convenience, as you noticed.
JE: What kinds of network topologies are involved?
DP: RTI DDS supports a wide variety of standard networking protocols as well as shared memory and ‘disadvantaged or intermittent’ links. RTI DDS applications can communicate using shared memory, UDP, TCP, DTLS, TLS, IPv4 and IPv6 without having to program directly to those protocols. Using Simics we can create networks of subnets and show how applications communicate.
JE: So,you are not only using multiple machines, but also multiple network links inside of Simics?
DP: High speed, reliable communications across networks is fundamental to the RTI DDS product. It has be a challenge to setup a good demonstration of several networks. I always seem to need ‘n+1’ computers! With Simics we can virtualize the machines needed. The target operating systems are configured as they would on ‘real’ hardware. Testing and demonstration of a system of systems or service oriented architecture can actually be realized with different networks and different network IP numbers – just like in the ‘real’ world.
JE: Virtual networks are convenient, I must say. The fact that you can always add another machine without having to scavenge for lab hardware is something we have heard from many places as being a very valuable property of a virtual system compared to a physical one.
JE: Was there anything else in Simics that helped you get your tests done?
DP: The high fidelity of the Simics targets allows us to use standard development tools such as Windriver Workbench. We are also able to use RTI networking tools such as Analyzer and Monitor to visualize DDS information. Open source tools such as Wireshark can even be used on the simulated networks.
JE: So you also connected the virtual machines to the outside physical network?
DP: Yes. I was pleased to see that Simics uses popular network simulation tools. We use OpenVPN at RTI so adding additional virtual interfaces using TAP-Win32 is very straightforward for me. The tools are all scripted so the details only need to be set once.
JE: Thanks for your time! This has been very interesting, seeing how Simics is applied to this kind of distributed networked system.
Update, Dec 14, 2011.
Below, you can see a video of another use of RTI DDS on Simics. We are running the RTI DDS "squares" demo on an MPC8548 target running VxWorks. We are using Simics 4.6 on a Linux host. Simics is running in real-time-mode (slowed down so that the simulated target does not run away from host time). The target is connected to the host over a real-network connection, and runs the "squares" demo from the DDS demo suite. The visualization is on the host, based on computed messages from the MPC8548 code running on Simics. If we did not use real-time mode, it should just flicker as the target would be feeding updates far faster than a physical target would, since the code on the target is using "sleep" to produce updates at a reasonable rate.