關(guān)于TrueNAS用sata轉(zhuǎn)接卡的坑
起因
在這炎熱的八月,一波一波的高溫襲來。終于,以前用haswell平臺的舊筆記本改的NAS不堪重負(fù),在陪我度過了4年的時(shí)光后,在今年年初開始不斷藍(lán)屏重啟向我示警,直到今天徹底開不了機(jī)了。其實(shí)在前幾次連續(xù)藍(lán)屏后我就有了準(zhǔn)備,把重要資料在電腦上備份了一份,所以并沒有什么實(shí)際上的數(shù)據(jù)損失,只是又要去弄一臺NAS了。
因?yàn)橹坝玫腄SM 5系統(tǒng),對群暉這個品牌還是有一點(diǎn)好感的,但是在看了看現(xiàn)在夸張的成品NAS價(jià)格后,我還是準(zhǔn)備自己弄一套(主要還是窮)。
手上現(xiàn)在有2*ssd+2*hdd,在組這套NAS的時(shí)候我就打算用TrueNAS了,但是兩塊hdd就很尷尬,只能選條帶或者鏡像。因?yàn)榇蛩惆阎胺烹娔X硬盤上的資料再傳回來,所以條帶自然是不太可能,只好忍痛又買了4塊同容量的機(jī)械,想著能夠組6盤的raidz1/raidz2。但是尷尬的事情隨之而來,之前因?yàn)轭A(yù)算卡的比較死,主板買的很丐(CPU也沒用多好的,確實(shí)沒啥必要上好主板),主板上只有4個sata接口,要接上這額外的4塊硬盤就只能用擴(kuò)展卡或者IT模式的陣列卡。陣列卡聽說很熱,而且功耗高,所以我直接買了某寶銷量最高的pci x1轉(zhuǎn)sata口的擴(kuò)展卡,事情也隨之變得不對了起來。
問題出現(xiàn)
組好陣列后,跑了個fio試了下,發(fā)現(xiàn)在測試集選的夠大的情況下(遠(yuǎn)超過ARC大?。瑴y得的均速只有200M多點(diǎn)。我瞬間就感覺不好了,都說zfs性能差,不至于6盤組raidz都能差到比單盤連續(xù)讀寫還差吧?
不信邪的我開始懷疑是不是買的硬盤中有一塊是壞的,開始對單盤逐個進(jìn)行fio測試,但所有盤似乎都沒有明顯的問題,不論是連續(xù)讀寫還是4k讀寫都沒發(fā)現(xiàn)明顯的異常。正當(dāng)我一籌莫展的時(shí)候,目光看向了我那幾十塊錢買的sata轉(zhuǎn)接器上:“不會是這東西有問題吧?”
于是我將所有硬盤的fio測速同時(shí)運(yùn)行,結(jié)果發(fā)現(xiàn)連接到轉(zhuǎn)接卡的硬盤似乎總和速度似乎被那塊轉(zhuǎn)接芯片限制在大約400MB/s左右。查了查資料,原來這個ASMedia的轉(zhuǎn)接芯片工作在pcie2.0的協(xié)議上,在x1的pcie口上,其理論速度也僅500MB/s,于是一切都水落石出了。
在思考再三后,我將ssd從NAS上拆了下來,然后6塊機(jī)械硬盤采用4塊直連主板,2塊通過轉(zhuǎn)接卡的形式接入nas,陣列的fio測試數(shù)據(jù)終于來到了400MB/s左右??墒沁@樣還是有點(diǎn)奇怪,raidz應(yīng)該比這個速度快更多。在詳細(xì)的對比了直連主板和擴(kuò)展卡的fio的單盤測試數(shù)據(jù)后

fio-3.25
Starting 1 process
Jobs: 1 (f=1): [R(1)][100.0%][r=109MiB/s][r=27.8k IOPS][eta 00m:00s]
iops: (groupid=0, jobs=1): err= 0: pid=2470116: Thu Aug 10 20:04:35 2023
? read: IOPS=28.1k, BW=110MiB/s (115MB/s)(1096MiB/10001msec)
? ? slat (nsec): min=3247, max=78393, avg=5030.63, stdev=575.43
? ? clat (usec): min=18, max=2770, avg=30.27, stdev= 9.38
? ? ?lat (usec): min=28, max=2854, avg=35.35, stdev= 9.50
? ? clat percentiles (usec):
? ? ?|? 1.00th=[? ?28],? 5.00th=[? ?28], 10.00th=[? ?28], 20.00th=[? ?29],
? ? ?| 30.00th=[? ?30], 40.00th=[? ?30], 50.00th=[? ?31], 60.00th=[? ?31],
? ? ?| 70.00th=[? ?31], 80.00th=[? ?31], 90.00th=[? ?32], 95.00th=[? ?33],
? ? ?| 99.00th=[? ?37], 99.50th=[? ?42], 99.90th=[? 165], 99.95th=[? 247],
? ? ?| 99.99th=[? 260]
? ?bw (? KiB/s): min=109864, max=118200, per=100.00%, avg=112365.05, stdev=2239.38, samples=19
? ?iops? ? ? ? : min=27466, max=29550, avg=28091.26, stdev=559.84, samples=19
? lat (usec)? ?: 20=0.01%, 50=99.68%, 100=0.16%, 250=0.13%, 500=0.03%
? lat (usec)? ?: 750=0.01%
? lat (msec)? ?: 4=0.01%
? cpu? ? ? ? ? : usr=2.68%, sys=16.98%, ctx=280656, majf=0, minf=14
? 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=280650,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=110MiB/s (115MB/s), 110MiB/s-110MiB/s (115MB/s-115MB/s), io=1096MiB (1150MB), run=10001-10001msec
Disk stats (read/write):
? sda: ios=277593/0, merge=0/0, ticks=8155/0, in_queue=8154, util=99.10%

iops: (g=0): rw=read, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
fio-3.25
Starting 1 process
Jobs: 1 (f=1): [R(1)][100.0%][r=90.8MiB/s][r=23.2k IOPS][eta 00m:00s]
iops: (groupid=0, jobs=1): err= 0: pid=2474582: Thu Aug 10 20:06:12 2023
? read: IOPS=21.9k, BW=85.6MiB/s (89.7MB/s)(856MiB/10001msec)
? ? slat (nsec): min=3317, max=54624, avg=5602.10, stdev=1439.03
? ? clat (usec): min=23, max=31532, avg=39.59, stdev=90.62
? ? ?lat (usec): min=35, max=31589, avg=45.26, stdev=90.75
? ? clat percentiles (usec):
? ? ?|? 1.00th=[? ?37],? 5.00th=[? ?37], 10.00th=[? ?37], 20.00th=[? ?38],
? ? ?| 30.00th=[? ?38], 40.00th=[? ?38], 50.00th=[? ?38], 60.00th=[? ?39],
? ? ?| 70.00th=[? ?39], 80.00th=[? ?40], 90.00th=[? ?44], 95.00th=[? ?44],
? ? ?| 99.00th=[? ?50], 99.50th=[? ?56], 99.90th=[? 229], 99.95th=[? 237],
? ? ?| 99.99th=[ 1029]
? ?bw (? KiB/s): min=74120, max=92960, per=99.72%, avg=87399.79, stdev=6061.48, samples=19
? ?iops? ? ? ? : min=18530, max=23240, avg=21849.95, stdev=1515.37, samples=19
? lat (usec)? ?: 50=99.10%, 100=0.64%, 250=0.24%, 500=0.01%, 750=0.01%
? lat (usec)? ?: 1000=0.01%
? lat (msec)? ?: 2=0.01%, 4=0.01%, 20=0.01%, 50=0.01%
? cpu? ? ? ? ? : usr=2.57%, sys=14.93%, ctx=219145, majf=0, minf=16
? 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=219136,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=85.6MiB/s (89.7MB/s), 85.6MiB/s-85.6MiB/s (89.7MB/s-89.7MB/s), io=856MiB (898MB), run=10001-10001msec
Disk stats (read/write):
? sdg: ios=216665/42, merge=0/0, ticks=8328/88, in_queue=8434, util=99.07%

上面的為直連主板sata的測試結(jié)果,在直連主板的情況下,iops平均為28k,波動為1k,測速為110MB/s。但是通過擴(kuò)展卡的硬盤iops僅有22k,最差的時(shí)候甚至僅有18k,速度為85MB/s。那么解決方案也就很明確了,換it模式的陣列卡
后記
在換用it模式的陣列卡后,使用相同的方式測速,所有盤的IOPS測試的平均值為25k,波動為1k,速度為100MB/s。雖然比不上直連主板的性能,但由于陣列的性能瓶頸為最差的那塊盤,所以陣列整體的測速要好上很多,在寫入兩倍arc緩存大小的文件時(shí),速度能達(dá)到600-800MB/s。所以,軟陣列還是遠(yuǎn)離這種轉(zhuǎn)接卡比較好 :-(