PTT推薦

[測試] 10M 4k IOPS挑戰 & 3995wx生資效能簡測

看板PC_Shopping標題[測試] 10M 4k IOPS挑戰 & 3995wx生資效能簡測作者
fo40225
()
時間推噓11 推:11 噓:0 →:6

TL;DR
AMD Ryzen Threadripper PRO 3995WX在8通道DDR4-3200下
Linux內建的/dev/shm可以達到9M~10M 4k IOPS
而16x Samsung 980 PRO 1TB安裝於此台主機上
未最佳化的RAID 0與系統在高隊列多執行緒下可達到6M 4k IOPS

主要硬體
AMD Ryzen Threadripper PRO 3995WX
8x 64GB Samsung DDR4-3200 ECC RDIMM
ASUS Pro WS WRX80E-SAGE SE WIFI (custom bios version)
7x ASUS HYPER M.2 X16 GEN 4 CARD
16x Samsung 980 PRO 1TB FW:5B2QGXA7 (Slot 1~7各2個+主機板2個)
mdadm RAID0 devices=16 chunk-size=128kB
default xfs
default mount
2x Crucial MX500
mdadm RAID1 裝系統

韌體設定
NPS4
TSME disable

作業系統
Ubuntu 22.04 LTS 5.15.0

其他沒說明的都是預設

說明
原本是準備了30個Samsung 980 PRO 1TB嘗試最大化效能
但後來發現有理論上與工程上的問題

根據AMD的文件 理論上的問題是

Each Processor has the capability to support four P links and four G links.
P links are connected to the PCIe root ports.
G links have the option to be connected to a PCIe root port or as cross
socket links that can be used to communicate cross-socket traffic.
但這張主機板是單插槽 所以G links應該是用於PCIe

There are four bandwidth injection points into the Infinity Fabric of a
single IOD: one per quadrant.
If the board designer chooses to use both G link and P link, then Px and Gx
share the bandwidth injection point in the IOD quadrant x.
When using both Px and Gx as bandwidth injection points, the system achieves
around 20 lanes of effective bandwidth from that quadrant, even though
32 lanes are being used.
根據這段 就算SSD全部直連CPU 最多也只能用到20個
(20 lanes * 4 roots / 4 lanes per ssd)的頻寬

這個事實蠻合理的 因為DDR4-3200 8通道理論頻寬204.8GB/s
而128x PCIe 4.0 理論頻寬為256GB/s
中間還有infinity fabric, IOD, CCD等東西卡著
怎麼算都會網路塞車

When a G link is used to connect to a second PCIe root port, we will have a
configuration in which traffic from two PCIe root ports must be distributed
to a single DMA BW injection point.
In the above configuration, the upstream bandwidth is equally distributed
between P and G links, assuming an equal number of lanes being used in
both P and G links.
根據這段,我應該要安裝各2個在P0, G0, P1, G1, P2, G2, P3, G3

但華碩的工作站主機板說明書都不會提供主機板架構
(這點Supermicro gigabyte asrock rack 都做得比較好
工作站或伺服器級主機板手冊都會提供架構圖
Supermicro的M12SWA-TF就有提供這張圖
https://i.imgur.com/F4UQPzH.jpg )

圖https://i.imgur.com/F4UQPzH.jpg?e=1667507374&s=WyHQBj5_y1ZYpN-07pYmlw, 10M 4k IOPS挑戰 & 3995wx生資效能簡測

反正最後用試的試出來
使用16個SSD 每個插槽各安裝2個 主機板上裝2個
這樣能讓每個PCIe Root Complex底下有4個SSD

工程上的問題是
這張板子的BIOS Version 1003進不了Linux
網路上其他人的留言
https://unix.stackexchange.com/questions/692552/#700549

而就算退版回0701能進Linux 只要安裝超過14個SSD就會有問題

(鄉民: 購買工作站或伺服器 請找品牌廠+SI
有錢就上DELL HPE 沒錢至少也選Supermicro或其他台廠白牌"整機"
[麗台 華碩 技嘉 微星 廣達 緯穎 ...]
自組遇到原廠沒有測過的issue 沒有SI支援很可怕的
我就遇到了 華碩的工程部門 沒有超過10顆的SSD
無法測試同時安裝超過10顆以上的狀況)

理論性能測試
使用fio 3.28 參數比照CrystalDiskMark 8 nvme

fio --loops=5 --size=1g --runtime=10 --time_based=1 \
--stonewall --direct=1 --group_reporting \
--name=SeqQ8T1read --bs=1048576 --iodepth=8 --rw=read \
--name=SeqQ8T1write --bs=1048576 --iodepth=8 --rw=write \
--name=Seq128kQ32T1read --bs=131072 --iodepth=32 --rw=read \
--name=Seq128kQ32T1write --bs=131072 --iodepth=32 --rw=write \
--name=4kQ32T16read --bs=4096 --iodepth=32 --numjobs=16 --rw=randread \
--name=4kQ32T16write --bs=4096 --iodepth=32 --numjobs=16 --rw=randwrite \ --name=4kQ1T1read --bs=4096 --iodepth=1 --rw=randread \
--name=4kQ1T1write --bs=4096 --iodepth=1 --rw=randwrite

在單顆、16顆RAID0、/dev/shm三個環境測試(/dev/shm會將direct=0)

1x 16x raid0 shm
SeqQ8T1read 4110MB/s 13.0GB/s 10.9GB/s
SeqQ8T1write 4166MB/s 12.5GB/s 6735MB/s
Seq128kQ32T1read 1474MB/s 2914MB/s 11.5GB/s
Seq128kQ32T1write 3028MB/s 1629MB/s 8977MB/s
4kQ32T16read 1404MB/s 1527MB/s 35.3GB/s
343k IOPS 373k IOPS 8608k IOPS
4kQ32T16write 2057MB/s 4735MB/s 18.2GB/s
502k IOPS 1156k IOPS 4447k IOPS
4kQ1T1read 101MB/s 99.6MB/s 4950MB/s
24.6k IOPS 24.3k IOPS 1208k IOPS
40.30us 40.78us 568.28ns
4kQ1T1write 325MB/s 310MB/s 3698MB/s
79.3k IOPS 75.7k IOPS 903k IOPS
12.26us 12.85us 825.77ns
*clat avg

看來NVME RAID0沒有什麼提升
可能是負載不夠大
改個參數 加上--ioengine=io_uring
並試著加大壓力試試

--name=Seq128kQ32T64read --bs=131072 --iodepth=32 --numjobs=64 --rw=read
--name=Seq128kQ32T64write --bs=131072 --iodepth=32 --numjobs=64 --rw=write
--name=4kQ1T64read --bs=4096 --iodepth=1 --numjobs=64 --rw=randread
--name=4kQ1T64write --bs=4096 --iodepth=1 --numjobs=64 --rw=randwrite
--name=4kQ32kT64read --bs=4096 --iodepth=32768 --numjobs=64 --rw=randread
--name=4kQ32kT64write --bs=4096 --iodepth=32768 --numjobs=64 --rw=randwrite

16x raid0 shm
Seq128kQ32T64read 44.1GB/s 38.8GB/s
Seq128kQ32T64write 58.9GB/s 20.4GB/s
4kQ1T64read 4841MB/s 37.3GB/s
1182k IOPS 9101k IOPS
4kQ1T64write 4006MB/s 19.8GB/s
978k IOPS 4830k IOPS
4kQ32kT64read 24.2GB/s 28.8GB/s
5908k 7041k
4kQ32kT64write 9111MB/s 19.3GB/s
2224k 4720k

在多執行緒的情況下,NVME RAID0在4kQ32kT64read可以有接近6百萬的IOPS
而這台主機的ramdisk可以在4kQ1T64read下有接近1千萬的IOPS(測試結果會飄)

主機的ramdisk可以到1000萬 表示主機能力有到
980 PRO 1TB 官方宣稱是1百萬IOPS 16顆理論上是1600萬
但測出來只有600萬
可能的原因 能調整的地方我隨便列了一下

PCIe 10-bit tag?
可能需要將device IRQbalance 改為 binding 特定 NUMA node?
同一個root下4個的先組raid0 做numa binding 後再做raid 0+0?
整個raid0的讀取寫入順序可能都要再review
到底要interleave還是sequence
各root complex, 各ssd device
關閉CPU的省電?
關閉OS的CPU硬體緩解?
使用擴展性更好的檔案系統?
ZFS直接使用16顆SSD?
HDFS CephFS直接把這台電腦當一個多節點叢集設定?

看國外的討論是 只要想把多個SSD併成一個單獨的檔案系統
都非常的沒有效率 16個SSD 每個獨立使用比較沒有問題
但問題就變成AP要能夠同時高效使用16個資料夾

要改的東西太多了 還是改天吧
這些東西就交給Storage廠RD去煩惱
這台主機規格開完 採購流程跑完 issue解完 系統設定測試調整完
下一代主機都出了

主機實際應用測試

這裡使用次世代定序分析流程做測試 從fastq到bam
輸入使用ERR194147(NA12878)
這是一個讀長100鹼基 讀深50倍的全基因體定序檔案
同時拿另一台Intel Xeon主機對比

2x Intel Xeon Gold 6342
16x 128GB Samsung DDR4-3200 ECC RDIMM
4x SAMSUNG PM9A3 3.84TB
Intel VROC RAID0 Chunk Size 128K
default ext4
default mount
2x SAMSUNG PM883 480GB
chipset raid1 裝系統

軟體使用開源軟體流程 GATK Best Practices
bwa-mem2 v2.2.1 custom build
AMD 使用 gcc 9.4.0 -flto -march=znver2
Intel 使用 Intel C Compiler 2022.1.0 -ipo -xICELAKE-SERVER -fno-unroll-loopsGATK 4.3.0.0
MarkDuplicatesSpark
BaseRecalibratorSpark
ApplyBQSRSpark
GATK bundle
Homo_sapiens_assembly38.fasta
dbsnp_138.hg38.vcf
Mills_and_1000G_gold_standard.indels.hg38.vcf
Homo_sapiens_assembly38.known_indels.vcf

時間記錄使用nextflow
結果如下表
AMD Intel
bwa 2h 29m 2s 2h 57m 12s
MarkDup 30m 28s 34m 9s
BQSR 13m 33s 20m 21s
ApplyBQSR 25m 21s 29m 52s
total 3h 40m 1s 4h 23m 29s

分析:
由於固定了bwa mem的batch size
在兩個平台上的CPU使用率只到3200%左右
無法線性成長到全核心使用
就算在這種情況下 Gold 6342使用AVX512還是比3995WX慢
而其他的步驟使用Spark平行 得益於核心數量 3995WX 皆稍快一點

心得:
業務們要努力 算算執行時間與花費金錢的CP值 多說服大頭們改用
Amazon AWS Genomics
Microsoft Azure Genomics
GCP Cloud Life Sciences
NVIDIA Clara Parabricks
Illumina DRAGEN

規格開完 招標驗收 機器上線
下一代CPU都出了
還有三星SSD等著出包

實在沒什麼理由不用雲端或商業硬體加速解決方案

--

※ PTT留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.229.59.159 (臺灣)
PTT 網址

chang1248w10/20 20:37這離日常使用多遠呢

家用千萬IOPS文書機

xleacigma10/20 20:38走ZNS的話會不會有效果?

xleacigma10/20 20:39當初想要從系統全面接手nand的open-channel 算是死了

從硬體到OS整條路要打通 再等等吧

a831211610/20 20:47看不懂推

windrain031710/20 20:52同行誒

Cubelia10/20 20:52

smallreader10/20 21:08看不懂推

a58524andy10/20 21:30

mrme94510/20 21:35真的看不懂推

xm3u4vmp610/20 21:38可怕 至少一百萬才能入門那台

oppoR2010/20 21:50看成資生堂 想說我走錯了嗎

cardofang10/20 22:34你好,想請教CPU散熱是風冷還是水冷

Noctua NH-U12S TR4-SP3 之前用過某牌的TR4全覆蓋360AIO 遇到一次水冷液瑕疵 沒幾個月就堵死 空冷的可靠性還是高一點 而且3995wx沒辦法解功耗牆 空冷就夠了

rettoly10/20 22:51Optane DCPMM 能到10m iops嗎

查了一下 Optane DCPMM Random Read 約6M IOPS Random Write 約2M IOPS

https://tinyurl.com/y646c2bm

https://lenovopress.lenovo.com/lp1085.pdf

sdbb10/21 00:14偉哉

friedpig10/21 00:49純硬體算起來還是便宜拉 不過維護人工算起來真的別浪費

friedpig10/21 00:49時間自己弄了

※ 編輯: fo40225 (36.229.6.174 臺灣), 10/21/2022 06:28:55

xiaotee10/21 20:00