How To Test Server Performance Using IOmeter
A customer wants a new server to dedicate to its latest high-transaction Web app. Traffic on the current site is heavy and is expected to double in a year. What's needed is an accurate and reliable way to measure a machine's transaction processing and throughput capabilities to confirm that it can handle the load.
One option is to carbon-copy the customer's last invoice, beef up the RAM and storage, and work it into a proposal. While this might do for some scenarios, it doesn't provide any indication as to a machine's capability. Will the machine process transactions fast enough for the intended database application? Will the system's data throughput speed make it suitable as a media server?
To find out, there are a few simple benchmarks used by the CRN Test Center that can help determine which machines and storage subsystems are best suited to which types of jobs. Using our simple step-by-step procedures, you can do it too.
Step 1: Install IOMeter
IOmeter is a free benchmarking tool originally developed by Intel and now available under the GNU Public License. IOmeter is effective, easy to use and fairly well documented.
The first step is to visit the IOmeter download page and download, install and launch IOmeter on the server under test. There are 32- and 64-bit versions for various operating systems and processor platforms. This tutorial applies to the 32-bit Windows edition version 2006.07.27, which to our knowledge is the latest version and has been the least buggy. This download is a self-extracting file that's 1.7 MB and can be copied to and installed from a USB stick.
Step 2: Select Disk Targets
Once you've installed and launched the program, IOmeter displays the disk targets tab (above). Here, you'll select one or more storage volumes to be used by IOmeter's worker agents during tests.
All available drives are shown. Tests can include any combination of formatted or unformatted drives, but formatted drives need to be populated with test data by IOmeter. The program does this automatically, but it can take considerable time to fill up large volumes. For this option, we usually monitor the size of the test-data file (iobw.tst) gets to around 20 MB.
Testing raw, unpartitioned drives (or arrays) is faster, and we're told that performance results are the same either way. If more than one worker is used, the drive to test against must be selected for each worker. All workers can test against the same drive or each can access different drives. Network targets (drives) also can be tested, but we're not covering that here.
Also on this screen are various settings, all of which we'll leave alone for now. Later, we'll modify the "# of Outstanding I/Os per target," which above is set to 48. For now, this should be in its default setting of 1.
Step 3: Access Specifications
Next, decide what type of access specification to use. Access specifications determine the size of the data blocks used in testing and the randomness of IOmeter's access to those blocks. The access specification should closely match the traffic usage pattern that the server is likely to face.
For example, if we're setting up a media server, we know that the majority of users will be accessing media files that have been stored in large, contiguous blocks and are being read sequentially as they're streamed to clients.
So for testing this type of server, we might select an access specification that performs 100 percent read operations with zero-percent randomness. In the list of "Global Access Specifications" (above, right), IOmeter includes such an access specification for each of several block sizes, the largest of which is 32 KB.
On the other hand, if the goal is to emulate a database server, then an access spec more closely matched to that application might be to select a smaller block size of 512 bytes, for example, and randomness of at least 50 percent.
To select specs for use in tests, simply drag one or more into the left-hand pane, under "Assigned Access Specifications." Multiple specs can be queued up in the window; IOmeter will use each in turn as tests are started, stopped and restarted.
If you know the precise settings of the application that you're trying to emulate, you can (and should) enter them by editing the settings of an existing spec or creating a new one. The screen (above) shows the "All in One" spec that's included with IOmeter. This spec includes all block sizes at varying levels of randomness and can provide a good baseline for server comparison. If the server under test is to be used for mixed data and user types, then we recommend an access specification that includes at least 50 percent random access.
To save a set of specs for reuse later, single-click an access spec in the list at right and press the "Edit Copy" button. Make changes and hit OK. A new version of the spec will appear at the bottom of the list. Unless the name was changed, the new specs will appear with the words "Copy Of" appended to the front of the original name.
Also required for saving specs is to click the "Save Test Configuration" button (that's the one with the disk icon). Otherwise, any changes made to access spec files not saved in this way are lost when IOmeter quits. Conveniently, the "Save Test Configuration File" dialog allows for individual settings to be included or omitted as needed (above, lower left).
Step 4: The Results
Press the green flag button to begin tests. Doing so will present a "Save As" dialog box with the file name "Results" already entered. Accepting this name will create a CSV file or append results to an existing one.
To see how your system is performing in realtime, click the "Results Display" tab and move the "Update Frequency" slider (above, right) all the way to the left. This will set the update frequency to 1 second. Results will generally ramp up over several seconds or minutes and then level off.
Make a note of the first and second results: the "Total I/Os per Second" (transaction processing) and the "Total MBs per Second" (data throughput). Then click the stop sign.
Step 5: Maximize Performance
The next and final step it to maximize performance. We do this by adjusting the number of outstanding I/O transactions per target. Return to the "Disk Targets" tab and increase the "# of Outstanding I/Os per target" to a number that's greater than 1. Click the green flag to begin the tests, click OK to save the results and move to the "Results Display" tab. Make a note of the IOps and MBps figures and click "Stop."
Repeat this trial-and-error process until performance no longer improves. The optimal number of I/Os per target will be somewhere between 12 and 48, depending on the storage hardware in use. Once the number is found, it should be fixed for the remainder of testing while block size and other access specification settings are varied.
For more information, visit the crn.com How To page.