bb-qq / uas

DSM Driver for UASP supported USB storage devices
19 stars 0 forks source link
driver kernel-module synology synology-nas synology-package

DSM Driver for UASP-supported USB storage devices

This is the USB Attached SCSI kernel module for Synology NASes.

In case you have external USB hard disks that support UASP connected to your Synology NAS, this driver will improve the read/write performance.

You may also be interested in my other projects:

What is USB Attached SCSI protocol?

USB Attached SCSI (UAS) or USB Attached SCSI Protocol (UASP) is a protocol used to move data to and from USB storage devices such as hard drives (HDDs), solid-state drives (SSDs), and thumb drives. UAS depends on the USB protocol and uses the standard SCSI command set. The use of UAS generally provides faster transfers compared to the older USB Mass Storage Bulk-Only Transport (BOT) drivers.

With UAS, the read/write speed of mainly fine-grained files, so-called IOPS, is dramatically higher than with a conventional BOT. UAS also takes advantage of USB 3's ability to operate in a full duplex, which is advantageous when mixing both read and write operations on SSDs.

For simple sequential read/write access, there is little difference.

See Wikipedia for a detailed explanation and the actual benchmark described below.

Supported NAS platform

You can download drivers including other platforms from the Release page and determine a proper driver for your model from this page, but you might encounter some issues with unconfirmed platforms.

Beta notice: Currently this driver only supports apollolake and geminilake.

Supported devices

This driver supports all UASP-enabled storage devices. However, many UASP interoperability issues have been reported in Linux. So the number of devices that work reliably may be limited.

Devices confirmed

These devices have been proven to perform better with UASP and operate stably for longer periods of time.

Devices expected to work

These devices support UASP and are equipped with relatively new chips. Theoretically, they work, but we are collecting reports on their stability.

Other UASP-compatible devices can be found here.

How to install

Notice

Please note that this driver will not be loaded when USB storage devices are mounted for safety. To ensure the successful installation and execution of the driver, please eject all USB storage devices from the control panel before proceeding.

The reason is that this UAS driver replaces the stock USB storage driver. Therefore, the stock USB storage driver will be unloaded once before the UAS driver is loaded. To avoid unintended disconnection of the USB storage, the Run/Stop operation of the driver is not performed while the USB storage is mounted.

Preparation

Enable SSH and login your NAS.

Installation

  1. Go to "Package Center"
  2. Press "Manual Install"
  3. Choose a driver package downloaded from the release page.
  4. [DSM7] The installation will fail the first time. After that, run the following command from the SSH terminal:
    • sudo install -m 4755 -o root -D /var/packages/uas/target/uas/spk_su /opt/sbin/spk_su
  5. [DSM7] Retry installation.
    • You don't need the above DSM7-specific steps at the next time.

https://www.synology.com/en-us/knowledgebase/SRM/help/SRM/PkgManApp/install_buy

How to check whether UAS is enabled

Run lsusb -i to verify that the uas driver is used instead of the usb-storage driver for the desired storage device.

The usb-storage (BOT) driver is used.

|__usb2          1d6b:0003:0404 09  3.00 5000MBit/s 0mA 1IF  (Linux 4.4.302+ xhci-hcd xHCI Host Controller 0000:00:15.0) hub
  |__2-2         152d:0580:7501 00  3.20 5000MBit/s 8mA 1IF  (Kuroutoshikou GW3.5AM-SU3G2P 37518000XXXX)
  2-2:1.0         (IF) 08:06:50 2EPs () usb-storage host17 (sdq)

The uas (UAS) driver is used.

|__usb2          1d6b:0003:0404 09  3.00 5000MBit/s 0mA 1IF  (Linux 4.4.302+ xhci-hcd xHCI Host Controller 0000:00:15.0) hub
  |__2-2         152d:0580:7501 00  3.20 5000MBit/s 8mA 1IF  (Kuroutoshikou GW3.5AM-SU3G2P 37518000XXXX)
  2-2:1.0         (IF) 08:06:62 4EPs () uas host25 (sdq)

Also, make sure that the device is connected via USB 3 by 3.20 5000MBit/s.

Tips

S.M.A.R.T diagnostics

Thanks to UASP can issue native commands, S.M.A.R.T can be used as is. However, DSM cannot perform S.M.A.R.T diagnostics for external storage, so smartctl must be used. For this, use the following command.

smartctl -a -d sat /dev/sdq1

Known issues

Automatic driver loading at system startup is useless.

USB storage is attached and mounted using the stock USB storage driver at system startup. The UAS driver is then loaded afterward.

Because of this order, the loading process of the UAS driver is skipped even if the UAS driver package is set to auto-run.

As a workaround, eject the USB storage and restart the driver package manually when the system is rebooted.

Performance test

Environment

Scenario

For the parameters given to fio, I used those used to measure the performance of persistent disks on Google Cloud Platform.

benchmark.sh ``` #!/bin/sh set -eux fio --name=write_throughput --directory=. --numjobs=8 \ --size=10G --time_based --runtime=60s --ramp_time=2s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=write \ --group_reporting=1 --iodepth_batch_submit=64 \ --iodepth_batch_complete_max=64 fio --name=write_iops --directory=. --size=10G \ --time_based --runtime=60s --ramp_time=2s --ioengine=libaio --direct=1 \ --verify=0 --bs=4K --iodepth=256 --rw=randwrite --group_reporting=1 \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 fio --name=read_throughput --directory=. --numjobs=8 \ --size=10G --time_based --runtime=60s --ramp_time=2s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=read \ --group_reporting=1 \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 echo ----- fio --name=read_iops --directory=. --size=10G \ --time_based --runtime=60s --ramp_time=2s --ioengine=libaio --direct=1 \ --verify=0 --bs=4K --iodepth=256 --rw=randread --group_reporting=1 \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 fio --name=rw_iops --directory=. --size=10G \ --time_based --runtime=60s --ramp_time=2s --ioengine=libaio --direct=1 \ --verify=0 --bs=4K --iodepth=256 --rw=randrw --group_reporting=1 \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 ```

Result

Summary

Raw log

BOT ``` + fio --name=write_throughput --directory=. --numjobs=8 --size=10G --time_based --runtime=60s --ramp_time=2s --ioengine=libaio --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=write --group_reporting=1 --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 write_throughput: (g=0): rw=write, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=libaio, iodepth=64 ... fio-3.29 Starting 8 threads write_throughput: Laying out IO file (1 file / 10240MiB) write_throughput: Laying out IO file (1 file / 10240MiB) write_throughput: Laying out IO file (1 file / 10240MiB) write_throughput: Laying out IO file (1 file / 10240MiB) write_throughput: Laying out IO file (1 file / 10240MiB) write_throughput: Laying out IO file (1 file / 10240MiB) write_throughput: Laying out IO file (1 file / 10240MiB) write_throughput: Laying out IO file (1 file / 10240MiB) Jobs: 6 (f=6): [W(6),_(2)][35.1%][w=82.0MiB/s][w=82 IOPS][eta 02m:00s] write_throughput: (groupid=0, jobs=8): err= 0: pid=28746: Sat Oct 28 17:04:29 2023 write: IOPS=182, BW=190MiB/s (200MB/s)(11.4GiB/61487msec); 0 zone resets slat (usec): min=207, max=3019.6k, avg=1903467.45, stdev=683391.87 clat (usec): min=10, max=3112.3k, avg=511995.83, stdev=786204.39 lat (msec): min=137, max=5893, avg=2380.43, stdev=749.29 clat percentiles (usec): | 1.00th=[ 12], 5.00th=[ 14], 10.00th=[ 16], | 20.00th=[ 18], 30.00th=[ 19], 40.00th=[ 21], | 50.00th=[ 26], 60.00th=[ 156238], 70.00th=[ 608175], | 80.00th=[1061159], 90.00th=[1837106], 95.00th=[2466251], | 99.00th=[2801796], 99.50th=[2868904], 99.90th=[3003122], | 99.95th=[3036677], 99.99th=[3036677] bw ( KiB/s): min=936101, max=1032192, per=100.00%, avg=994801.94, stdev=2734.42, samples=186 iops : min= 912, max= 1008, avg=971.13, stdev= 2.70, samples=186 lat (usec) : 20=37.01%, 50=16.08%, 250=0.51%, 500=1.55%, 750=0.48% lat (msec) : 20=0.04%, 50=0.07%, 100=0.46%, 250=4.49%, 500=6.45% lat (msec) : 750=6.19%, 1000=5.84%, 2000=12.88%, >=2000=8.21% cpu : usr=0.26%, sys=0.22%, ctx=3555, majf=0, minf=0 IO depths : 1=0.0%, 2=0.0%, 4=8.0%, 8=20.6%, 16=22.9%, 32=44.6%, >=64=1.1% submit : 0=0.0%, 4=7.2%, 8=7.2%, 16=14.4%, 32=20.3%, 64=50.8%, >=64=0.0% complete : 0=0.0%, 4=2.0%, 8=0.5%, 16=1.0%, 32=0.5%, 64=96.0%, >=64=0.0% issued rwts: total=0,11193,0,0 short=0,0,0,0 dropped=0,0,0,0 latency : target=0, window=0, percentile=100.00%, depth=64 Run status group 0 (all jobs): WRITE: bw=190MiB/s (200MB/s), 190MiB/s-190MiB/s (200MB/s-200MB/s), io=11.4GiB (12.3GB), run=61487-61487msec Disk stats (read/write): sdq: ios=0/105756, merge=0/1378, ticks=0/10813223, in_queue=10819660, util=99.76% + fio --name=write_iops --directory=. --size=10G --time_based --runtime=60s --ramp_time=2s --ioengine=libaio --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randwrite --group_reporting=1 --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 write_iops: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=256 fio-3.29 Starting 1 thread write_iops: Laying out IO file (1 file / 10240MiB) Jobs: 1 (f=1): [w(1)][100.0%][w=3335KiB/s][w=833 IOPS][eta 00m:00s] write_iops: (groupid=0, jobs=1): err= 0: pid=29850: Sat Oct 28 17:05:32 2023 write: IOPS=727, BW=2926KiB/s (2997kB/s)(172MiB/60238msec); 0 zone resets slat (usec): min=17, max=1100.1k, avg=148673.95, stdev=140363.23 clat (usec): min=10, max=1769.8k, avg=193891.44, stdev=224609.75 lat (msec): min=3, max=1937, avg=342.52, stdev=251.71 clat percentiles (usec): | 1.00th=[ 26], 5.00th=[ 34], 10.00th=[ 36], | 20.00th=[ 44], 30.00th=[ 38536], 40.00th=[ 117965], | 50.00th=[ 160433], 60.00th=[ 166724], 70.00th=[ 208667], | 80.00th=[ 325059], 90.00th=[ 484443], 95.00th=[ 658506], | 99.00th=[1035994], 99.50th=[1132463], 99.90th=[1384121], | 99.95th=[1484784], 99.99th=[1686111] bw ( KiB/s): min= 856, max= 5752, per=100.00%, avg=3049.65, stdev=852.07, samples=115 iops : min= 214, max= 1438, avg=762.25, stdev=213.04, samples=115 lat (usec) : 20=0.21%, 50=23.81%, 100=2.08%, 250=0.13%, 500=0.18% lat (usec) : 750=0.09%, 1000=0.01% lat (msec) : 2=0.02%, 4=0.17%, 10=0.51%, 20=0.44%, 50=6.37% lat (msec) : 100=5.48%, 250=32.96%, 500=19.27%, 750=4.81%, 1000=2.58% lat (msec) : 2000=1.17% cpu : usr=0.24%, sys=1.21%, ctx=1552, majf=0, minf=0 IO depths : 1=0.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=99.9% submit : 0=0.0%, 4=8.1%, 8=4.6%, 16=6.5%, 32=7.4%, 64=11.7%, >=64=61.7% complete : 0=0.0%, 4=9.6%, 8=0.3%, 16=0.3%, 32=0.0%, 64=0.3%, >=64=89.6% issued rwts: total=0,43813,0,0 short=0,0,0,0 dropped=0,0,0,0 latency : target=0, window=0, percentile=100.00%, depth=256 Run status group 0 (all jobs): WRITE: bw=2926KiB/s (2997kB/s), 2926KiB/s-2926KiB/s (2997kB/s-2997kB/s), io=172MiB (181MB), run=60238-60238msec Disk stats (read/write): sdq: ios=0/46086, merge=0/3425, ticks=0/8986953, in_queue=9016725, util=99.90% + fio --name=read_throughput --directory=. --numjobs=8 --size=10G --time_based --runtime=60s --ramp_time=2s --ioengine=libaio --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=read --group_reporting=1 --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 read_throughput: (g=0): rw=read, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=libaio, iodepth=64 ... fio-3.29 Starting 8 threads Jobs: 8 (f=8): [R(8)][14.2%][r=242MiB/s][r=242 IOPS][eta 06m:28s] read_throughput: (groupid=0, jobs=8): err= 0: pid=5321: Sat Oct 28 17:12:57 2023 read: IOPS=182, BW=190MiB/s (200MB/s)(11.4GiB/61115msec) slat (usec): min=291, max=2813.2k, avg=1915921.31, stdev=647683.73 clat (usec): min=10, max=2882.9k, avg=534491.06, stdev=820259.87 lat (msec): min=163, max=5360, avg=2416.82, stdev=716.99 clat percentiles (usec): | 1.00th=[ 12], 5.00th=[ 14], 10.00th=[ 15], | 20.00th=[ 17], 30.00th=[ 18], 40.00th=[ 20], | 50.00th=[ 23], 60.00th=[ 170918], 70.00th=[ 666895], | 80.00th=[1115685], 90.00th=[1988101], 95.00th=[2600469], | 99.00th=[2701132], 99.50th=[2734687], 99.90th=[2835350], | 99.95th=[2835350], 99.99th=[2868904] bw ( KiB/s): min=973368, max=1008366, per=100.00%, avg=990495.48, stdev=1324.00, samples=184 iops : min= 948, max= 984, avg=967.00, stdev= 1.32, samples=184 lat (usec) : 20=40.52%, 50=16.03%, 500=0.51% lat (msec) : 50=0.06%, 100=0.19%, 250=4.10%, 500=6.95%, 750=3.78% lat (msec) : 1000=4.50%, 2000=13.99%, >=2000=9.60% cpu : usr=0.01%, sys=0.23%, ctx=3163, majf=0, minf=0 IO depths : 1=0.0%, 2=0.0%, 4=4.6%, 8=24.7%, 16=22.4%, 32=40.9%, >=64=4.0% submit : 0=0.0%, 4=7.1%, 8=7.4%, 16=13.0%, 32=22.4%, 64=50.1%, >=64=0.0% complete : 0=0.0%, 4=3.5%, 8=0.5%, 16=0.0%, 32=0.0%, 64=96.0%, >=64=0.0% issued rwts: total=11123,0,0,0 short=0,0,0,0 dropped=0,0,0,0 latency : target=0, window=0, percentile=100.00%, depth=64 Run status group 0 (all jobs): READ: bw=190MiB/s (200MB/s), 190MiB/s-190MiB/s (200MB/s-200MB/s), io=11.4GiB (12.2GB), run=61115-61115msec Disk stats (read/write): sdq: ios=104417/4, merge=0/1, ticks=9288673/45, in_queue=9295130, util=99.99% + fio --name=read_iops --directory=. --size=10G --time_based --runtime=60s --ramp_time=2s --ioengine=libaio --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randread --group_reporting=1 --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 read_iops: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=256 fio-3.29 Starting 1 thread read_iops: Laying out IO file (1 file / 10240MiB) Jobs: 1 (f=1): [r(1)][0.5%][r=1025KiB/s][r=256 IOPS][eta 03h:44m:39s] read_iops: (groupid=0, jobs=1): err= 0: pid=7302: Sat Oct 28 17:14:50 2023 read: IOPS=192, BW=786KiB/s (805kB/s)(46.6MiB/60765msec) slat (msec): min=279, max=743, avg=499.59, stdev=168.61 clat (usec): min=16, max=2878.0k, avg=779571.39, stdev=616567.02 lat (msec): min=279, max=3339, avg=1278.97, stdev=611.45 clat percentiles (usec): | 1.00th=[ 19], 5.00th=[ 36], 10.00th=[ 45], | 20.00th=[ 67], 30.00th=[ 333448], 40.00th=[ 624952], | 50.00th=[ 666895], 60.00th=[ 935330], 70.00th=[1035994], | 80.00th=[1333789], 90.00th=[1652556], 95.00th=[1954546], | 99.00th=[2264925], 99.50th=[2332034], 99.90th=[2399142], | 99.95th=[2432697], 99.99th=[2768241] bw ( KiB/s): min= 768, max= 1034, per=100.00%, avg=1016.53, stdev=45.32, samples=93 iops : min= 192, max= 258, avg=253.98, stdev=11.32, samples=93 lat (usec) : 20=1.26%, 50=16.80%, 100=2.40% lat (msec) : 500=16.18%, 750=23.07%, 1000=7.32%, 2000=30.78%, >=2000=3.29% cpu : usr=0.06%, sys=0.12%, ctx=493, majf=0, minf=0 IO depths : 1=0.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=100.8% submit : 0=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=32.8%, >=64=67.2% complete : 0=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=100.0% issued rwts: total=11682,0,0,0 short=0,0,0,0 dropped=0,0,0,0 latency : target=0, window=0, percentile=100.00%, depth=256 Run status group 0 (all jobs): READ: bw=786KiB/s (805kB/s), 786KiB/s-786KiB/s (805kB/s-805kB/s), io=46.6MiB (48.9MB), run=60765-60765msec Disk stats (read/write): sdq: ios=12317/4, merge=1/1, ticks=9018565/163, in_queue=9023575, util=99.90% + fio --name=rw_iops --directory=. --size=10G --time_based --runtime=60s --ramp_time=2s --ioengine=libaio --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randrw --group_reporting=1 --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 rw_iops: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=256 fio-3.29 Starting 1 thread Jobs: 1 (f=1): [m(1)][0.7%][r=264KiB/s,w=248KiB/s][r=66,w=62 IOPS][eta 02h:34m:14s] rw_iops: (groupid=0, jobs=1): err= 0: pid=29297: Sun Oct 29 12:00:26 2023 read: IOPS=141, BW=574KiB/s (588kB/s)(33.9MiB/60439msec) slat (usec): min=46, max=1184.6k, avg=405646.76, stdev=229004.84 clat (usec): min=13, max=2429.1k, avg=489209.95, stdev=482026.99 lat (msec): min=87, max=2893, avg=894.68, stdev=516.64 clat percentiles (usec): | 1.00th=[ 26], 5.00th=[ 36], 10.00th=[ 37], | 20.00th=[ 47], 30.00th=[ 90702], 40.00th=[ 333448], | 50.00th=[ 396362], 60.00th=[ 455082], 70.00th=[ 683672], | 80.00th=[ 868221], 90.00th=[1216349], 95.00th=[1468007], | 99.00th=[1887437], 99.50th=[1971323], 99.90th=[2197816], | 99.95th=[2332034], 99.99th=[2432697] bw ( KiB/s): min= 320, max= 1162, per=100.00%, avg=650.14, stdev=239.00, samples=105 iops : min= 80, max= 290, avg=162.48, stdev=59.71, samples=105 write: IOPS=140, BW=570KiB/s (584kB/s)(33.7MiB/60439msec); 0 zone resets slat (usec): min=56, max=1184.6k, avg=396779.43, stdev=219027.80 clat (usec): min=12, max=2429.1k, avg=480735.80, stdev=482024.67 lat (msec): min=71, max=2893, avg=877.38, stdev=518.27 clat percentiles (usec): | 1.00th=[ 23], 5.00th=[ 36], 10.00th=[ 37], | 20.00th=[ 46], 30.00th=[ 89654], 40.00th=[ 320865], | 50.00th=[ 387974], 60.00th=[ 446694], 70.00th=[ 666895], | 80.00th=[ 859833], 90.00th=[1199571], 95.00th=[1468007], | 99.00th=[1887437], 99.50th=[2004878], 99.90th=[2197816], | 99.95th=[2231370], 99.99th=[2432697] bw ( KiB/s): min= 408, max= 1136, per=100.00%, avg=648.52, stdev=233.11, samples=105 iops : min= 102, max= 284, avg=162.06, stdev=58.23, samples=105 lat (usec) : 20=0.32%, 50=24.88%, 100=3.35%, 250=0.45% lat (msec) : 50=0.11%, 100=2.55%, 250=4.85%, 500=27.70%, 750=9.60% lat (msec) : 1000=11.73%, 2000=14.82%, >=2000=0.41% cpu : usr=0.09%, sys=0.22%, ctx=661, majf=0, minf=0 IO depths : 1=0.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=100.7% submit : 0=0.0%, 4=0.5%, 8=11.6%, 16=9.5%, 32=3.0%, 64=8.0%, >=64=67.3% complete : 0=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=100.0% issued rwts: total=8545,8493,0,0 short=0,0,0,0 dropped=0,0,0,0 latency : target=0, window=0, percentile=100.00%, depth=256 Run status group 0 (all jobs): READ: bw=574KiB/s (588kB/s), 574KiB/s-574KiB/s (588kB/s-588kB/s), io=33.9MiB (35.5MB), run=60439-60439msec WRITE: bw=570KiB/s (584kB/s), 570KiB/s-570KiB/s (584kB/s-584kB/s), io=33.7MiB (35.3MB), run=60439-60439msec Disk stats (read/write): sdq: ios=8941/8957, merge=0/13, ticks=4548190/4406598, in_queue=9016782, util=99.90% ```
UAS ```` + fio --name=write_throughput --directory=. --numjobs=8 --size=10G --time_based --runtime=60s --ramp_time=2s --ioengine=libaio --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=write --group_reporting=1 --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 write_throughput: (g=0): rw=write, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=libaio, iodepth=64 ... fio-3.29 Starting 8 threads Jobs: 4 (f=4): [_(3),W(1),_(1),W(3)][21.2%][w=266MiB/s][w=266 IOPS][eta 04m:01s] write_throughput: (groupid=0, jobs=8): err= 0: pid=21679: Sun Oct 29 10:58:16 2023 write: IOPS=187, BW=196MiB/s (206MB/s)(11.8GiB/61512msec); 0 zone resets slat (usec): min=124, max=3321.9k, avg=1524123.99, stdev=732852.58 clat (usec): min=12, max=3324.5k, avg=824422.18, stdev=973069.16 lat (msec): min=303, max=5113, avg=2342.02, stdev=984.54 clat percentiles (usec): | 1.00th=[ 15], 5.00th=[ 16], 10.00th=[ 17], | 20.00th=[ 19], 30.00th=[ 23], 40.00th=[ 1188], | 50.00th=[ 350225], 60.00th=[ 692061], 70.00th=[1484784], | 80.00th=[1870660], 90.00th=[2231370], 95.00th=[2667578], | 99.00th=[3170894], 99.50th=[3204449], 99.90th=[3338666], | 99.95th=[3338666], 99.99th=[3338666] bw ( KiB/s): min=612992, max=999424, per=100.00%, avg=794826.45, stdev=11157.01, samples=243 iops : min= 598, max= 976, avg=775.95, stdev=10.91, samples=243 lat (usec) : 20=25.12%, 50=10.75%, 100=0.07%, 250=1.77%, 500=0.60% lat (usec) : 750=0.59%, 1000=1.27% lat (msec) : 2=5.52%, 4=2.58%, 250=0.38%, 500=6.24%, 750=5.91% lat (msec) : 1000=1.79%, 2000=23.54%, >=2000=14.97% cpu : usr=0.25%, sys=0.14%, ctx=1135, majf=0, minf=0 IO depths : 1=0.0%, 2=0.0%, 4=2.8%, 8=1.7%, 16=26.0%, 32=67.6%, >=64=2.8% submit : 0=0.0%, 4=6.9%, 8=6.2%, 16=16.4%, 32=28.7%, 64=41.8%, >=64=0.0% complete : 0=0.0%, 4=0.0%, 8=0.4%, 16=0.4%, 32=2.0%, 64=97.2%, >=64=0.0% issued rwts: total=0,11550,0,0 short=0,0,0,0 dropped=0,0,0,0 latency : target=0, window=0, percentile=100.00%, depth=64 Run status group 0 (all jobs): WRITE: bw=196MiB/s (206MB/s), 196MiB/s-196MiB/s (206MB/s-206MB/s), io=11.8GiB (12.6GB), run=61512-61512msec Disk stats (read/write): sdq: ios=0/24806, merge=0/24, ticks=0/9194404, in_queue=9221649, util=99.63% + fio --name=write_iops --directory=. --size=10G --time_based --runtime=60s --ramp_time=2s --ioengine=libaio --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randwrite --group_reporting=1 --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 write_iops: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=256 fio-3.29 Starting 1 thread Jobs: 1 (f=1): [w(1)][100.0%][w=3011KiB/s][w=752 IOPS][eta 00m:00s] write_iops: (groupid=0, jobs=1): err= 0: pid=22682: Sun Oct 29 10:59:18 2023 write: IOPS=747, BW=3005KiB/s (3078kB/s)(176MiB/60084msec); 0 zone resets slat (usec): min=57, max=1145.1k, avg=141624.61, stdev=142026.06 clat (usec): min=7, max=1660.8k, avg=189729.16, stdev=214179.69 lat (msec): min=4, max=1826, avg=331.83, stdev=249.23 clat percentiles (usec): | 1.00th=[ 28], 5.00th=[ 35], 10.00th=[ 36], | 20.00th=[ 14091], 30.00th=[ 82314], 40.00th=[ 152044], | 50.00th=[ 156238], 60.00th=[ 160433], 70.00th=[ 183501], | 80.00th=[ 304088], 90.00th=[ 350225], 95.00th=[ 566232], | 99.00th=[1115685], 99.50th=[1182794], 99.90th=[1384121], | 99.95th=[1484784], 99.99th=[1619002] bw ( KiB/s): min= 896, max= 6144, per=100.00%, avg=3358.26, stdev=941.82, samples=107 iops : min= 224, max= 1536, avg=839.46, stdev=235.49, samples=107 lat (usec) : 10=0.01%, 20=0.01%, 50=18.61%, 100=0.57%, 250=0.09% lat (msec) : 4=0.13%, 10=0.14%, 20=1.09%, 50=5.36%, 100=4.89% lat (msec) : 250=44.91%, 500=18.98%, 750=1.68%, 1000=1.73%, 2000=2.11% cpu : usr=0.22%, sys=1.00%, ctx=1531, majf=0, minf=0 IO depths : 1=0.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=100.4% submit : 0=0.0%, 4=5.5%, 8=2.8%, 16=2.5%, 32=9.5%, 64=13.0%, >=64=66.7% complete : 0=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=100.0% issued rwts: total=0,44889,0,0 short=0,0,0,0 dropped=0,0,0,0 latency : target=0, window=0, percentile=100.00%, depth=256 Run status group 0 (all jobs): WRITE: bw=3005KiB/s (3078kB/s), 3005KiB/s-3005KiB/s (3078kB/s-3078kB/s), io=176MiB (185MB), run=60084-60084msec Disk stats (read/write): sdq: ios=0/46020, merge=0/21, ticks=0/8699270, in_queue=8998243, util=99.90% + fio --name=read_throughput --directory=. --numjobs=8 --size=10G --time_based --runtime=60s --ramp_time=2s --ioengine=libaio --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=read --group_reporting=1 --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 read_throughput: (g=0): rw=read, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=libaio, iodepth=64 ... fio-3.29 Starting 8 threads Jobs: 7 (f=7): [R(3),_(1),R(4)][52.8%][r=177MiB/s][r=177 IOPS][eta 00m:58s] read_throughput: (groupid=0, jobs=8): err= 0: pid=23660: Sun Oct 29 11:00:24 2023 read: IOPS=178, BW=186MiB/s (195MB/s)(11.4GiB/62641msec) slat (usec): min=89, max=2904.8k, avg=1610604.80, stdev=640530.74 clat (usec): min=13, max=2835.1k, avg=829009.40, stdev=959964.01 lat (msec): min=658, max=5113, avg=2402.85, stdev=912.91 clat percentiles (usec): | 1.00th=[ 15], 5.00th=[ 16], 10.00th=[ 17], | 20.00th=[ 18], 30.00th=[ 20], 40.00th=[ 562], | 50.00th=[ 1045], 60.00th=[ 725615], 70.00th=[2088764], | 80.00th=[2122318], 90.00th=[2164261], 95.00th=[2164261], | 99.00th=[2231370], 99.50th=[2264925], 99.90th=[2298479], | 99.95th=[2298479], 99.99th=[2835350] bw ( KiB/s): min=620884, max=945086, per=100.00%, avg=787378.69, stdev=6960.73, samples=238 iops : min= 606, max= 922, avg=768.35, stdev= 6.79, samples=238 lat (usec) : 20=31.23%, 50=5.32%, 100=0.22%, 250=0.47%, 500=2.55% lat (usec) : 750=5.94%, 1000=4.27% lat (msec) : 2=1.87%, 500=0.39%, 750=10.91%, 1000=1.20%, 2000=4.63% lat (msec) : >=2000=31.52% cpu : usr=0.01%, sys=0.16%, ctx=833, majf=0, minf=0 IO depths : 1=0.0%, 2=0.0%, 4=0.6%, 8=0.0%, 16=31.5%, 32=63.7%, >=64=0.6% submit : 0=0.0%, 4=3.9%, 8=11.1%, 16=11.8%, 32=28.3%, 64=44.8%, >=64=0.0% complete : 0=0.0%, 4=0.0%, 8=0.4%, 16=1.2%, 32=1.6%, 64=96.8%, >=64=0.0% issued rwts: total=11159,0,0,0 short=0,0,0,0 dropped=0,0,0,0 latency : target=0, window=0, percentile=100.00%, depth=64 Run status group 0 (all jobs): READ: bw=186MiB/s (195MB/s), 186MiB/s-186MiB/s (195MB/s-195MB/s), io=11.4GiB (12.2GB), run=62641-62641msec Disk stats (read/write): sdq: ios=23281/3, merge=0/1, ticks=9275850/212, in_queue=9300474, util=99.93% + fio --name=read_iops --directory=. --size=10G --time_based --runtime=60s --ramp_time=2s --ioengine=libaio --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randread --group_reporting=1 --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 read_iops: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=256 fio-3.29 Starting 1 thread Jobs: 1 (f=1): [r(1)][1.5%][r=2562KiB/s][r=640 IOPS][eta 01h:11m:20s] read_iops: (groupid=0, jobs=1): err= 0: pid=24696: Sun Oct 29 11:01:26 2023 read: IOPS=608, BW=2452KiB/s (2510kB/s)(144MiB/60306msec) slat (usec): min=33, max=290520, avg=177304.73, stdev=62677.13 clat (usec): min=21, max=1080.7k, avg=234872.83, stdev=188632.97 lat (msec): min=124, max=1363, avg=412.15, stdev=185.81 clat percentiles (usec): | 1.00th=[ 25], 5.00th=[ 35], 10.00th=[ 36], | 20.00th=[ 46], 30.00th=[ 175113], 40.00th=[ 191890], | 50.00th=[ 202376], 60.00th=[ 221250], 70.00th=[ 283116], | 80.00th=[ 400557], 90.00th=[ 467665], 95.00th=[ 608175], | 99.00th=[ 792724], 99.50th=[ 826278], 99.90th=[ 910164], | 99.95th=[1010828], 99.99th=[1061159] bw ( KiB/s): min= 1603, max= 3080, per=99.85%, avg=2448.36, stdev=501.86, samples=120 iops : min= 398, max= 770, avg=612.07, stdev=125.50, samples=120 lat (usec) : 50=22.64%, 100=1.20%, 250=0.09% lat (msec) : 100=0.04%, 250=43.60%, 500=24.16%, 750=7.34%, 1000=1.23% lat (msec) : 2000=0.06% cpu : usr=0.17%, sys=0.39%, ctx=1276, majf=0, minf=0 IO depths : 1=0.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=99.7% submit : 0=0.0%, 4=0.5%, 8=0.0%, 16=0.0%, 32=6.1%, 64=19.7%, >=64=73.7% complete : 0=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=100.0% issued rwts: total=36706,0,0,0 short=0,0,0,0 dropped=0,0,0,0 latency : target=0, window=0, percentile=100.00%, depth=256 Run status group 0 (all jobs): READ: bw=2452KiB/s (2510kB/s), 2452KiB/s-2452KiB/s (2510kB/s-2510kB/s), io=144MiB (151MB), run=60306-60306msec Disk stats (read/write): sdq: ios=38091/0, merge=2/0, ticks=8879246/0, in_queue=8886403, util=99.90% + fio --name=rw_iops --directory=. --size=10G --time_based --runtime=60s --ramp_time=2s --ioengine=libaio --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randrw --group_reporting=1 --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 rw_iops: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=256 fio-3.29 Starting 1 thread Jobs: 1 (f=1): [m(1)][1.4%][r=1773KiB/s,w=1809KiB/s][r=443,w=452 IOPS][eta 01h:14m:46s] rw_iops: (groupid=0, jobs=1): err= 0: pid=15910: Sun Oct 29 15:14:46 2023 read: IOPS=290, BW=1169KiB/s (1197kB/s)(68.9MiB/60412msec) slat (usec): min=18, max=999896, avg=186673.75, stdev=162647.74 clat (usec): min=14, max=1723.5k, avg=280686.89, stdev=260561.18 lat (msec): min=34, max=1906, avg=467.41, stdev=295.39 clat percentiles (usec): | 1.00th=[ 32], 5.00th=[ 37], 10.00th=[ 39], | 20.00th=[ 92799], 30.00th=[ 168821], 40.00th=[ 191890], | 50.00th=[ 212861], 60.00th=[ 244319], 70.00th=[ 337642], | 80.00th=[ 413139], 90.00th=[ 599786], 95.00th=[ 876610], | 99.00th=[1199571], 99.50th=[1350566], 99.90th=[1518339], | 99.95th=[1619002], 99.99th=[1702888] bw ( KiB/s): min= 400, max= 2525, per=100.00%, avg=1285.28, stdev=413.35, samples=109 iops : min= 100, max= 631, avg=321.17, stdev=103.31, samples=109 write: IOPS=289, BW=1168KiB/s (1196kB/s)(68.9MiB/60412msec); 0 zone resets slat (usec): min=47, max=999899, avg=184999.48, stdev=159017.06 clat (usec): min=10, max=1550.6k, avg=209625.84, stdev=250546.54 lat (msec): min=26, max=1793, avg=394.66, stdev=287.77 clat percentiles (usec): | 1.00th=[ 23], 5.00th=[ 32], 10.00th=[ 37], | 20.00th=[ 39], 30.00th=[ 70], 40.00th=[ 105382], | 50.00th=[ 179307], 60.00th=[ 198181], 70.00th=[ 231736], | 80.00th=[ 346031], 90.00th=[ 467665], 95.00th=[ 750781], | 99.00th=[1166017], 99.50th=[1283458], 99.90th=[1501561], | 99.95th=[1518339], 99.99th=[1551893] bw ( KiB/s): min= 384, max= 2605, per=100.00%, avg=1287.28, stdev=446.63, samples=109 iops : min= 96, max= 651, avg=321.67, stdev=111.62, samples=109 lat (usec) : 20=0.16%, 50=21.56%, 100=1.55%, 250=0.08% lat (msec) : 20=0.14%, 50=1.11%, 100=5.29%, 250=38.07%, 500=21.22% lat (msec) : 750=5.41%, 1000=2.88%, 2000=2.89% cpu : usr=0.18%, sys=0.44%, ctx=1219, majf=0, minf=0 IO depths : 1=0.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=99.4% submit : 0=0.0%, 4=0.7%, 8=0.0%, 16=4.4%, 32=12.6%, 64=14.3%, >=64=67.9% complete : 0=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=100.0% issued rwts: total=17527,17506,0,0 short=0,0,0,0 dropped=0,0,0,0 latency : target=0, window=0, percentile=100.00%, depth=256 Run status group 0 (all jobs): READ: bw=1169KiB/s (1197kB/s), 1169KiB/s-1169KiB/s (1197kB/s-1197kB/s), io=68.9MiB (72.3MB), run=60412-60412msec WRITE: bw=1168KiB/s (1196kB/s), 1168KiB/s-1168KiB/s (1196kB/s-1196kB/s), io=68.9MiB (72.3MB), run=60412-60412msec Disk stats (read/write): sdq: ios=18351/18401, merge=2/13, ticks=4993597/3839753, in_queue=8854692, util=99.90% ```