Introspecting program behavior on the fly is a powerful concept that has many different applications. Dynamic program introspection can be useful to understand hot/cold code behavior, perform information flow tracking, security analysis, and so forth. However, transparently introspecting the program can be challenging because just the notion of monitoring the program can perturb the original program's behavior. Techniques need to be invented to enable easy-to-use, portable, transparent, and efficient monitoring of applications and systems. For instance, the picture above illustrates a mix of techniques we use to introspect program behavior to dynamically tune the system for better performance and power efficiency.
We develop static and dynamic program instrumentation techniques that often leverage compiler technology but also utilize hardware performance counters for lightweight profiling. We develop instrumentation technology for a variety of systems, including but not limited to the following: process level virtual machines (VM), system level VMs, distributed systems.