Skip to content
Utility to automate iterative IO performance tests.
C#
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.idea/.idea.DiskSpeedTest
.vscode
DiskSpeedTest
.gitattributes
.gitignore
DiskSpeedTest.json
DiskSpeedTest.sln
DiskSpeedTest.sln.DotSettings
LICENSE
README.md

README.md

DiskSpeedTest

Utility to automate iterative IO performance tests.
The tool includes two tests, one using the DiskSpd utility, and another iterating bulk file create, read, and delete operations.

Use at your own risk, the tool can be destructive.

License

GitHub

Project

Code is on GitHub

Usage

  • I am not publishing binaries, you need to compile your own binary, follow the build instructions.
  • Download DiskSpd, and place the diskspd.exe binary in the path or the working directory.
  • Create a JSON config file with the required test parameters.
  • Specify the path to the JSON config on the commandline, e.g. DiskSpeedTest.exe DiskSpeedTest.json.
  • Analyze the CSV result files.

JSON Config File

{
  // Add a timestamp to the result output filenames
  "timestampresultfile": false,
  // DiskSpeedTest config
  "diskspeedtest": {
    // Enable this test
    "enabled": true,
    // Output CSV file
    "resultfile": "DiskSpeedResult.csv",
    // Test targets, full path and filename, directory must exist, file will be created
    "targets": [
      "C:\\Temp\\DiskSpeedData.dat",
      "\\\\Server\\Share\\DiskSpeedData.dat"
    ],
    // File size of test target in bytes
    "targetsize": 68719476736,
    // Block size in bytes, automatically generated by doubling the beginning value until the end size is reached
    "blocksizebegin": 4096,
    "blocksizeend": 2097152,
    // Warmup time in seconds, do IO but don't use the values in computed results
    "warmuptime": 30,
    // Test time in seconds
    "testtime": 120,
    // Time to rest between test runs
    "resttime": 0
  },
  // FileIterationTest config
  "fileiterationtest": {
    // Enable this test
    "enabled": true,
    // Output CSV file
    "resultfile": "FileIterationResult.csv",
    // Test targets, full path, directory will be created, contents will be deleted
    "targets": [
      "C:\\Temp\\FileIteration",
      "\\\\Server\\Share\\FileIteration"
    ],
    // Folder depth for recursion
    "folderdepth": 2,
    // Folders per folder
    "foldersperfolder": 2,
    // Files per folder
    "filesperfolder": 1000,
    // File size in bytes
    "filesize": 65536
  }
}

CSV Output Files

DiskSpeedTest CSV

UTC, Target, FileSize, BlockSize, WriteRatio, ThreadCount, OutstandingOperations, WarmupTime, TestTime, Bytes, IOS

FileIterationTest CSV

UTC, Target, FileSize, FolderDepth, FoldersPerFolder, FilesPerFolder, FolderCount, FileCount, CreateTime, ReadTime, DeleteTime

Notes

  • I created the utility to help troubleshoot Unraid SMB performance issues.
  • DiskSpd will conditionally use privileged IO functions, so test results will differ between running elevated or not, do not mix test results.

Build

Install GIT and .NET Core SDK 3.1.
You could use Visual Studio 2019 or Visual Studio Code, or compile from the console:

  • Create a project directory.
  • Initialize GIT.
  • Pull the reposity.
  • Compile the code.
C:\Users\piete>md tmp
C:\Users\piete>cd tmp

C:\Users\piete\tmp>git init
Initialized empty Git repository in C:/Users/piete/tmp/.git/

C:\Users\piete\tmp>git pull https://github.com/ptr727/DiskSpeedTest.git
...
From https://github.com/ptr727/DiskSpeedTest
 * branch            HEAD       -> FETCH_HEAD

C:\Users\piete>cd DiskSpeedTest

C:\Users\piete\tmp\DiskSpeedTest>dotnet build
Microsoft (R) Build Engine version 16.4.0+e901037fe for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  Restore completed in 175.55 ms for C:\Users\piete\tmp\DiskSpeedTest\DiskSpeedTest.csproj.
...
DiskSpeedTest -> C:\Users\piete\tmp\DiskSpeedTest\bin\Debug\netcoreapp3.1\DiskSpeedTest.dll
...
Build succeeded.
...
    3 Warning(s)
    0 Error(s)

Time Elapsed 00:00:01.05

C:\Users\piete\tmp\DiskSpeedTest>cd bin\Debug\netcoreapp3.1
C:\Users\piete\tmp\DiskSpeedTest\bin\Debug\netcoreapp3.1>DiskSpeedTest.exe
1/17/2020 7:31:15 AM : Usage : DiskSpeedTest.exe [JSON config file]
You can’t perform that action at this time.