총 저밀도 지단백질
매우 간단한 순차 읽기의 경우 FIO는 NVMe SSD 순차 읽기 기능보다 훨씬 느리다고 보고합니다.
텍스트
여러분, 안녕하세요,
Samsung 980 Pro 1T NVMe SSD에 대해 공급업체에서 보고한 최대 읽기 대역폭을 달성하는 데 문제가 있습니다. 삼성의 제품 설명에 따르면 SSD는 약 7GB/s의 읽기 대역폭에 도달할 수 있습니다. 그러나 노력에도 불구하고 여전히 이 최대 읽기 대역폭에 도달할 수 없습니다.
현재 설정:
- SSD: 삼성 980 Pro 1T NVMe SSD
- 연결: PCIe 4.0 포트
- 운영 체제: 리눅스 우분투
현재 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%
어떤 조언이나 조언이라도 감사하겠습니다.약 7GB/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