Sample Header Ad - 728x90

FIO reports slower sequential read than the advertised NVMe SSD read bandwidth

0 votes
1 answer
675 views
# TLDL For the very simple sequential read, FIO reports is much slower than the NVMe SSD sequentail read capability. --- # Main Text Hello everyone, I have been facing an issue while trying to achieve the maximum read bandwidth reported by the vendor for my Samsung 980 Pro 1T NVMe SSD. According to the Samsung product description, the SSD is capable of reaching read bandwidths of around 7 GB/s. However, despite my efforts, I have been unable to achieve this maximum read bandwidth. Current Setup: - SSD: Samsung 980 Pro 1T NVMe SSD - Connection: PCIe 4.0 port - Operating System: Linux Ubuntu Current FIO Script and Results: To test the read performance of the SSD, I have been using the FIO benchmarking tool with the following script:
$ sudo fio --loops=5 --size=1024m --filename=/dev/nvme0n2 --stonewall --ioengine=libaio --direct=1 --zero_buffers=1 --name=Seqread --bs=1024m --iodepth=1 --numjobs=1 --rw=read
Here are the results obtained from running the FIO script:
Seqread: (g=0): rw=read, bs=(R) 1024MiB-1024MiB, (W) 1024MiB-1024MiB, (T) 1024MiB-1024MiB, ioengine=libaio, iodepth=1
fio-3.28
Starting 1 process
Jobs: 1 (f=1)
Seqread: (groupid=0, jobs=1): err= 0: pid=1504682: Mon Oct 16 09:28:48 2023
  read: IOPS=3, BW=3368MiB/s (3532MB/s)(5120MiB/1520msec)
    slat (msec): min=151, max=314, avg=184.19, stdev=72.71
    clat (msec): min=2, max=149, avg=119.59, stdev=65.39
     lat (msec): min=300, max=316, avg=303.77, stdev= 7.33
    clat percentiles (msec):
     |  1.00th=[    3],  5.00th=[    3], 10.00th=[    3], 20.00th=[    3],
     | 30.00th=[  148], 40.00th=[  148], 50.00th=[  148], 60.00th=[  148],
     | 70.00th=[  150], 80.00th=[  150], 90.00th=[  150], 95.00th=[  150],
     | 99.00th=[  150], 99.50th=[  150], 99.90th=[  150], 99.95th=[  150],
     | 99.99th=[  150]
   bw (  MiB/s): min= 2048, max= 4096, per=81.07%, avg=2730.67, stdev=1182.41, samples=3
   iops        : min=    2, max=    4, avg= 2.67, stdev= 1.15, samples=3
  lat (msec)   : 4=20.00%, 250=80.00%
  cpu          : usr=0.00%, sys=31.47%, ctx=405, majf=0, minf=262156
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=5,0,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
   READ: bw=3368MiB/s (3532MB/s), 3368MiB/s-3368MiB/s (3532MB/s-3532MB/s), io=5120MiB (5369MB), run=1520-1520msec

Disk stats (read/write):
  nvme0n2: ios=9391/0, merge=0/0, ticks=757218/0, in_queue=757218, util=93.39%
I would greatly appreciate any guidance or suggestions on **how to optimize my FIO script to achieve the expected read bandwidth of around 7 GB/s**. If there are any improvements or modifications that can be made to the script, please let me know. Thank you in advance for your assistance! Please feel free to provide any additional information or insights that may be relevant to the issue at hand. --- Note: It should be PCIe4.0*4:
$ lspci -vv -s 5e:00.0
5e:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller PM9A1/PM9A3/980PRO (prog-if 02 [NVM Express])
	Subsystem: Samsung Electronics Co Ltd NVMe SSD Controller PM9A1/PM9A3/980PRO
	Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr+ Stepping- SERR+ FastB2B- DisINTx+
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- SERR- 
	Kernel driver in use: nvme
	Kernel modules: nvme

$ cat /sys/class/pci_bus/0000\:5e/device/0000\:5e\:00.0/max_link_width 
4
$ cat /sys/class/pci_bus/0000\:5e/device/0000\:5e\:00.0/max_link_speed 
16.0 GT/s PCIe
Asked by JGL (161 rep)
Oct 16, 2023, 07:39 AM
Last activity: Mar 4, 2024, 11:20 AM