Java Disk Benchmark Utility
- Java cross platform solution
- Benchmark IO read/write performance
- Graphs: sample bw, max, min, cum bw, latency (access time)
- Adjustable block size, block qty and sample qty
- Single or multi file option
- Sequential or random option
- Detect drive model, capacity and processor
- Save and load benchmark
- Auto clear disk cache (when sudo or admin)
- multi threaded benchmarks
https://sourceforge.net/projects/jdiskmark/
Java 21 needs to be installed to run jdiskmark.
-
Download and install java 21 from Oracle.
-
Verify java 21 is installed:
C:\Users\username>java --version java 21.0.1 2023-10-17 LTS Java(TM) SE Runtime Environment (build 21.0.1+12-LTS-29) Java HotSpot(TM) 64-Bit Server VM (build 21.0.1+12-LTS-29, mixed mode, sharing) -
Extract release zip archive into desired location.
Examples: /Users/username/jdiskmark-v0.6.0 /opt/jdiskmark-v0.6.0
Note: Running without sudo or a windows administrator will require manually clearing the disk write cache before performing read benchmarks.
-
Open a terminal or shell in the extracted directory.
-
run command:
$ java -jar jdiskmark.jarIn windows double click executable jar file.
-
Drop cache manually:
- Linux:
sudo sh -c "sync; 1 > /proc/sys/vm/drop_caches" - Mac OS:
sudo sh -c "sync; purge" - Windows: Run included EmptyStandbyList.exe or RAMMap64.exe
- With RAMMap64 invalidate disk cache with Empty > Empty Standby List
- Linux:
Note: Take advantage of automatic clearing of the disk cache for write read benchmarks start with sudo or an administrator windows shell.
- Linux:
sudo java -jar jdiskmark.jar - Mac OS:
sudo java -jar jdiskmark.jar - Windows: start powershell as administrator then
java -jar jdiskmark.jar
display version
java -jar jdiskmark.jar -v
display top level help
java -jar jdiskmark.jar -h
display benchmark options
java -jar jdiskmark.jar run -h
Usage: jdm run [-chsv] [-b=<numOfBlocks>] [-e=<exportPath>] [-l=<locationDir>] [-n=<numOfSamples>]
[-o=<blockSequence>] [-t=<benchmarkType>] [-T=<numOfThreads>] [-z=<blockSizeKb>]
Starts a disk benchmark test with specified parameters.
-b, --blocks=<numOfBlocks>
Number of blocks/chunks per sample. (Default: 32)
-c, --clean Remove existing JDiskMark data directory before starting.
-e, --export=<exportPath>
The output file to export benchmark results in json format.
-h, --help Display this help and exit.
-l, --location=<locationDir>
The directory path where test files will be created.
-n, --samples=<numOfSamples>
Total number of samples/files to write/read. (Default: 200)
-o, --order=<blockSequence>
Block order: Sequential, Random. (Default: SEQUENTIAL)
-s, --save Enable saving the benchmark.
-t, --type=<benchmarkType>
Benchmark type: Read, Write, Read & Write. (Default: WRITE)
-T, --threads=<numOfThreads>
Number of threads to use for testing. (Default: 1)
-v, --verbose Enable detailed logging.
-z, --block-size=<blockSizeKb>
Size of a block/chunk in Kilobytes (KB). (Default: 512)
run benchmarks example syntax
java -jar jdiskmark.jar run -n 25 -t "Write"
java -jar jdiskmark.jar run -l D:\ -n 25 -t "Read"
java -jar jdiskmark.jar run -n 25 -t "Read & Write"
run example benchmark
java -jar jdiskmark.jar run -n 25 -o Random -t "Write" -T 4
...
-------------------------------------------
JDiskMark Benchmark Results (v0.6.3-dev)
-------------------------------------------
Benchmark: Write
Drive: Samsung SSD 990 PRO 4TB
Capacity: 32% (1178/3725 GB)
Timestamp: 2025-10-26T18:17:37.529141200
CPU: 13th Gen Intel(R) Core(TM) i9-13900K
System: Windows 11 / amd64
Java: Java(TM) SE Runtime Environment 21.0.3
Path: C:\Users\james
-------------------------------------------
Order: Random
IOMode: Write
Thread(s): 4
Blocks(size): 25(512)
Samples: 25
TxSize(KB): 409600
Speed(MB/s): 3952.64
SpeedMin(MB/s): 3397.24
SpeedMax(MB/s): 4243.47
Latency(ms): 0.13
IOPS: 28892857
-------------------------------------------
jdiskmark client is developed with NetBeans 21 and Java 21
Source is available on our github repo
- TODO: #16 MacOS installer - tyler
- TODO: #15 Ubuntu installer - jeff
- TODO: #70 app icon - ian
- TODO: #33 maven build - lane
- TODO: #40 gui presentation issues - james
- TODO: #78 throttle graphics render - valerio
- TODO: #69 command line support - james
- #84 processor info resolved for (sp) installs
- #73 refactor benchmark data model, keyboard op sel
- #64 persist IOPS, write sync - val
- control panel on left
- allow concurrent version runs
- event tab swapped w disk location
- JDiskMark in title and msi vendor name
- Remove "Average" from "Access Time" label
- #13 Detect drive info on startup
- #12 update look and feel (windows)
- #22 foreign capacity reporting
- #23 delete selected benchmarks
- #10 IOPS reporting
- #25 linux crash, capacity w terabytes and exabytes
- write sync default off
- #26 lowercase project and jar
- #20 threading and queue depth
- #36 I/O Mode dropdown uses enum values for type safety
- resolve #17 invalid disk usage reported win 10
- msi installer available
- update for java 21 LTS w NetBeans 20 environment: eclipselink 4.0, jpa 3.1, modelgen 5.6, annotations 3.1, xml.bind 4.0
- increased drive information default col width to 170
- time format updated to
yyyy-MM-dd HH:mm:ss - default to 200 marks
- replace Date w LocalDateTime to avoid deprecated @Temporal
- disk access time (ms) - plotting disabled by default
- replace display of transfer size with access time in run panel
- GH-2 auto clear disk cache for combined write read benchmarks
- GH-6 save and load benchmarks and graph series
- break out actions into seperate menu
- admin or root indicator, architecture indicator
- GH-8 used capacity and total capacity
- initial color palette options
- report processor name
- updated eclipselink to 2.6 allows auto schema update
- improved gui initialization
- platform disk model info:
- windows: via powershell query
- linux: via
df /data/path&lsblk /dev/path --output MODEL - osx: via
df /data/path&diskutil info /dev/disk1
- persist recent run with embedded derby db
- remove "transfer mark number" from graph
- changed graph background to dark gray
- resizing main frame stretches tabbed pane instead of empty panel
- auto generate zip release ie.
jdiskmark-v0.2.zip - added tabbed pane near bottom to organize new controls
- format excessive decimal places
- show recent runs (not persisted)
- default to nimbus look and feel
- initial release
- upload benchmarks to jdiskmark.net portal (anonymous/w login)
- local app log for remote diagnostics
- selecting a drive location displays detected drive information below
- speed curves w rw at different tx sizes
- response time histogram > distribution of IO
- IOPS charts, review potential charts
- help that describes features and controls
- read&write not consistant with order caps
- bottom margins between table to bar to window edge should be the same
For ant builds
C:\apache-ant-1.10.15\bin
For maven builds
C:\apache-maven-3.9.10\bin
For code signing
C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x86\