Giter Site home page Giter Site logo

microsoft / diskspd Goto Github PK

View Code? Open in Web Editor NEW
1.1K 133.0 205.0 13.11 MB

DISKSPD is a storage load generator / performance test tool from the Windows/Windows Server and Cloud Server Infrastructure Engineering teams

License: MIT License

C++ 62.22% C 0.73% PowerShell 37.05%

diskspd's Introduction

DiskSpd

DiskSpd is a storage performance tool from the Windows, Windows Server and Cloud Server Infrastructure engineering teams at Microsoft. Please visit https://github.com/Microsoft/diskspd/wiki for updated documentation.

In addition to the tool itself, this repository hosts measurement frameworks which utilize DiskSpd. The initial example is VM Fleet, used for Windows Server Hyper-Converged environments with Storage Spaces Direct.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

Releases

The Releases page includes pre-compiled binaries (ZIP) and source code for the most current releases of the DiskSpd tool. The latest update to DiskSpd can always be downloaded from https://github.com/Microsoft/diskspd/releases/latest/download/DiskSpd.zip (aka https://aka.ms/getdiskspd).

What's New?

DISKSPD

DISKSPD 2.1 7/1/2021

  • New -g<n>i form allowing throughput limit specification in units of IOPS (per specified blocksize)
  • New -rs<pct> to specify mixed random/sequential operation (pct random); geometric distribution of run lengths
  • New -rd<distribution> to specify non-uniform IO distributions across target
    • pct by target percentage
    • abs by absolute offset
  • New -Rp<text|xml> to show specified parameter set in indicated profile output form; works with -X XML profiles and conventional command line
  • XML results/profiles are now indented for ease of review
  • Text result output updates
    • now shows values in size units (K/M/G, and now TiB) to two decimals
    • thread stride no longer shown unless specified
    • -F/-O threadpool parameters shown
  • XML profiles can now be built more generically
    • XML profiles can be stated in terms of templated target names (*1, *2), replaced in order from command line invocation
    • the command line now allows options alongside -X: -v, -z, -R and -W/-d/-C along with template target specs

DISKSPD 2.0.21a 9/21/2018

  • Added support for memory mapped I/O:
    • New -Sm option to enable memory mapped I/O
    • New -N<vni> option to specify flush options for memory mapped I/O
  • Added support for providing Event Tracing for Windows (ETW) events
  • Included a Windows Performance Recorder (WPR) profile to enable ETW tracing
  • Added system information to the ResultParser output

DISKSPD 2.0.20a 2/28/2018

  • Changes that may require rebaselining of results:
    • New random number generator that may show an observable decreased cost
    • Switched to 512-byte aligned buffers with the -Z option to increase performance
  • New -O option for specifying the number of outstanding IO requests per thread
  • New -Zr option for per-IO randomization of write buffer content
  • XML: Adds a new <ThreadTarget> element to support target weighting schemes
  • Enhanced statistics captured from IOPS data
  • Added support for validating XML profiles using an in-built XSD
  • Added support for handling RAW volumes
  • Updated CPU statistics to work on > 64-core systems
  • Updated calculation and accuracy of CPU statistics
  • Re-enable support for ETW statistics

DISKSPD 2.0.18a 5/31/2016

  • update /? example to use -Sh v. deprecated -h
  • fix operation on volumes on GPT partitioned media (:)
  • fix IO priority hint to proper stack alignment (if not 8 byte, will fail)
  • use iB notation to clarify that text result output is in 2^n units (KiB/MiB/GiB)

DISKSPD 2.0.17a 5/01/2016

  • -S is expanded to control write-through independent of OS/software cache. Among other things, this allows buffered write-through to be specified (-Sbw).
  • XML: adds a new <WriteThrough> element to specify write-through
  • XML: <DisableAllCache> is no longer emitted (still parsed, though), in favor or <WriteThrough> and <DisableOSCache>
  • Text output: OS/software cache and write-through state are now documented separately (adjacent lines)
  • Latency histogram now reports to 9-nines (one part in one billion) in both text and XML output
  • Error message added for failure to open write-content source file (-Z<size>,<file>)

VM Fleet

VM Fleet is a performance characterization and analyst framework for exploring the storage capabilities of Windows Server Hyper-Converged environments with Storage Spaces Direct.

VM Fleet 2.1.0.0 4/3/2024

  • Support for Arc VM management (only applicable to clusters managed by Arc)
  • Set-FleetRunProfileScript - produce a free-run script based on one of the defined workload profiles
  • Watch-FleetCPU - new support for monitoring guest VCPU utilization (-Guest); can handle data outages
  • Fix: performance counter handling now manages intermittent data dropouts (per conventional relog.exe)
  • Fix: mid-run vm health check now handles the possibility of many vms taking longer than intended runtime to validate; early exit to avoid false failures
  • Fix: ignore reboot required indication from cache layer when changing cache behavior; avoid false failure

VM Fleet 2.0.2.2 12/1/2021

  • Fix cluster remoting issue during New-Fleet caused by 2.0.2.1 work
  • Use timestamped logging in New-Fleet, simplify and de-colorize default output

VM Fleet 2.0.2.1 11/9/2021

  • Fix cluster remoting issues in Move-Fleet and Get-FleetDataDiskEstimate
  • Fix timing issue with Start-FleetSweep; always start from fleet pause to avoid triggering free run
  • Use uniqueness to guarantee Start-FleetSweep runs profile in case of repeat

VM Fleet 2.0.2 11/2/2021

  • Windows Server 2019/RS5 host operation now confirmed & supported
  • Read cache warmup for HDD capacity systems should now be faster

Set-FleetPause will wait for VM responses before completion by default (see -Timeout)

Several minor fixes including:

  • Disable Windows Recovery Console in fleet VMs
  • Fix: Show-Fleet IOPS view now aggregates all VM disk devices
  • Fix: clean up leaked/conflicting data collectors and blg automatically

VM Fleet 2.0 9/22/2021

  • major release and rewrite as a first class Powershell module
  • original script-based VM Fleet remains available at Frameworks/VMFleet1.0
  • see the documentation in the Wiki

Source Code

The source code for DiskSpd is hosted on GitHub at:

https://github.com/Microsoft/diskspd

Any issues with DiskSpd can be reported using the following link:

https://github.com/Microsoft/diskspd/issues

diskspd's People

Contributors

agadekar avatar chansikk avatar danpear avatar dl2n avatar lauracaulfield avatar martinwoodward avatar microsoft-github-policy-service[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

diskspd's Issues

VMFleet Troubleshooting aids available?

Is there any troubleshooting functionality? A "-verbose" switch or similar?
create-vmfleet creates the switches, then nothing. On a rerun nothing happens either.
watch-cluster runs, but displays no data - even when manually creating load (copying a vhd across csv's).

TIA!

fill_device option

It would be nice for diskspd to have an option similar to fio’s fill_device. What I’d like to be able to do is to initialize a disk with random data until it’s full – without having to specify a file/disk size.

diskspd should support memory-mapped benchmarking

DISKSPD should support benchmarking of persistent memory / storage class memory. This will require rdtsc or equivalent support for timing, possible enhancement of the histogram tracking to handle cycle-granularity timing, and new modes of operation (-S, etc.) to indicate new modes of operation.

This application has requested the Runtime to terminate it in an unusual way

Environment: VM on VMWare, Windows 2012 R2 Standard 64bit, 8 CPUs, 24 GB RAM, R drive 64K sector size, X drive 64K sector size.
Created folders named DiskSPD in R drive and DiskSPDResults in X drive.
Downloaded Diskspd-v2.0.15, extracted files in X drive and ran command as follows from DOS in admin mode.
X:\Diskspd-v2.0.15\amd64fre>diskspd -b8K -d60 -h -L -o8 -t8 -r -W -w50 -Z20G -c50G R:\diskspd\test.dat > X:\DiskSPDResults\R_resultssql_1.txt

Error: This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information.

Please help.

DISKSPD support for %chance sequential v. random patterns

Other load generators support specifying the IO pattern in terms of %sequential/random, which translates to a %chance that a thread will issue its next IO sequential to the prior one v. issuing to a random offset. This provides another rough modeling for workloads and while potentially tricky to use accurately, would be a useful capability.

diskspd sequential should allow run spec in units of total file/target size

DISKSPD cannot be run in a mode which analyzes the costs/behavior of a first (second, third, etc.) loop of sequential IO through a file. For instance, filesystems have behavior which usually only occurs on the first pass like allocation and marking of valid data. This capability would also be useful as a simple seasoning method.

In this mode, instead of specifying run duration we'd instead specify the number of loops each thread should make through the target (or portion of target specified by the begin/end paramters).

Diskspd testing against SSD and Microseconds

Hi, hope this is the correct place for raising this question. When using Diskspd against 4 SSD's (RAID 5 array) we are seeing higher than expected latency figures (see below), which are baffling us. However after some research it appears that some other users are saying when you use Diskspd against SSD's the figures are in Microseconds. Please can someone confirm this is the case?
Thks Darren

%-ile | Read (ms) | Write (ms) | Total (ms)

min |        N/A |      4.720 |      4.720

25th | N/A | 18.149 | 18.149
50th | N/A | 26.806 | 26.806
75th | N/A | 47.153 | 47.153
90th | N/A | 92.725 | 92.725
95th | N/A | 143.233 | 143.233
99th | N/A | 318.068 | 318.068
3-nines | N/A | 864.756 | 864.756
4-nines | N/A | 1580.786 | 1580.786
5-nines | N/A | 2070.190 | 2070.190
6-nines | N/A | 2418.533 | 2418.533
7-nines | N/A | 2653.430 | 2653.430
8-nines | N/A | 2653.430 | 2653.430
9-nines | N/A | 2653.430 | 2653.430
max | N/A | 2653.430 | 2653.430

Process-diskspd.ps1 does not export file path of the xml

When running different profiles, we tend to name the xml files with the test they perform. When all of these xml files are put together in a folder, we can easily identify the test that was run by looking at the xml file's name. When the Process-Diskspd.ps1 file compiles the results.tsv file, it does not have any column to distinguish between all the xml results and it is difficult to match results in each row to a certain file. It would be great to have the file path as a column to identify where the results came from.

Tool does not execute properly when run in succession.

2 machines are required for this test. One acting a SMB server where a test file of 3GB is created on a PCI SSD. From the client start write test followed by read test over a 10Gbps Network interconnect.

Command used :
diskspd.exe -w100 -n -L -W0 -d10 -t8 -o16 -b32k -si32k -S \10.1.1.56\wshare1\testfile1.dat > a.txt
diskspd.exe -w0 -n -L -W0 -d10 -t8 -o16 -b32k -si32k -S \10.1.1.56\wshare1\testfile1.dat > b.txt

Copy pasted the commands in a batch file and ran it. For the write test I get line rate of 9.4Gbps.
But for read I get 3Gbps.
The test can be sequential or random and the result is same.

When the same test is run using sqlio2 I don't see the issue and both read and write give line rate.
sqlio2 -s10 -t8 -o16 -b32k -fsequential -T0 -LS -BN \10.1.1.56\wshare1\testfile1.dat > a.txt
sqlio2 -s10 -t8 -o16 -b32k -fsequential -T100 -LS -BN \10.1.1.56\wshare1\testfile1.dat > b.txt

Diskspd Tool versions used :

  1. version 2.0.16b (2016/2/22)
  2. version 2.0.15 (2015/01/09)

SQLIO Tool Version :
sqlio v2.15. 64bit_SG

DISKSPD uses a couple APIs not in Nano Server 2016

Per http://blogs.technet.com/b/nanoserver/archive/2015/11/16/native-binary-scanning-tool-nanoserverapiscan-exe-for-nano-server.aspx

These two APIs are not present in Nano Server 2016. Removing dependencies on them will allow DISKSPD to work on that platform.

PS X:\nano> .\NanoServerApiScan.exe /BinaryPath:Z:\tmp

=== diskspd.exe ===
=== Z:\tmp\diskspd.exe ===

ERRORS:

KERNEL32.dll
SetThreadAffinityMask (Proc not found)
ole32.dll
CoInitialize (Proc not found)
Please use API CoInitializeEx as substitution.

100% read tests appear to use test files which are all zeros

Is it possible to ensure each time a 100% read test is run is executed that there is non-zero data in the test file?

Even when I use a 100% write test first, which does appear to write out non-zero data to the file, when I run the 100% read test, it zeros it out again.

Thanks.

Configure Simultaneous Different Workloads on Diskspd & VMFleet

I've been working with Diskspd and VMfleet for a while now trying different workloads in environments with reasonable success but I've not been able to configure a stress test with Diskspd to use the -X parameter. Has anyone had success setting up the XML file for configuring workloads of different types to run simultaneously on a group of VMs in the cluster? I could use a configuration example if anyone has one that they've got to work.

diskspd doesn't have check for 4K-volumes

For your information
diskspd -b512 doesn't check if the tested storage is 4096 PhysicalSectorSize and crashes on trying. Annoying if you create benchmark-scripts that have to differentiate between those as it's not easy doing that from a cmd- or PS-script... Would be nice if it would simply say it can't do what you told it to or something. Output of trying -b512 on a native 4K volume:
t[0] error during read error code: 87)
There has been an error during threads execution
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

How to create files with contents upto size mentioned?

I have to fill my disk with files upto reserved quota and see the eventvwr for warning.
To fill the data i am trying to use fsutil createnew but it created sparse files.

I tried with Vdbench. It created files with content but it throws exception at end.

When i was searching i found that diskspd is IO tool for Windows so i thought of using it .
I tried with Diskspd below command to fill the disk.

.\diskspd.exe -c7G -b4K -t2 -w100 C:\UnMapTest-Volume1\disk1\testfile.dat

But it also create only Sparse file without any content.
Whether Diskspd can be used for filling the random data in disk? If so how to create files in the folder with content upto some GB (say 7GB)

DiskSPD not writing to the Drive in chunks as defined by the -b <Blocksize> parameter

Problem Description:
Used DiskSpd CLI commands to perform Sequential write operation on SD/uSD cards connected via Protocol Analyzer.

o Performed write with different Block size ( -b128k, -b256k, -b512k etc.) defined as a parameter to diskspd and captured the trace for each of them, observed no change in the output BlockSize as captured by Protocol Analyzer.

Questions:

o What happens when the DiskSpd –b blocksize parameter is set to custom value (4k, 16k, 64k, 1M etc.) ?
o Does diskspd write data on the SD/uSD cards in chunks as specified by the –b parameter or is there any intermediate conversion happens either by OS or Hardware which makes the input diskspd –b parameter obsolete ?
o Any suggestions regarding the tool to be used and the methodologies for testing such transfers and monitoring at what BlockSize data being written to drives and to capture the traces(Using Hardware based Protocol Analyzers). ??

Use of Diskspd for stress testing

Hi all,

I am not sure if this is the right platform for me to address my requirement.
I am looking for just stressing out the HDD/SSD by doing 100% write to the disk and checking some basic info as to how the disk is enduring during stress.
I am are not looking for performance measurement here. Just want to run diskspd for ~30 minutes and check if the disk is behaving well during stress.

Please let me know what test I should perform and what result I should be looking for ?
Kindly help me :)

I tried writing to the disk (100% write for 10 mins ) using the following command
diskspd.exe -b256K -t1 -w100 -W5 -o64 -Swu -r -d600 -Z20M -L,0_pct_comp.bin #2

And got the output like so :
Total IO
thread | bytes | I/Os | MB/s | I/O per s | AvgLat | LatStdDev | file

 0 |    121647398912 |       464048 |     193.35 |     773.40 |   82.740 |    41.172 | #2 (894GB)

total: 121647398912 | 464048 | 193.35 | 773.40 | 82.740 | 41.172

Read IO
thread | bytes | I/Os | MB/s | I/O per s | AvgLat | LatStdDev | file

 0 |               0 |            0 |       0.00 |       0.00 |    0.000 |       N/A | #2 (894GB)

total: 0 | 0 | 0.00 | 0.00 | 0.000 | N/A

Write IO
thread | bytes | I/Os | MB/s | I/O per s | AvgLat | LatStdDev | file

 0 |    121647398912 |       464048 |     193.35 |     773.40 |   82.740 |    41.172 | #2 (894GB)

total: 121647398912 | 464048 | 193.35 | 773.40 | 82.740 | 41.172

%-ile | Read (ms) | Write (ms) | Total (ms)

min |        N/A |     31.242 |     31.242

25th | N/A | 33.822 | 33.822
50th | N/A | 96.928 | 96.928
75th | N/A | 103.014 | 103.014
90th | N/A | 153.568 | 153.568
95th | N/A | 156.915 | 156.915
99th | N/A | 160.514 | 160.514
3-nines | N/A | 163.477 | 163.477
4-nines | N/A | 165.460 | 165.460
5-nines | N/A | 167.004 | 167.004
6-nines | N/A | 168.096 | 168.096
7-nines | N/A | 168.096 | 168.096
8-nines | N/A | 168.096 | 168.096
9-nines | N/A | 168.096 | 168.096
max | N/A | 168.096 | 168.096

Active KGroups 2 > 1 and/or processor count 104 > 64.

hi there,
I am not sure if this issue should be reported here or not.
Having a problem running Diskspd.

WARNING: Complete CPU utilization cannot currently be gathered within DISKSPD for this system.
Use alternate mechanisms to gather this data such as perfmon/logman.
Active KGroups 2 > 1 and/or processor count 104 > 64.

any ideal to fix this problem?

-Z option with file name does not work

According to documentation source of write buffer can be defined by -Z[K|M|G|b], but it does not work.

PS C:\Tools> .\diskspd.exe -c99G -b64K -F1 -s8b -w100 -o32 -d300 -Sh -W10 -Z64K,file.mp3 Z:\testfile.dat

At line:1 char:74

  • ... -c99G -b64K -F1 -s8b -w100 -o32 -d300 -Sh -L -W10 -Z64K,file.mp3 ...
  •                                                             ~
    

Missing argument in parameter list.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingArgument

[VMFleet] $Connectpass not escaped preventing launch script from running when special characters are included in the password.

[Note double underscore is escaped by the comment parser]

In create-vmfleet.ps1 line 163 CONNECTPASS is replaced with the raw password provided in parameter $connectpass without being escaped. This means if the password includes a character such as " the launch script inside the vm will not run due to syntax error. Proposed patch below (rough draft doesnt escape everything like ' )

$escapedpassword = "'" + $using:connectpass + "'"
gc C:\ClusterStorage\collect\control\launch-template.ps1 |% { $_ -replace 'CONNECTUSER',$using:connectuser -replace 'CONNECTPASS',$escapedpassword } > z:\users\administrator\launch.ps1

Translating diskspd to linux FIO

I'm working on a project that uses a distributed storage benchmarking harness that leverages linux FIO under the covers to run storage level workloads on a set of systems.

The general overview is that you can feed specifications into the harness, and it will run them against various infrastructure targets, taking systematic care to minimize the number of variables, such that the runs are comparable between each other.

The idea here is that you'd use this harness to compare different types of infrastructure in a very standardized way. One way might be running against the same infrastructure, but different hardware/firmware configurations. Another way might be different types of storage (e.g. quantifying putting in Intel Optane vs standard NVMe devices, etc). Another way might be same hardware/storage, but different hypervisors or different device drivers.

There are a few Microsoft based applications that we've previously modeled in diskspd with a great degree of accuracy, that we'd love to port into this harness, such that we have one engine to rule them all, without having to add windows support to the harness and maintain two different workload generators.

To that end, has anyone approached this from a "translation" perspective before? Such as diskspd call/option XYZ == FIO parameter ABC, such that running either XYZ or ABC produces the same storage IO pattern/demand?

check-pause & clear-pause do not reference to anything in Start-sweep.ps1

check-pause & clear-pause do not reference to anything in Start-sweep.ps1.

check-pause : The term 'check-pause' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or
if a path was included, verify that the path is correct and try again.
At C:\ClusterStorage\Collect\control\start-sweep.ps1:322 char:33

  • if (-not ($checkpause -and (check-pause -isactive:$true))) {
    
  •                             ~~~~~~~~~~~
    
    • CategoryInfo : ObjectNotFound: (check-pause:String) [], CommandNotFoundException
    • FullyQualifiedErrorId : CommandNotFoundException

Are these ment to be aliasses?
If I replace the functions with the actual scripts, it works.

feature request: output diskspd run start and end date time in UTC

The script calling diskspd.exe can definitely add the similar information. But it cannot get the accurate timestamp when warm ends, real run starts and stops. Those timestamps are super useful while reviewing disk IOs issued by diskspd in other tools, like perfmon, WPA, etc.

VMFleet test on production system

Hello,
Can I test a S2D production system using vmfleet, where virtual disks (CSV) and VMs are currently in production? Looking to load VMFleet, test and then clear all VM's created by VMFleet manually after.
Will installing VMFleet modify any existing virtual disks or VMs?
Thx

Test diskspd without specifying a test file size

Hi,
I use the following command-line parameters to run diskspd write test. And I found diskspd will generated a 2TB file at first.
C:\Diskspd-v2.0.17\amd64fre\diskspd.exe -b4096K -d600 -Suw -L -o2 -t16 -si -w100 -c2046G $file
So by my understanding, the following diskspd test just override some parts of the test file, right?

But our scenario is a append-only operation. So I do not want to limit the file size, I tried to remove the -c2046G option, but fails with the following error:

Input parameters:

	timespan:   1
	-------------
	duration: 600s
	warm up time: 5s
	cool down time: 0s
	measuring latency
	random seed: 0
	path: 'XXXX\io.dat'
		think time: 0ms
		burst size: 0
		software cache disabled
		hardware write cache disabled, writethrough on
		performing write test
		block size: 4194304
		using interlocked sequential I/O (stride: 4194304)
		number of outstanding I/O operations: 2
		thread stride size: 0
		threads per file: 16
		using I/O Completion Ports
		IO priority: normal



Results for timespan 1:
*******************************************************************************
The test was interrupted before the measurements began. No results are displayed.

Any ways could I do to use diskspd to simulate a append-only write operation?

Thanks.

Add support for ETW events for viewing in WPA

Support should be added to allow regions of interest such as warm-up and cool-down periods to be viewable in WPA along side of file I/O and/or disk I/O views. Tracing should be configurable with tools such as XPerf and WPR.

Not parsing options correctly

It appears that sometimes the options passed to diskspd are not parsed correctly and treated as files. Here is an example output:

diskspd –b8K –d30 –o4 –t8 –h –r –w10 –L –Z1G –c20G K:\iotest.dat
Error opening file: ûd30 [2]
Error opening file: ût8 [2]
Error opening file: ûr [2]
Error opening file: ûL [2]
Error opening file: ûZ1G [2]
Error opening file: ûb8K [2]
Error opening file: ûo4 [2]
Error opening file: ûh [2]
Error opening file: ûw10 [2]
Error opening file: K:\iotest.dat [2]
Error opening file: ûc20G [2]
There has been an error during threads execution

How can i trust with output like this?

And this has popped up more then once already today.

Command Line: diskspd -d120 -F4 -w0 -r -b64k -o10 -h e:\temp\testfile.dat

Input parameters:

timespan:   1
-------------
duration: 120s
warm up time: 5s
cool down time: 0s
random seed: 0
path: 'e:\temp\testfile.dat'
    think time: 0ms
    burst size: 0
    software and hardware write cache disabled
    performing read test
    block size: 65536
    using random I/O (alignment: 65536)
    number of outstanding I/O operations: 10
    thread stride size: 0
    IO priority: normal

Results for timespan 1:


actual test time: 120.01s
thread count: 4
proc count: 32

CPU | Usage | User | Kernel | Idle

0| 0.00%| 0.00%| 0.00%| 99.99%
1| 0.00%| 0.00%| 0.00%| 99.99%
2| 1.74%| 0.00%| 1.74%| 98.25%
3| 0.00%| 0.00%| 0.00%| 99.99%
4| 0.05%| 0.00%| 0.05%| 99.94%
5| 0.00%| 0.00%| 0.00%| 99.99%
6| 0.03%| 0.01%| 0.01%| 99.97%
7| 1.54%| 0.73%| 0.81%| 98.46%
8| 0.01%| 0.00%| 0.01%| 99.98%
9| 0.00%| 0.00%| 0.00%| 99.99%
10| 0.03%| 0.00%| 0.03%| 99.97%
11| 0.00%| 0.00%| 0.00%| 99.99%
12| 0.00%| 0.00%| 0.00%| 99.99%
13| 0.00%| 0.00%| 0.00%| 99.99%
14| 0.00%| 0.00%| 0.00%| 99.99%
15| 0.00%| 0.00%| 0.00%| 99.99%
16| 0.03%| 0.03%| 0.00%| 99.97%
17| 0.00%| 0.00%| 0.00%| 99.99%
18| 0.00%| 0.00%| 0.00%| 99.99%
19| 0.09%| 0.00%| 0.09%| 99.90%
20| 0.07%| 0.05%| 0.01%| 99.93%
21| 2.64%| 0.69%| 1.95%| 97.35%
22| 0.46%| 0.16%| 0.30%| 99.54%
23| 0.00%| 0.00%| 0.00%| 99.99%
24| 0.04%| 0.00%| 0.04%| 99.95%
25| 0.01%| 0.00%| 0.01%| 99.98%
26| 0.03%| 0.03%| 0.00%| 99.97%
27| 0.00%| 0.00%| 0.00%| 99.99%
28| 0.03%| 0.00%| 0.03%| 99.97%
29| 0.00%| 0.00%| 0.00%| 99.99%
30| 0.07%| 0.03%| 0.04%| 99.93%

31| 0.01%| 0.00%| 0.01%| 99.98%

avg.| 0.21%| 0.05%| 0.16%| 99.78%

Total IO

thread | bytes | I/Os | MB/s | I/O per s | file

 0 |               0 |            0 |       0.00 |       0.00 | e:\temp\testfile.dat (50GB)
 1 |               0 |            0 |       0.00 |       0.00 | e:\temp\testfile.dat (50GB)
 2 |               0 |            0 |       0.00 |       0.00 | e:\temp\testfile.dat (50GB)
 3 |               0 |            0 |       0.00 |       0.00 | e:\temp\testfile.dat (50GB)

total: 0 | 0 | 0.00 | 0.00

Read IO

thread | bytes | I/Os | MB/s | I/O per s | file

 0 |               0 |            0 |       0.00 |       0.00 | e:\temp\testfile.dat (50GB)
 1 |               0 |            0 |       0.00 |       0.00 | e:\temp\testfile.dat (50GB)
 2 |               0 |            0 |       0.00 |       0.00 | e:\temp\testfile.dat (50GB)
 3 |               0 |            0 |       0.00 |       0.00 | e:\temp\testfile.dat (50GB)

total: 0 | 0 | 0.00 | 0.00

Write IO

thread | bytes | I/Os | MB/s | I/O per s | file

 0 |               0 |            0 |       0.00 |       0.00 | e:\temp\testfile.dat (50GB)
 1 |               0 |            0 |       0.00 |       0.00 | e:\temp\testfile.dat (50GB)
 2 |               0 |            0 |       0.00 |       0.00 | e:\temp\testfile.dat (50GB)
 3 |               0 |            0 |       0.00 |       0.00 | e:\temp\testfile.dat (50GB)

total: 0 | 0 | 0.00 | 0.00

text result output does not display IO type ratio properly

The text result output is currently the following:

_Print("\t\tperforming mix test (write/read ratio: %d/100)\n", target.GetWriteRatio());

As the text suggests it intended to display the w/r ratio, but writeratio/100 is not that.

In addition to basic correctness, lets also change to the conventional ordering of an r/w ratio - i.e., -w30 would be "70/30".

Running on SSD gives error: ERROR: Could not obtain partition info (error code: 1)

Error appears to be generated from the call to DeviceIoControl on line 81 in. IORequestGenerator/IORequestGenerator.cpp

Error code 1 is ERROR_INVALID_FUNCTION.

I have an up-to-date Windows 10 machine. Running x86 and amdx64 both give the same result. The error only occurs if I try to use diskspd on my SSD, other drives have no issue.

Drive is a Samsung SSD 850 EVO 1TB. I'm using a standard Microsoft driver for it (driver details reports disk.sys, EhStorClass.sys, and partmgr.sys are the files for the driver) at version 10.0.10586.0.

dskspd: can not build CmdRequestCreator with VS2013 Express for Windows

After loading the sln, the SlnExpl win shows CmdRequestCreator (incompatible)
However XMLProfileParser.cpp is the item that cant build due to various ATL-COM-ish errors that all seem to be spawned by the lack of atlcomcli.h

Error 1 error C1083: Cannot open include file: 'atlcomcli.h': No such file or directory c:\cygwin64\home\utz_j\git\diskspd\xmlprofileparser\xmlprofileparser.cpp 33 1 XmlProfileParser
2 IntelliSense: cannot open source file "atlcomcli.h" c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 33 1 XmlProfileParser
3 IntelliSense: identifier "CComPtr" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 46 9 XmlProfileParser
4 IntelliSense: type name is not allowed c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 46 17 XmlProfileParser
5 IntelliSense: identifier "spXmlDoc" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 46 35 XmlProfileParser
6 IntelliSense: no instance of function template "IID_PPV_ARGS_Helper" matches the argument list
argument types are: () c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 47 87 XmlProfileParser
7 IntelliSense: identifier "CComVariant" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 54 17 XmlProfileParser
8 IntelliSense: identifier "CComPtr" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 266 5 XmlProfileParser
9 IntelliSense: type name is not allowed c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 266 13 XmlProfileParser
10 IntelliSense: identifier "spNodeList" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 266 30 XmlProfileParser
11 IntelliSense: identifier "CComVariant" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 267 5 XmlProfileParser
12 IntelliSense: type name is not allowed c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 277 25 XmlProfileParser
13 IntelliSense: identifier "spNode" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 277 38 XmlProfileParser
14 IntelliSense: identifier "CComVariant" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 418 5 XmlProfileParser
15 IntelliSense: identifier "CComPtr" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 419 5 XmlProfileParser
16 IntelliSense: type name is not allowed c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 419 13 XmlProfileParser
17 IntelliSense: identifier "spNodeList" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 419 30 XmlProfileParser
18 IntelliSense: type name is not allowed c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 429 25 XmlProfileParser
19 IntelliSense: identifier "spNode" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 429 38 XmlProfileParser
20 IntelliSense: identifier "CComPtr" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 445 5 XmlProfileParser
21 IntelliSense: type name is not allowed c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 445 13 XmlProfileParser
22 IntelliSense: identifier "spNodeList" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 445 30 XmlProfileParser
23 IntelliSense: identifier "CComVariant" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 446 5 XmlProfileParser
24 IntelliSense: type name is not allowed c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 454 21 XmlProfileParser
25 IntelliSense: identifier "spNode" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 454 34 XmlProfileParser
26 IntelliSense: identifier "CComPtr" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 479 5 XmlProfileParser
27 IntelliSense: type name is not allowed c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 479 13 XmlProfileParser
28 IntelliSense: identifier "spNodeList" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 479 30 XmlProfileParser
29 IntelliSense: identifier "CComVariant" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 480 5 XmlProfileParser
30 IntelliSense: type name is not allowed c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 488 21 XmlProfileParser
31 IntelliSense: identifier "spNode" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 488 34 XmlProfileParser
32 IntelliSense: identifier "CComPtr" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 743 5 XmlProfileParser
33 IntelliSense: type name is not allowed c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 743 13 XmlProfileParser
34 IntelliSense: identifier "spNodeList" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 743 30 XmlProfileParser
35 IntelliSense: identifier "CComVariant" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 744 5 XmlProfileParser
36 IntelliSense: type name is not allowed c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 754 25 XmlProfileParser
37 IntelliSense: identifier "spNode" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 754 38 XmlProfileParser
38 IntelliSense: identifier "CComPtr" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 774 5 XmlProfileParser
39 IntelliSense: type name is not allowed c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 774 13 XmlProfileParser
40 IntelliSense: identifier "spNode" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 774 26 XmlProfileParser
41 IntelliSense: identifier "CComVariant" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 775 5 XmlProfileParser
42 IntelliSense: identifier "CComPtr" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 792 5 XmlProfileParser
43 IntelliSense: type name is not allowed c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 792 13 XmlProfileParser
44 IntelliSense: identifier "spNode" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 792 26 XmlProfileParser
45 IntelliSense: identifier "CComVariant" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 793 5 XmlProfileParser
46 IntelliSense: identifier "CComPtr" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 813 5 XmlProfileParser
47 IntelliSense: type name is not allowed c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 813 13 XmlProfileParser
48 IntelliSense: identifier "spNode" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 813 26 XmlProfileParser
49 IntelliSense: identifier "CComVariant" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 814 5 XmlProfileParser
50 IntelliSense: identifier "CComPtr" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 843 5 XmlProfileParser
51 IntelliSense: type name is not allowed c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 843 13 XmlProfileParser
52 IntelliSense: identifier "spNode" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 843 26 XmlProfileParser
53 IntelliSense: identifier "CComVariant" is undefined c:\cygwin64\home\utz_j\GIT\diskspd\XmlProfileParser\XmlProfileParser.cpp 844 5 XmlProfileParser

Either VS2013 Express for Windows needs to get more generous with a subset of ATL or the XML Parser needs to utilize a non-withheld Win32 XML implementation (best solution) or utilize a 3rd party XML library like xerces or whatnot.

specifying -T<offset> with a number of threads which would cause thread starting offset to be beyond EOF spins silently/no io

Specifying starting thread offsets with -T assigns threads to sequentially advancing offsets starting with the base file offset, and then <thread#>*<-T offset>. It appears that if the total number of threads is such that that starting offset would be beyond EOF, the tool silently hangs with no IO issued.

Lets make this either wrap (preferred?) or be an error condition, TBD.

DISKSPD should validate that numeric parameters are of expected pattern

Validate that numeric parameters follow their expected patterns:

[0-9]+(K|M|G|T) for the ones taking sizes
[0-9]+ for the ones taking plain numbers

For example:

-C10G : invalid, since cooldown only takes plan numeric (validate that all char are [0-9])
-r48h : invalid, since h is not a valid character in the size pattern

The reason -C10G is interesting is that its a somewhat common typo/transpose when -c10G was intended. This would error it out.

Incorrect proc count reported

Hi,
I am doing some testing on 4 socket/48 cores/96 LP machine and from diskspd results I get:
proc count: 128

Any idea what's wrong here?

Regards,
M.

Issue with Collect volume in S2D on 2016 and VMFleet

I've created a collect volume as described in s2d-vmfleet.pdf, but regardless of the FileSystemLabel, the mount point is always Volume#. Since the path of C:\ClusterSrorage\collect is hardcoded in all of the VMFleet scripts, I cannot run any of them.

DriveLetter FileSystemLabel FileSystem DriveType HealthStatus OperationalStatus SizeRemaining     Size
----------- --------------- ---------- --------- ------------ ----------------- -------------     ----
            collect         CSVFS      Fixed     Healthy      OK                     15.17 GB 15.94 GB

PS> ls


    Directory: C:\ClusterStorage


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d----l        3/15/2018   6:25 AM                Volume1
d----l        3/15/2018   6:25 AM                Volume2

Unable to memory map

I'm getting the following error when using the new -Sm flag to do memory mapped IO:

C:\Rodrigo>diskspd -c2G -d60 -Sm testfile.dat
FATAL ERROR: Could not map view for target 'testfile.dat'. Error code: 0x8
ERROR: Could not map view for target 'testfile.dat'. Error code: 0x8

Am I missing something here?

Document what the score means

I have not been able to find any information on this. The problem I have with it is that it seems inconsistent with the rest of the output, yet the results of the famous CrystalDiskMark are based on it.

Example:

Total IO
thread |       bytes     |     I/Os     |     MB/s   |  I/O per s |  file
------------------------------------------------------------------------------
     0 |      2775056384 |        21172 |     529.36 |    4234.88 | cdm (1024MB)

------------------------------------------------------------------------------
total:        2775056384 |        21172 |     529.36 |    4234.88

Score: 5550740

It's as if the value in the column MB/s is actually MiB/s and the returned score is in MB/s... (And if that truly is the case, then it seems that the heading for the column should be corrected?)

Display system information as part of the standard ResultParser

The standard ResultParser should display system information similar to that displayed by XmlResultParser. It would be useful to show the computer name, the time the run was started (in UTC) and also the system's processor topology including grouping and NUMA information.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.