This was written a few weeks ago and I just noticed today that it had not been published.
Following on from I bought a new nvme drive – or did I?, I ran stressdisk on it.
[dvl@test ~]$ sudo gpart add -a 4k -t freebsd-zfs nvd0 nvd0p1 added [dvl@test ~]$ gpart show nvd0 => 34 500118125 nvd0 GPT (238G) 34 6 - free - (3.0K) 40 500118112 1 freebsd-zfs (238G) 500118152 7 - free - (3.5K) [dvl@test ~]$ [dvl@test ~]$ sudo zpool create nvd0 /dev/nvd0p1 [dvl@test ~]$ zpool status nvd0 pool: nvd0 state: ONLINE config: NAME STATE READ WRITE CKSUM nvd0 ONLINE 0 0 0 nvd0p1 ONLINE 0 0 0 errors: No known data errors [dvl@test ~]$ [dvl@test ~]$ zfs list -r nvd0 NAME USED AVAIL REFER MOUNTPOINT nvd0 372K 231G 96K /nvd0 [dvl@test ~]$
Let’s stressdisk:
[dvl@test ~]$ sudo chown dvl:dvl /nvd0 [dvl@test ~]$ stressdisk - 2021/08/09 14:07:06 statsfile "stressdisk_stats.json" does not exist -- will create stressdisk - a disk soak testing utility - development version Automatic usage: stressdisk run directory - auto fill the directory up and soak test it stressdisk cycle directory - fill, test, delete, repeat - torture for flash stressdisk clean directory - delete the check files from the directory Manual usage: stressdisk help - this help stressdisk [ -s size ] write filename - write a check file stressdisk read filename - read the check file back stressdisk reads filename - ... repeatedly for duration set stressdisk check filename1 filename2 - compare two check files stressdisk checks filename1 filename2 - ... repeatedly for duration set Full options: -cpuprofile string Write cpu profile to file -duration duration Duration to run test (default 24h0m0s) -logfile string File to write log to set to empty to ignore (default "stressdisk.log") -maxerrors uint Max number of errors to print per file (default 64) -nodirect Don't use O_DIRECT -s int Size of the check files (default 1000000000) -stats duration Interval to print stats (default 1m0s) -statsfile string File to load/store statistics data (default "stressdisk_stats.json") Command "-" not understood [dvl@test ~]$
Let’s try this out:
[dvl@test ~]$ stressdisk run /nvd0/ 2021/08/09 14:08:39 statsfile "stressdisk_stats.json" does not exist -- will create 2021/08/09 14:08:39 No check files - generating 2021/08/09 14:08:39 Writing file "/nvd0/TST_0000" size 1000000000 2021/08/09 14:08:40 Writing file "/nvd0/TST_0001" size 1000000000 2021/08/09 14:08:41 Writing file "/nvd0/TST_0002" size 1000000000 2021/08/09 14:08:43 Writing file "/nvd0/TST_0003" size 1000000000 2021/08/09 14:08:44 Writing file "/nvd0/TST_0004" size 1000000000 2021/08/09 14:08:46 Writing file "/nvd0/TST_0005" size 1000000000 ...
24 hours later
Bytes read: 140310152 MByte (1633.44 MByte/s) Bytes written: 235880 MByte ( 491.77 MByte/s) Errors: 0 Elapsed time: 24h0m0.000395388s 2021/08/10 14:08:39 Exiting after running for > 24h0m0s 2021/08/10 14:08:39 Bytes read: 140310152 MByte (1633.44 MByte/s) Bytes written: 235880 MByte ( 491.77 MByte/s) Errors: 0 Elapsed time: 24h0m0.000940539s 2021/08/10 14:08:39 PASSED with no errors
[dvl@test ~]$ sudo smartctl -a /dev/nvme0 smartctl 7.2 2020-12-30 r5155 [FreeBSD 13.0-RELEASE-p3 amd64] (local build) Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Model Number: WDC PC SN730 SDBQNTY-256G-1001 Serial Number: [redacted] Firmware Version: 11170101 PCI Vendor/Subsystem ID: 0x15b7 IEEE OUI Identifier: 0x001b44 Total NVM Capacity: 256,060,514,304 [256 GB] Unallocated NVM Capacity: 0 Controller ID: 8215 NVMe Version: 1.3 Number of Namespaces: 1 Namespace 1 Size/Capacity: 256,060,514,304 [256 GB] Namespace 1 Formatted LBA Size: 512 Namespace 1 IEEE EUI-64: 001b44 8b4851cd44 Local Time is: Tue Aug 10 14:49:16 2021 UTC Firmware Updates (0x14): 2 Slots, no Reset required Optional Admin Commands (0x0017): Security Format Frmw_DL Self_Test Optional NVM Commands (0x005f): Comp Wr_Unc DS_Mngmt Wr_Zero Sav/Sel_Feat Timestmp Log Page Attributes (0x1e): Cmd_Eff_Lg Ext_Get_Lg Telmtry_Lg Pers_Ev_Lg Maximum Data Transfer Size: 128 Pages Warning Comp. Temp. Threshold: 84 Celsius Critical Comp. Temp. Threshold: 88 Celsius Namespace 1 Features (0x02): NA_Fields Supported Power States St Op Max Active Idle RL RT WL WT Ent_Lat Ex_Lat 0 + 5.00W - - 0 0 0 0 0 0 1 + 3.50W - - 1 1 1 1 0 0 2 + 3.00W - - 2 2 2 2 0 0 3 - 0.0700W - - 3 3 3 3 4000 10000 4 - 0.0035W - - 4 4 4 4 4000 40000 Supported LBA Sizes (NSID 0x1) Id Fmt Data Metadt Rel_Perf 0 + 512 0 2 1 - 4096 0 1 === START OF SMART DATA SECTION === SMART overall-health self-assessment test result: PASSED SMART/Health Information (NVMe Log 0x02) Critical Warning: 0x00 Temperature: 40 Celsius Available Spare: 100% Available Spare Threshold: 10% Percentage Used: 0% Data Units Read: 284,133,817 [145 TB] Data Units Written: 706,331 [361 GB] Host Read Commands: 1,113,450,299 Host Write Commands: 4,982,661 Controller Busy Time: 1,392 Power Cycles: 56 Power On Hours: 28 Unsafe Shutdowns: 22 Media and Data Integrity Errors: 0 Error Information Log Entries: 1 Warning Comp. Temperature Time: 0 Critical Comp. Temperature Time: 0 Error Information (NVMe Log 0x01, 16 of 256 entries) No Errors Logged