総低密度リポタンパク質
非常に単純なシーケンシャル読み取りの場合、FIOはNVMe SSDシーケンシャル読み取り機能よりはるかに遅いと報告します。
テキスト
皆さん、こんにちは、
Samsung 980 Pro 1T NVMe SSDについてベンダーが報告した最大読み取り帯域幅を達成するのに問題があります。 Samsungの製品説明によると、SSDは約7GB / sの読み取り帯域幅に達することができます。ただし、努力にもかかわらず、まだこの最大読み取り帯域幅に達することはできません。
現在の設定:
- SSD:サムスン980 Pro 1T NVMe SSD
- 接続:PCIe 4.0ポート
- オペレーティングシステム:Linux Ubuntu
現在、FIOスクリプトと結果:SSD読み取りパフォーマンスをテストするために、FIOベンチマークツールと次のスクリプトを使用しています。
$ 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
FIOスクリプトを実行した結果は次のとおりです。
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%
どんなアドバイスやアドバイスにも感謝します。約7 GB / sの予想される読み取り帯域幅を達成するためにFIOスクリプトを最適化するにはどうすればよいですか?。スクリプトを改善または修正できる場合はお知らせください。助けてくれてありがとう!
当面の問題に関連する可能性のある追加情報や洞察を自由に提供してください。
メモ:
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- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 32 bytes
Interrupt: pin A routed to IRQ 39
NUMA node: 0
IOMMU group: 84
Region 0: Memory at c5e00000 (64-bit, non-prefetchable) [size=16K]
Capabilities: <access denied>
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
答え1
- テストサイズを増やすか、単に制限を削除することを検討してください。使用とは、帯域
--size=1024m
幅を制限できる特定の範囲のNANDフラッシュメモリを対象とするという意味です。 - 時間ベースのオプションと小さいブロックサイズを選択します。
--bs=1024m
同じサイズを指定すると、単一のI / Oを効果的に使用して各ループが完了するためfio
(ブロックレベルで複数の小さなI / Oに分割されますが)、歪みの原因となる可能性があります。 - I/Oの深さを増やします。すべてのSSD仕様番号は、単一ジョブと深さ1に基づいているわけではありません。
次のコマンドを試してください。
sudo fio --time_based --runtime=300 --filename=/dev/nvme0n2 --ioengine=libaio --direct=1 --bs=1024k --iodepth=128 --numjobs=1 --rw=read --name=read --group_reporting