Skip navigation
2016

Part II - Some server storage I/O workload scripts and results

server storage I/O trends

 

This is the second in a two part series of posts pertaining to using some common server storage I/O benchmark tools and workload scripts. View part I here which includes overview, background and information about the tools used and related topics.

 

NVMe ssd storage
Various NVM flash SSD including NVMe devices

 

Following are some server I/O benchmark workload scripts to exercise  various storage devices such as Non-Volatile Memory (NVM) flash Solid State  Devices (SSDs) or Hard Disk Drives (HDD) among others.

 

The Workloads

Some ways that can impact the workload performance results besides changing the I/O size, read write, random sequential mix is the number of threads, workers and jobs. Note that in the workload steps, the larger 1MB and sequential scenarios have fewer threads, workers vs. the smaller IOP or activity focused workloads. Too many threads or workers can cause overhead and you will reach a point of diminishing return at some point. Likewise too few and you will not drive the system under test (SUT) or device under test (DUT) to its full potential. If you are not sure how many threads or workers to use, run some short calibration tests to see the results before doing a large, longer test.

 

Keep in mind that the best benchmark or workload is your own application running with similar load to what you would see in real world, along with applicable features, configuration and functionality enabled. The second best would be those that closely resemble your workload characteristics and that are relevant.

 

The following workloads involved a system test initiator (STI) server driving workload using the different tools as well as scripts shown. The STI sends the workload to a SUT or DUT that can be a single drive, card or multiple devices, storage system or appliance. Warning: The following workload tests does both reads and writes which can be destructive to your device under test. Exercise caution on the device and file name specified to avoid causing a problem that might result in you testing your backup / recovery process. Likewise no warranty is given, implied or made for these scripts or their use or results, they are simply supplied as is for your reference.

 

The four free tools that I'm using  with this set of scripts are:

  • Microsoft Diskspd (free), get the tool and bits here or here (open source), learn more about Diskspd here.
  • FIO.exe (free), get the tool and bits here or here among other venues.
  • Vdbench (free with registration), get the tool and bits here or here among other venues.
  • Iometer (free), get the tool and bits here among other venues.

 

Notice: While best effort has been made to verify the above links, they may change over time and you are responsible for verifying the safety of links and your downloads

Microsoft Diskspd workloads

Note that a 300GB size file named iobw.tst on device N: is being used for performing read and write I/Os to. There are 160 threads, I/O size of 4KB and 8KB varying from 100% Read (0% write), 70% Read (30% write) and 0% Read (100% write) with random (seek) and no hardware or software cache. Also specified are to collect latency statistics, a 30 second warm up ramp up time, and a quick 5 minute duration (test time). 5 minutes is a quick test for calibration, verify your environment however relatively short for a real test which should be in the hours or more depending on your needs.

 

Note that the output results are put into a file with a name describing the test tool, workload and other useful information such as date and time. You may also want to specify a different directory where output files are placed.

 

diskspd.exe -c300G -o160 -t160 -b4K -w0 -W30 -d300 -h -fr  N:iobw.tst -L  > DiskSPD_300G_4KRan100Read_160x160_072416_8AM.txt
diskspd.exe -c300G -o160 -t160 -b4K -w30 -W30 -d300 -h -fr  N:iobw.tst -L  > DiskSPD_300G_4KRan70Read_160x160_072416_8AM.txt
diskspd.exe -c300G -o160 -t160 -b4K -w100 -W30 -d300 -h -fr  N:iobw.tst -L  > DiskSPD_300G_4KRan0Read_160x160_072416_8AM.txt
diskspd.exe -c300G -o160 -t160 -b8K -w0 -W30 -d300 -h -fr  N:iobw.tst -L  > DiskSPD_300G_8KRan100Read_160x160_072416_8AM.txt
diskspd.exe -c300G -o160 -t160 -b8K -w30 -W30 -d300 -h -fr  N:iobw.tst -L  > DiskSPD_300G_8KRan70Read_160x160_072416_8AM.txt
diskspd.exe -c300G -o160 -t160 -b8K -w100 -W30 -d300 -h -fr  N:iobw.tst -L  > DiskSPD_300G_8KRan0Read_160x160_072416_8AM.txt

 

The following Diskspd tests use similar settings as above, however instead of random, sequential is specified, threads and outstanding I/Os are reduced while I/O size is set to 1MB, then 8KB, with 100% read and 100% write scenarios. The -t specifies the number of threads and -o number of outstanding I/Os per thread.

 

diskspd.exe -c300G -o32 -t132 -b1M -w0 -W30 -d300 -h -si  N:iobw.tst -L  > DiskSPD_300G_1MSeq100Read_32x32_072416_8AM.txt
diskspd.exe -c300G -o32 -t132 -b1M -w100 -W30 -d300 -h -si  N:iobw.tst -L  > DiskSPD_300G_1MSeq0Read_32x32_072416_8AM.txt
diskspd.exe -c300G -o160 -t160 -b8K -w0 -W30 -d300 -h -si  N:iobw.tst -L  > DiskSPD_300G_8KSeq100Read_32x32_072416_8AM.txt
diskspd.exe -c300G -o160 -t160 -b8K -w100 -W30 -d300 -h -si  N:iobw.tst -L  > DiskSPD_300G_8KSeq0Read_32x32_072416_8AM.txt

Fio.exe workloads

Next are the fio workloads similar to those run using Diskspd except the sequential scenarios are skipped.

 

fio --filename=N\:\iobw.tst --filesize=300000M --direct=1  --rw=randrw --refill_buffers --norandommap --randrepeat=0 --ioengine=windowsaio  --ba=4k --bs=4k --rwmixread=100 --iodepth=32 --numjobs=5 --exitall --time_based  --ramp_time=30 --runtime=300 --group_reporting --name=xxx  --output=FIO_300000M_4KRan100Read_5x32_072416_8AM.txt
fio --filename=N\:\iobw.tst --filesize=300000M --direct=1  --rw=randrw --refill_buffers --norandommap --randrepeat=0 --ioengine=windowsaio  --ba=4k --bs=4k --rwmixread=70 --iodepth=32 --numjobs=5 --exitall --time_based  --ramp_time=30 --runtime=300 --group_reporting --name=xxx  --output=FIO_300000M_4KRan70Read_5x32_072416_8AM.txt
fio --filename=N\:\iobw.tst --filesize=300000M --direct=1  --rw=randrw --refill_buffers --norandommap --randrepeat=0 --ioengine=windowsaio  --ba=4k --bs=4k --rwmixread=0 --iodepth=32 --numjobs=5 --exitall --time_based  --ramp_time=30 --runtime=300 --group_reporting --name=xxx  --output=FIO_300000M_4KRan0Read_5x32_072416_8AM.txt
fio --filename=N\:\iobw.tst --filesize=300000M --direct=1  --rw=randrw --refill_buffers --norandommap --randrepeat=0 --ioengine=windowsaio  --ba=8k --bs=8k --rwmixread=100 --iodepth=32 --numjobs=5 --exitall --time_based  --ramp_time=30 --runtime=300 --group_reporting --name=xxx  --output=FIO_300000M_8KRan100Read_5x32_072416_8AM.txt
fio --filename=N\:\iobw.tst --filesize=300000M --direct=1  --rw=randrw --refill_buffers --norandommap --randrepeat=0 --ioengine=windowsaio  --ba=8k --bs=8k --rwmixread=70 --iodepth=32 --numjobs=5 --exitall --time_based  --ramp_time=30 --runtime=300 --group_reporting --name=xxx  --output=FIO_300000M_8KRan70Read_5x32_072416_8AM.txt
fio --filename=N\:\iobw.tst --filesize=300000M --direct=1  --rw=randrw --refill_buffers --norandommap --randrepeat=0 --ioengine=windowsaio  --ba=8k --bs=8k --rwmixread=0 --iodepth=32 --numjobs=5 --exitall --time_based  --ramp_time=30 --runtime=300 --group_reporting --name=xxx  --output=FIO_300000M_8KRan0Read_5x32_072416_8AM.txt

Vdbench workloads

Next are the Vdbench workloads similar to those used with the Microsoft Diskspd scenarios. In addition to making sure Vdbench is installed and working, you will need to create a text file called seqrxx.txt containing the following:

 

hd=localhost,jvms=!jvmn
sd=sd1,lun=!drivename,openflags=directio,size=!dsize
wd=mix,sd=sd1
rd=!jobname,wd=mix,elapsed=!etime,interval=!itime,iorate=max,forthreads=(!tthreads),forxfersize=(!worktbd),forseekpct=(!workseek),forrdpct=(!workread),openflags=directio

 

The following are the commands that call the Vdbench script file. Note Vdbench puts output files (yes, plural there are many results) in a output folder.

 

vdbench -f seqrxx.txt dsize=300G  tthreads=160 jvmn=64 worktbd=4k workseek=100 workread=100 jobname=NVME etime=300 itime=30 drivename="\\.\N:\iobw.tst" -o  vdbench_NNVMe_300GB_64JVM_160TH_4K100Ran100Read_0726166AM
vdbench -f seqrxx.txt dsize=300G  tthreads=160 jvmn=64 worktbd=4k workseek=100 workread=70 jobname=NVME etime=300 itime=30 drivename="\\.\N:\iobw.tst" -o vdbench_NNVMe_300GB_64JVM_160TH_4K100Ran70Read_072416_8AM
vdbench -f seqrxx.txt dsize=300G  tthreads=160 jvmn=64 worktbd=4k workseek=100 workread=0 jobname=NVME etime=300 itime=30 drivename="\\.\N:\iobw.tst" -o vdbench_NNVMe_300GB_64JVM_160TH_4K100Ran0Read_072416_8AM
vdbench -f seqrxx.txt dsize=300G  tthreads=160 jvmn=64 worktbd=8k workseek=100 workread=100 jobname=NVME etime=300 itime=30 drivename="\\.\N:\iobw.tst" -o vdbench_NNVMe_300GB_64JVM_160TH_8K100Ran100Read_072416_8AM
vdbench -f seqrxx.txt dsize=300G  tthreads=160 jvmn=64 worktbd=8k workseek=100 workread=70 jobname=NVME etime=300 itime=30 drivename="\\.\N:\iobw.tst" -o vdbench_NNVMe_300GB_64JVM_160TH_8K100Ran70Read_072416_8AM
vdbench -f seqrxx.txt dsize=300G  tthreads=160 jvmn=64 worktbd=8k workseek=100 workread=0 jobname=NVME etime=300 itime=30 drivename="\\.\N:\iobw.tst" -o vdbench_NNVMe_300GB_64JVM_160TH_8K100Seq0Read_072416_8AM
vdbench -f seqrxx.txt dsize=300G  tthreads=160 jvmn=64 worktbd=8k workseek=0 workread=100 jobname=NVME etime=300 itime=30 drivename="\\.\N:\iobw.tst" -o vdbench_NNVMe_300GB_64JVM_160TH_8K100Seq100Read_072416_8AM
vdbench -f seqrxx.txt dsize=300G  tthreads=160 jvmn=64 worktbd=8k workseek=0 workread=70 jobname=NVME etime=300 itime=30 drivename="\\.\N:\iobw.tst" -o vdbench_NNVMe_300GB_64JVM_160TH_8K100Seq70Read_072416_8AM
vdbench -f seqrxx.txt dsize=300G  tthreads=160 jvmn=64 worktbd=8k workseek=0 workread=0 jobname=NVME etime=300 itime=30 drivename="\\.\N:\iobw.tst" -o vdbench_NNVMe_300GB_64JVM_160TH_8K100Seq0Read_072416_8AM
vdbench -f seqrxx.txt dsize=300G  tthreads=32 jvmn=64 worktbd=1M workseek=0 workread=100 jobname=NVME etime=300 itime=30 drivename="\\.\N:\iobw.tst" -o vdbench_NNVMe_300GB_64JVM_32TH_1M100Seq100Read_072416_8AM
vdbench -f seqrxx.txt dsize=300G  tthreads=32 jvmn=64 worktbd=1M workseek=0 workread=0 jobname=NVME etime=300 itime=30 drivename="\\.\N:\iobw.tst" -o vdbench_NNVMe_300GB_64JVM_32TH_1M100Seq0Read_072416_8AM

Iometer workloads

 

Last however not least, lets do an Iometer run. The following command calls an Iometer input file (icf) that you can find here. In that file you will need to make a few changes including the name of the server where Iometer is running, description and device under test address. For example in the icf file change SIOSERVER to the name of the server where you will be running Iometer from. Also change the address for the DUT, for example N: to what ever address, drive, mount point you are using. Also update the description accordingly (e.g. "NVME" to "Your test example".

Here is the command line to run Iometer specifying an icf and where to put the results in a CSV file that can be imported into Excel or other tools.

iometer /c  iometer_5work32q_intel_Profile.icf /r iometer_nvmetest_5work32q_072416_8AM.csv

server storage I/O SCM NVM SSD performance

What About The Results?

For context, the following results were run on a Lenovo TS140 (32GB RAM), single socket quad core (3.2GHz) Intel E3-1225 v3 with an Intel NVMe 750 PCIe AiC (Intel SSDPEDMW40). Out of the box Microsoft Windows NVMe drive and controller drivers were used (e.g. 6.3.9600.18203 and 6.3.9600.16421). Operating system is Windows 2012 R2 (bare metal) with NVMe PCIe card formatted with ReFS file system. Workload generator and benchmark driver tools included Microsoft Diskspd version 2.012, Fio.exe version 2.2.3, Vdbench 50403 and Iometer 1.1.0. Note that there are newer versions of the various workload generation tools.

 

Example results are located here.

Where To Learn More

What This All Means

Remember, everything is not the same in the data center or with data infrastructures that support different applications.

 

While some tools are more robust or better than others for different things, ultimately its usually not the tool that results in a bad benchmark or comparison, its the configuration or lack of including workload settings that are not relevant or applicable. The best benchmark, workload or simulation is your own application. Second best is one that closely resembles your application workload characteristics. A bad benchmark is one that has no relevance to your environment, application use scenario. Take and treat all benchmark or workload simulation results with a grain of salt as something to compare, contrast or make reference to in the proper context.

 

Ok, nuff said, for now...

 

Cheers
  Gs

Some server storage I/O benchmark workload scripts (Part I)

server storage I/O trends

 

This is part one of a two-part series of posts about using some common server storage I/O benchmark tools and workload scripts. View part II here  which includes the workload scripts and where to view sample results.

 

There are various tools and workloads for server I/O benchmark testing, validation and exercising  different storage devices (or systems and appliances) such as Non-Volatile Memory (NVM) flash Solid State  Devices (SSDs) or Hard Disk Drives (HDD) among others.

 

NVMe ssd storage
Various NVM flash SSD including NVMe devices

 

For example, lets say you have an SSD such as an Intel 750 (here, here, and here) or  some other vendors  NVMe PCIe Add in Card (AiC) installed into a Microsoft Windows server and would like to see how  it compares with expected results. The following scripts allow you to  validate your system with those of others running the same workload, granted of course your mileage (performance) may vary.

 

server storage I/O SCM NVM SSD performance

Why Your Performance May Vary

Reasons you performance may vary include among others:

  • GHz Speed of your server, number of sockets, cores
  • Amount of main DRAM memory
  • Number, type and speed of PCIe slots
  • Speed of storage device and any adapters
  • Device drivers and firmware of storage devices and adapters
  • Server power mode setting (e.g. low or balanced power vs.  high-performance)
  • Other workload running on system and device under test
  • Solar flares (kp-index) among  other urban (or real) myths and issues
  • Typos or misconfiguration of workload test scripts
  • Test server, storage, I/O device, software and workload configuration
  • Versions of test software tools among others

Windows Power (and performance) Settings

Some things are assumed or taken for granted that everybody knows and does, however sometimes the obvious needs to be stated or re-stated. An example is remembering to check your server power management settings to see if they are in energy efficiency power savings mode, or, in high-performance mode. Note that if your focus is on getting the best possible performance for effective productivity, then you want to be in high performance mode. On the other hand if performance is not your main concern, instead a focus on energy avoidance, then low power mode, or perhaps balanced.

 

For Microsoft Windows Servers, Desktop Workstations, Laptops and Tablets you can adjust power settings via control panel and GUI as well as command line or Powershell. From command line (privileged or administrator) the following are used for setting balanced or high-performance power settings.

 

Balanced

powercfg.exe /setactive 381b4222-f694-41f0-9685-ff5bb260df2e

High Performance

powercfg.exe /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c

 

From Powershell the following set balanced or high-performance.

 

Balanced
  PowerCfg -SetActive  "381b4222-f694-41f0-9685-ff5bb260df2e"

 

High Performance
  PowerCfg -SetActive "8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c"

 

Note that you can list Windows power management settings using powercfg -LIST and powercfg -QUERY

 

server storage I/O power management

 

Btw, if you have not already done so, enable Windows disk (HDD and SSD) performance counters so that they appear via Task Manager by entering from a command prompt:

diskperf -y

Workload (Benchmark) Simulation Test Tools Used

There are many tools (see storageio.com/performance) that  can be used for creating and running  workloads just as there are various  application server I/O characteristics. Different server I/O and application performance  attributes include among others read vs. write, random vs. sequential, large  vs. small, long vs. short stride, burst vs. sustain, cache and non-cache  friendly, activity vs. data movement vs. latency vs. CPU usage among others. Likewise the number of workers, jobs, threads, outstanding and overlapped I/O among other configuration settings can have an impact on workload and results.

 

The four free tools that I'm using  with this set of scripts are:

 

  • Microsoft Diskspd (free), get the tool and bits here or here (open source), learn more about Diskspd here.
  • FIO.exe (free), get the tool and bits here or here among other venues.
  • Vdbench (free with registration), get the tool and bits here or here among other venues.  
  • Iometer (free), get the tool and bits here among other venues.

 

Notice: While best effort has been made to verify the above links, they may change over time and you are responsible for verifying the safety of links and your downloads.

Where To Learn More

What This All Means

Remember, everything is not the same in the data center or with data infrastructures that support different applications.

 

While some tools are more robust or better than others for different things, ultimately it's usually not the tool that results in a bad benchmark or comparison, it's the configuration or lack of including workload settings that are not relevant or applicable. The best benchmark, workload or simulation is your own application. Second best is one that closely resembles your application workload characteristics. A bad benchmark is one that has no relevance to your environment, application use scenario. Take and treat all benchmark or workload simulation results with a grain of salt as something to compare, contrast or make reference to in the proper context. Read part two of this post series to view test tool workload scripts along with sample results.

 

Ok, nuff said, for now...

 

Cheers
  Gs

If you are or have talked the Non Volatile Memory (NVM) and NVM Express (NVMe) flash SSD talk, however have not yet done the walk, there are some good opportunities to do so. One example how to start walking the talk is get something like the Intel 750 400GB NVMe PCIe Add in Card (AiC) which you should be able to find on different venues including Amazon for $400 USD or less (recently saw the 400GB version for about $309 USD delivered). Of course the question might then be what to do with a NVMe device when you get it which besides running your applications on it, you can find some benchmark and workload generator tools, scripts and examples here.

 

NVMe ssd storage
Various NVM flash SSD including NVMe devices

 

Sure there are newer, more expensive, higher capacity cards, some are general availability (GA) while others are on early preview or evaluation basis.

 

However a good value, cost-effective way to get into the NVMe game, or expand your footprint are devices such as the Intel 750.

 

I have some of these cards and they have been great for use with various workloads. The Intel 750 cards are plug and play in various systems including my TS140s among larger robust servers running Windows Server (2012 R2, 2016 TP5), Ubuntu (various) and VMware ESXi (various).

 

There are in the box drivers for these Intel 750 cards, however to get a little more performance recommend visiting the Intel site, get the SSD tools, update the firmware on the cards if needed, as well as try the Intel vs. native drivers.

 

There are many vendors with NVMe PCIe cards, as well as U.2/SFF 8639 drives and M.2 mini-cards including Intel, Micron, Seagate, WD among many others

Where To Learn More

What This All Means

Time to get in the NVMe game if you have not already done so moving from talking the talk to walking the talk. With cost of early generation NVMe devices such as the Intel 750 among others there are great opportunities to get started. On the other hand if you are already using NVMe, there are some good opportunities to add extra NVMe based SSD to other servers or systems.

 

Speaking of NVMe talk, join me and others on a panel (Session 303) moderated by Dr. Jay Metz (@drjmetz) August 11th at Flash Memory Summit where we will discuss NVMe including NVMe over fabric networks (e.g. moving beyond the PCIe bus). Also keep in mind, with NVMe the question is not if, rather when, where, why, how with what and how to coexist and leverage existing technologies, hardware, software and people skill sets.

 

Ok, nuff said, for now…

Cheers
Gs

In case you have not heard, Microsoft is celebrating the 20th birthday (or anniversary) of Windows Server.

 

Microsoft has a nice site with info graphics and timelines of where Windows Server has been and accomplished over the past 20 years (view here).

 

Some of you may remember from 20 years ago Windows Server with a different name aka Windows NT Server. Back in the day, if you recall (or read), server requirements were more in the 33 MHz vs. 3.3GHz range, 32MB of RAM Memory vs. 32GB to 320GB, 150MB HDD vs. 150GB SSD or 1.5TB HDD.

 

Microsoft Windows Server NT

 

Keep in mind that 20 years ago Linux was a relative new thing with Red Hat not yet quite household or more specific enterprise name. The various Unix (e.g. IBM AIX, HP HP-UX, Sun Solaris, DEC Unix and Ultrix among many others) were still dominate, OS2 had peaked or close to, among others. Virtual Machines were Logical Partitions (LPAR) on Mainframes along with virtual PCs software and hardware assist boards.

 

IMHO there is no coincidence of Microsoft celebrating 20 years of WIndows Server going into the fall of 2016 and the upcoming release of Server 2016.

What’s New in Server 2016 (TP5)?

If you have not done so, check out the latest Tech Preview 5 (TP5) of Windows Server 2016 (get the bits e.g. software here to try) which includes Storage Spaces Direct (S2D) that leverages internal PCIe and drive formatSSD (NVMe, SAS, SATA) along with HDDs (SAS, SATA) for creating local and scale-out converged (desegregated) and hyper-converged (aggregated) solutions. In addition to S2D there is Storage Replica (SR) which is replication of local storage part of S2D (not to be confused with DFS or other replication).

 

Other enhancements include ReFS as the default file system instead of NTFS (don’t worry, NTFS like FAT does not go away yet). There are enhancements to Hyper-V including VM shielding, hot-plug virtual network adapters, enhanced Linux support and fail over priorities among others. Other enhancements include updates for AD including improved integration with on-premise as well as Azure AD for hybrid environments, PowerShell updates, Docker management including Linux (via Hyper-V) and Windows via Nano) container engines.

 

Microsoft Windows Server 2016 TP5

 

Speaking of Nano, if you had not heard, this is a new very light weight Windows Kernel that removes 32 bit WOW and GUI support. The result is that Nano is a very small physical (under 1GB image instance size) using less disk, less memory and less CPU to do a given amount of work, oh, and boots super fast, even without SSD. By not having all the 32 bit and GUI overhead, the intent with Nano is there should be fewer updates and maintenance tasks to do, while enabling Windows containers for SQL Server and other applications.

 

In addition to PowerShell, AD and other management enhancements, Windows Server 2016 (TP5) also enables bridging two worlds e.g. traditional on-premise (or cloud) based Windows Server and Public Cloud (e.g. Azure) and Private or Hybrid including Azure Stack. Note that if you have not heard of Azure Stack and are looking at cloud stacks such as OpenStack, do your due diligence and at least familiarize yourself with Azure Stack.

 

View more about WIndows 2016 TP5 enhancements here.

Where To Learn More

What This All Means

Congratulations Microsoft and Windows Server on 20th birthday (anniversary) you have come a long way.

With the new features and functionality in Windows Server 2016, looks like there is still a good future for the software defined server.

 

Ok, nuff said, for now…

 

Cheers
Gs