One of the key performance metrics on any computer system is its memory speed (or memory bandwidth).
Memory speed can be measured in many different ways at different levels. At the OS level, one way to measure memory speed is to clock how fast (in terms of megabytes/gigabytes per second) it can read a piece of data from a memory location to a register, how fast it read the data from a register to a memory location, and how fast it can copy the data from one memory location to another. On a multi-processor machine, there is a difference between measuring memory speed on a single processor and measuring memory speed on multiple processors.
When it comes to virtualization, one may want to compare the memory speed without virtualization and the memory speed on a virtual machine. Since in an OS built on a virtual machine the translation of the operations into the operations in the underlying physical machine intuitively involves more work than it does in an OS directly built on top of the physical machine, one would expect the memory speed to be slower with virtualization.
But by how much? That is where memory effectiveness measure comes in. Let’s assume that in an OS without virtualization, you clock the uniprocessor memory read at 2.3GB/sec. You then create a virtual machine on the same hardware and install the same OS. You clock the uniprocessor memory speed again, and this time it’s 1.9GB/sec. In this case, you can state that the virtualized memory reads are ~83% effective.
Well, I didn’t actually make up this 83% memory effectiveness figure. It was obtained from some tests I ran around the end of 2007. The following chart shows the test results on uniprocessor memory reads and memory writes. So in this case, virtualization did slow memory access down somewhat.
I’d expect the memory effectiveness number to have improved with the advances in virtualization. But I have not re-run the test lately, so don’t have data to confirm. If you have some current numbers, I'd be interested in hearing them.
Sorry, I can’t identify the platform. In any event, it’s not necessary to identify the platform as the test results are too old to be of any current relevance. What I want to convey in this post is the methodology and what you may want to measure.
So how do you actually measure memory speed? One of the well-known memory benchmark is called STREAM maintained by a professor (John D. McCalpin) at the computer science department of University of Virginia.
I have been using a tool called memspeed written by Jim Gray, and found it to be convenient at least for comparison purposes, as long as you use it consistently.
I’ll follow up with another post on what other tests I run to measure the performance impact of virtualization when it comes to running SQL Server.