Portal
Language
 
Home>Knowledge Base>Performance Related>Verifying Windows System Performance
Information
Article ID40
Created On10/16/2009
Modified7/1/2011
Share With Others
Verifying Windows System Performance
Untitled Document

To verify an ioDrive's performance in a Windows system, Fusion-io recommends using the fio benchmark.

Installing fio

The fio benchmark runs on Windows using the Cygwin virtual environment (a Linux-like environment for Windows). You can install Cygwin and then build the fio utility within the environment. Or you can simply install a pre-compiled version using a Windows installer. For more information, see Installing fio on Windows.

Running fio

We recommend using raw block access to test the raw performance of the ioDrive. The best way to verify system performance is to run the fio jobs shown below.

WARNING:
Note that the write tests will destroy any data that currently reside on the ioDrive.
Use ioMemory VSL (driver) version 2.1 or later for best performance.

Running fio Tests (Windows)

For best results, run fio using the command-line options (as described below). This is much easier to configure than using a job file, due to the virtual environment.

There are four fio tests of interest in the sample jobs below:

  1. One-card write bandwidth
  2. One-card read IOPS
  3. One-card read bandwidth
  4. One-card write IOPS

The following benchmarks are designed for stressing the system and detecting performance issues, not to showcase the ioDrive's performance.

WARNING:
Choose the path (filename) carefully. Do NOT run fio on your boot device. See the information box below for configuring the correct path.

# Write Bandwidth test  
$ fio --filename=\\\\.\\PhysicalDrive0 --direct=1 --rw=randwrite --bs=1m --size=5G --numjobs=4 --runtime=10 --group_reporting --name=file1 --iodepth=16    
    
# Read IOPS test  
$ fio --filename=\\\\.\\PhysicalDrive0 --rw=randread --bs=4k --size=5G --numjobs=64 --runtime=10 --group_reporting --name=file1 --iodepth=16    
    
# Read Bandwidth test  
$ fio --filename=\\\\.\\PhysicalDrive0 --rw=randread --bs=1m --size=5G --numjobs=4 --runtime=10 --group_reporting --name=file1 --iodepth=16    
    
# Write IOPS test  
$ fio --filename=\\\\.\\PhysicalDrive0 --rw=randwrite --bs=4k --size=5G --numjobs=64 --runtime=10 --group_reporting --name=file1 --iodepth=16
The path to your ioDrive device depends on the device you wish to benchmark, in these examples the path is:
\\\\.\\PhysicalDrive0

To view the drive numbers of your devices, view the devices in the Disk Management utility (available under Start > Administrative Tools > Computer Management > Disk Management). If the device you wish to benchmark is Disk 2, then the path would be:

\\\\.\\PhysicalDrive2
If you are running fio version 1.50, do not use an iodepth greater than 1 (or simply do not run fio with that option). Doing so will cause fio to run forever.

These tests are also available as fio job input files, which may be requested from support@fusionio.com.

The latest expected performance numbers for your card type can be found in the ioDrive spec sheet, available at http://www.fusionio.com/products. The sample IOPS test uses a 4K block size and 64 threads. The sample bandwidth test uses 1MB block size and 4 threads. For multi-card runs, IOPS are calculated by adding the per-card bandwidth/second together and dividing it by the block size. See the following section for sample output from each of the tests and how to validate that your system is performing properly. The key data points in the output are highlighted.

Sample Benchmarks, Expected Results for Windows

Make sure to run the system-vetting tests in the order they are displayed below. The initial write bandwidth test may need to be run twice with a short pause between the runs to setup the card for best performance.

Compare your system results to the expected published numbers for your card type. See http://www.fusionio.com/products for details. Typically, your results should be better than those on the published spec sheet.

Write Bandwidth Test on Windows

WARNING:
Note that the write tests will destroy any data that currently resides on the ioDrive.

The output below shows the test achieving 786 MiB/sec (aggrb=786629KB/s), with random writes done on 1MB blocks. This is a 10-second write test.

fio: this platform does not support process shared mutexes, forcing use of threads. Use the 'thread'
 option to get rid of this warning.
file1: (g=0): rw=randwrite, bs=1M-1M/1M-1M, ioengine=windowsaio, iodepth=16
...
file1: (g=0): rw=randwrite, bs=1M-1M/1M-1M, ioengine=windowsaio, iodepth=16
fio 1.54
Starting 3 threads and 1 process
Jobs: 4 (f=4): [wwww] [100.0% done] [0K/786.5M /s] [0 /768  iops] [eta 00m:00s]
file1: (groupid=0, jobs=4): err= 0: pid=4168
  write: io=3589.0MB, bw=786629KB/s, iops=768 , runt= 10004msec
    clat (usec): min=0 , max=1000 , avg= 1.02, stdev=15.96
     lat (usec): min=0 , max=20000 , avg=5202.88, stdev=333.43
    bw (KB/s) : min=193784, max=198259, per=25.00%, avg=196689.27, stdev=376.36
  cpu          : usr=0.31%, sys=2.50%, ctx=0, majf=732, minf=0
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued r/w/d: total=0/7685/0, short=0/0/0
     lat (usec): 2=99.91%
     lat (msec): 2=0.09%

Run status group 0 (all jobs):
  WRITE: io=7685.0MB, aggrb=786629KB/s, minb=805508KB/s, maxb=805508KB/s, mint=10004msec, maxt=10004
msec

Read IOPS Test on Windows

The output below shows the test achieving 163K IOPS (iops=163385), with random reads done on 4K blocks.

fio: this platform does not support process shared mutexes, forcing use of threads. Use the 'thread'
 option to get rid of this warning.
file1: (g=0): rw=randread, bs=4K-4K/4K-4K, ioengine=windowsaio, iodepth=16
...
file1: (g=0): rw=randread, bs=4K-4K/4K-4K, ioengine=windowsaio, iodepth=16
fio 1.54
Starting 7 threads and 1 process
Jobs: 8 (f=8): [rrrrrrrr] [100.0% done] [656.4M/0K /s] [164K/0  iops] [eta 00m:00s]
file1: (groupid=0, jobs=8): err= 0: pid=2772
  read : io=2286.3MB, bw=653542KB/s, iops=163385 , runt= 10000msec
    slat (usec): min=0 , max=16000 , avg=12.24, stdev=41.64
    clat (usec): min=0 , max=35000 , avg=769.75, stdev=312.87
     lat (usec): min=0 , max=35000 , avg=781.99, stdev=312.00
    bw (KB/s) : min=72540, max=89888, per=12.49%, avg=81616.16, stdev=811.87
  cpu          : usr=91.59%, sys=221.48%, ctx=0, majf=26818, minf=0
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=100.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.1%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued r/w/d: total=1633854/0/0, short=0/0/0
     lat (usec): 2=27.15%
     lat (msec): 2=71.92%, 4=0.71%, 10=0.01%, 20=0.19%, 50=0.02%

Run status group 0 (all jobs):
   READ: io=6382.3MB, aggrb=653541KB/s, minb=669226KB/s, maxb=669226KB/s, mint=10000msec, maxt=10000
msec

Read Bandwidth Test on Windows

The output below shows the test achieving 829 MiB/sec (aggrb=829034KB/s), with random reads done on 1MB blocks.

fio: this platform does not support process shared mutexes, forcing use of threads. Use the 'thread'
 option to get rid of this warning.
file1: (g=0): rw=randread, bs=1M-1M/1M-1M, ioengine=windowsaio, iodepth=16
...
file1: (g=0): rw=randread, bs=1M-1M/1M-1M, ioengine=windowsaio, iodepth=16
fio 1.54
Starting 3 threads and 1 process
Jobs: 4 (f=4): [rrrr] [100.0% done] [826.6M/0K /s] [807 /0  iops] [eta 00m:00s]
file1: (groupid=0, jobs=4): err= 0: pid=4204
  read : io=4030.0MB, bw=829035KB/s, iops=809 , runt= 10037msec
    slat (usec): min=0 , max=16000 , avg=66.47, stdev=130.12
    clat (msec): min=9 , max=128 , avg=78.96, stdev= 3.55
     lat (msec): min=10 , max=128 , avg=79.02, stdev= 3.55
    bw (KB/s) : min=169306, max=215040, per=24.87%, avg=206175.52, stdev=4577.23
  cpu          : usr=0.78%, sys=4.35%, ctx=0, majf=65771, minf=0
  IO depths    : 1=0.1%, 2=0.1%, 4=0.2%, 8=0.4%, 16=99.3%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.1%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued r/w/d: total=8126/0/0, short=0/0/0

     lat (msec): 10=0.01%, 20=0.01%, 50=0.26%, 100=98.66%, 250=1.06%

Run status group 0 (all jobs):
   READ: io=8126.0MB, aggrb=829034KB/s, minb=848931KB/s, maxb=848931KB/s, mint=10037msec, maxt=10037
msec

Write IOPS Test on Windows

WARNING:
Note that the write tests will destroy any data that currently resides on the ioDrive.

The test below achieved 138K IOPS (iops=138199), with random writes and a 4K block size.

fio: this platform does not support process shared mutexes, forcing use of threads. Use the 'thread'
 option to get rid of this warning.
file1: (g=0): rw=randwrite, bs=4K-4K/4K-4K, ioengine=windowsaio, iodepth=16
...
file1: (g=0): rw=randwrite, bs=4K-4K/4K-4K, ioengine=windowsaio, iodepth=16
fio 1.54
Starting 7 threads and 1 process
Jobs: 8 (f=8): [wwwwwwww] [100.0% done] [0K/536.8M /s] [0 /134K iops] [eta 00m:00s]
file1: (groupid=0, jobs=8): err= 0: pid=4272
  write: io=1302.5MB, bw=552796KB/s, iops=138199 , runt= 10000msec
    slat (usec): min=0 , max=16000 , avg=10.16, stdev=39.79
    clat (usec): min=0 , max=52000 , avg=914.14, stdev=342.49
     lat (usec): min=0 , max=52000 , avg=924.31, stdev=342.23
    bw (KB/s) : min=60514, max=85472, per=12.45%, avg=68812.38, stdev=1435.53
  cpu          : usr=76.40%, sys=164.38%, ctx=0, majf=26259, minf=0
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=100.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.1%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued r/w/d: total=0/1381991/0, short=0/0/0
     lat (usec): 2=14.10%
     lat (msec): 2=84.02%, 4=1.64%, 10=0.03%, 20=0.18%, 50=0.02%
     lat (msec): 100=0.01%

Run status group 0 (all jobs):
  WRITE: io=5398.5MB, aggrb=552796KB/s, minb=566063KB/s, maxb=566063KB/s, mint=10000msec, maxt=10000
msec