Simics has a long history of university usage. Simics grew out of research at the Swedish Institute of Computer Science (SiCS, which is part of the root of the name of Simics), and some universities started using Simics even before version 1.0 was out! When I joined the company in 2002 (it was Virtutech at the time), Simics had a strong presence in the academic sector. Today, Simics licenses are available for free to qualified academia through the Wind River University program (http://www.windriver.com/universities/). The value of a virtual platform is not been lost on the smart people working in universities across the globe, and we see a constant pull of Simics into many different application areas.
Simics is being used for a variety of applications in universities.
The oldest Simics usage is in computer architecture research, where Simics lets researchers run complete real software stacks on top of simulations of future computer architectures. In particular, Simics has been used to study processor core architecture and memory systems. There are some ready-to-use research frameworks available for computer architecture, including:
- The University of Wisconsin at Madison has developed the Multifacet GEMS (Generic Execution-driven Multiprocessor Simulator).
- Carnegie-Mellon University and EPFL has developed SimFlex.
- The University of Illinois at Urbana-Champaign and the University of Pennsylvania have developed FeS2, a Full-system Execution-driven Simulator for x86.
Computer architecture is a wider area than just processors and caches, and Simics has seen use also in the design and evaluation of various acceleration engines. With Simics, the effect of operating systems and device drivers can be included in the evaluation and design, which makes for much more realistic results.
There are very many computer-architecture related publications with Simics, and citing any particular group here would really be unfair to everyone else. I recommend going to the sites for the frameworks listed to get long lists of publications based on work using these frameworks. On the topic of accelerators, however, I do want to offer a couple of publications: Ortiz et al., A New Offloaded/Onloaded Network Interface for High Performance Communication, Parallel, Distributed and Network-based Processing (PDP) 2009, February 2009. I also did some work on this topic myself last year, experimenting with a simple offload engine in Simics.
Being used in computer architecture research, Simics is also used computer architecture courses. Typically, labs include taking a machine, modifying some aspect of its implementation, and studying the effect of that change on the execution time of benchmark programs. I actually did such a lab myself, when I was taking a graduate-level course in computer architecture. I used Simics to study the cache hit rates of a program under various cache organizations and workload memory footprints, including noting the effect of the TLB on the memory access times.
Operating system courses is another obvious area for Simics. Simics is a natural fit for OS courses, as it offers a stable execution platform where code can be loaded and executed without having to deal with the vagaries of physical boards. Simics makes it very easy to debug kernel code, interrupt handlers, and system calls. I actually once created an OS lab myself, during my short time as an adjunct professor in computer systems at Uppsala University. That course has been running on Simics from 2000 until at least last year at the IT Department at Uppsala University. There are several other long-running courses in this field as well, in particular the CMU OS course has been exported to several other universities. In its setup, students actually transition from the virtual machine to a physical machine, proving that the code developed on Simics work on the real thing too.
- A more detailed discussion on a particular use of Simics for this is found in a 2011 blog post interview with Massimo Violante from the Politecnico di Torino in Italy.
Simics is also used for operating system research, for the same reasons that it is suitable for education. For OS research, it is also useful to use a simulator to simulate additional hardware support or novel hardware features, or novel hardware configurations and computer organizations.
Some example publications from this area are Rossbach et al, TxLinux and MetaTM: Transactional Memory and the Operating System, Communications of the ACM, September 2008 and Jermár, Porting SPARTAN Kernel to the SPARC V9 Architecture, Masters Thesis, Charles University in Prague, Faculty of Mathematics and Physics, Department of Software Engineering, April 2007.
- A blog post interview from 2010 with Tennessee Carmel-Vielleux shows an example of how Simics is used to do research on IMA, Integrated Modular Avionics, at the École de technologie supérieure in Quebec, Canada.
- Another blog post interview from 2010 is with Girish Venkatasubramanian from the University of Florida, USA, who does research on Hypervisors and virtual machines using Simics.
Workload characterization is a field somewhat related to computer architecture. In this field, Simics has been used to run programs and determine the instruction mixes encountered, as well as cache behaviors and profiling the amount of time spent in the OS kernel vs the time spent in user mode. Since Simics provides a full-system platform, papers have tended to focus on topics which are hard to profile on physical hardware.
Publication examples are Uluski, Moffie, and Kaeli, Characterizing antivirus workload execution, Workshop on architectural support for security and anti-virus (WASSA), March 2005, Wright et al., Introspection of a Java Virtual Machine under Simulation, Sun Microsystems Technical Report SMLI TR-2006-159, September 2006, and Bhattacharjee and Martonosi, Characterizing the TLB Behavior of Emerging Parallel Workloads on Chip Multiprocessors, International Conference on Parallel Architectures and Compilation Techniques (PACT-18), September 2009.
In the field of real-time and safety-critical systems, Simics has been used to perform fault injection studies. Fault injection is an obvious fit for a virtual platform, but doing it right requires research into just what kinds of faults are applicable in various systems, and where and how to apply faults to the target.
Some publications using Simics for fault injection include Myhrman and Svärd, Studying Fault Injection in WCDMA Base Station Processors Using Simics Simulator, MSc Thesis, Chalmers University of Technology, May 2005 and Bastien, A Technique for Performing Fault Injection in System Level Simulations for Dependability Assessment, Master's Thesis, University of Virginia, January 2004.
Simics has also been the basis for experiments in hardware-accelerated computer-architecture simulations using FPGAs. In particular, the ProtoFlex project uses FPGAs to offload some parts of the simulation of multiprocessor detailed simulators from software.
Publications on this topic include Chung el al., PROTOFLEX: Towards Scalable, Full-System Multiprocessor Simulations Using FPGAs, ACM Transactions on Reconfigurable Technology and Systems (TRETS), June 2009.
Universities have also proven that using Simics with compute clusters is a viable proposition. For example, in the computer architecture field, each result tends to rely on many simulation runs with different variations of the target hardware. Since each such simulation is independent, they can be run in parallel. I know of universities where each PhD student using Simics can have several hundred simultaneous runs going at any point in time.
One example of running Simics on a cluster or a grid is the Archer infrastructure. If you wonder why you want to make many variant runs, please consult the fundamental and classic paper: Alameldeen and Wood, Variability in Architectural Simulations of Multi-threaded Workloads, HPCA 2003.
There are many hundreds of other academic papers published using Simics, and many other topics than the ones I have touched on above. If you just do a web search for "Simics" and your topic of interest, you can probably find something interesting and useful.
Getting a Simics Academic License
After this discussion on how Simics is and has been used in academia, I want to quickly explain how to obtain an academic Simics license. Simics (as well as other Wind River tools and runtimes, which I definitely recommend that you check out too) is available for qualified universities via an application and approval process. The process starts at http://www.windriver.com/universities/, where you need to review the terms and conditions, as well as print out and fill out the paperwork. You need to get an appropriate signature from an individual with the legal power to sign these agreements. Finally, email the filled-out forms to us at Wind River.
You can help the process if you consider the following for the paperwork:
- Send in the forms as readable PDFs - that makes processing the information much easier.
- Only the pages with signatures need to be printed and scanned.
- If you have to fill in an ECPI form, it has to be signed by someone with authority to sign for the university. It has to be one of a dean, a provost, a representative of the legal department, or a representative of the purchasing department.
On the practical side, it is worth noting that we license Simics via a license server. We do not provide licenses for individual machines. License servers have proven very flexible, as they can be used from any computer within the same network as the license server. As most universities today provide some kind of VPN access to students and faculty, this makes it possible to use Simics in offices, classrooms, compute clusters and student housing.
The use of a license server implies that before you start applying for a license, make sure that you have talked to your IT staff about which machine to use as a license server and how to set it up. Note that you want to get the FlexNet lmhostid, not some other hostid! In detail:
- Please check with your department or university IT staff for an appropriate server to use. Typically, license servers are run on dedicated machines to ensure uptime and reliability. This is the recommended way to run a license server, as you do not want it to go offline on you.
- You should not run the license server on your own computer, but find a server that is well-maintained and accessible to all intended Simics users.
- The license server will normally just serve licenses for Simics processes running on other computers at your institution. This means that Simics has no problems running on compute clusters, as long as all the computers in the cluster can reach the license server. It also means that the license server does not need to be a particularly powerfulmachine.
- The Linux "hostid" shell command does not provide the correct information; you must use lmutil to get an lmhostid.
- On Linux and Windows hosts, hostids tend to be 12 digits (Ethernet MAC addresses), while on Solaris servers, they tend to be 8 digits. Do not zero-pad the Solaris hostid, as that will generate a non-functional license.
- The lmutil program for Windows is a plain command-line program, so you need to open a Windows command shell to run it.
- Alternately attach a copy of a previous Simics site license
In return for the use of Simics, we do want to be able to look at interesting modules developed for Simics and get notification on any publications using Simics (including the full text version of any paper). If you have some new work based on Simics published recently, please do comment on this blog post and include the citation and a link!