  Network designers, planners, and security professionals increasingly rely on
large-scale virtual testbeds to emulate networks and make decisions about
real-world deployments. However, there has been limited research on how well
these virtual testbeds match their physical counterparts. Specifically, does
the virtualization that these testbeds depend on actually capture real-world
behaviors sufficiently well to support decisions? As a first step, we perform
simple experiments on both physical and virtual testbeds to begin to understand
where and how the testbeds differ. We set up a web service on one host and run
ApacheBench against this service from a different host, instrumenting each
system during these tests. We define an initial repeatable methodology to
quantitatively compare testbeds. Specifically, we compare the testbeds at three
levels of abstraction: application, operating system (OS) and network. For the
application level, we use the ApacheBench results. For OS behavior, we compare
patterns of system call orderings using Markov chains. This provides a unique
visual representation of the workload and OS behavior in our testbeds. We also
drill down into read-system-call behaviors and show how at one level both
systems are deterministic and identical, but as we move up in abstractions that
consistency declines. Finally, we use packet captures to compare network
behaviors and performance. We reconstruct flows and compare per-flow and
per-experiment statistics. We find that the behavior of the workload in the
testbeds is similar but that the underlying processes to support it do vary.
The low-level network behavior can vary widely in packetization depending on
the virtual network driver. While these differences can be important, and
knowing about them will help experiment designers, the core application and OS
behaviors still represent similar processes.
