NAS最本質(zhì)的功能是存儲與傳輸,不管廠商多加了什么花里胡哨功能,對用戶而言讀寫性能永遠是最重要的,只不過現(xiàn)在大部分NAS都無法進行直接準確的讀寫量化測試,用戶遇到傳輸慢或者掉速會比較難定位問題點。
本文分享下量化NAS讀寫能力的測試教程,對應(yīng)測試硬盤+運行硬件+NAS系統(tǒng)的綜合性能,適用幾乎所有品牌NAS,也歡迎大家把測試結(jié)果發(fā)在評論區(qū)共享,覺得有所幫助歡迎關(guān)注點贊收藏三連,有復(fù)雜問題咨詢請單獨聯(lián)系。
在正式開始教程前,先和大家分享一下讀寫性能相關(guān)的基礎(chǔ)知識。
1??存儲硬件與存儲池的區(qū)別
不管NAS新手老手應(yīng)該都知道,初次使用必定有創(chuàng)建存儲池這一步,如果這里選擇RAID,可以簡單理解為將多塊物理硬盤合并一塊虛擬硬盤。
除了RAID-0以外都是以鏡像備份形式保護數(shù)據(jù),組建RAID后會導(dǎo)致可用容量下降+讀寫能力下降,由于不同硬件+系統(tǒng)優(yōu)化水平不同,不同NAS的最終讀寫性能表現(xiàn)也會有所區(qū)別。
除了RAID以外,不同文件系統(tǒng)也會影響傳輸性能,比如btrfs和ext4就會有性能上的差別,用固態(tài)硬盤做加速的話差別會更大。
2??測試使用工具說明
Windows系統(tǒng)有CrystalDiskMark和ASS SD Benchmark等知名測試工具,這里為新手朋友介紹下關(guān)鍵數(shù)據(jù):
● 第一是順序讀寫速度,單位為MB/s,測試結(jié)果越大越好,對應(yīng)大文件的讀寫能力。
● 第二是隨機讀寫速度,單位為MB/s,測試結(jié)果越大越好,對應(yīng)小文件的讀寫能力。
● 第三是讀寫延遲,單位為ms,測試結(jié)果越小越好,對應(yīng)響應(yīng)速度。
這三類數(shù)據(jù)綜合起來看,才能完成評估設(shè)備的理論傳輸能力,如果是走網(wǎng)絡(luò)協(xié)議,最終傳輸速度還會受到路由器限制,后續(xù)有機會單獨再出一篇說吧。
常規(guī)NAS幾乎都是以Linux為內(nèi)核,當然也就用不了上述工具,Linux目前除了文件系統(tǒng)本身自帶的Benchmark以外,主流是用FIO進行評估測試,本次教程的核心工具也是它。
動手前先需要了解在用NAS是否適用本次教程,同時也需要準備必要的軟件。
1??NAS廠商支持說明
首先你得有臺NAS,適用本次教程的NAS型號不限,處理器不區(qū)分ARM和X86架構(gòu),只要能SSH+支持Docker就行,群暉、威聯(lián)通、萬由和鐵威馬肯定可以。
需要注意一點,群暉和威聯(lián)通自帶了測速工具,只不過測試的是硬盤本身的性能,并不能測試存儲池的性能,這兩者的區(qū)別上文說過不再贅述。
嘗試了下極空間和綠聯(lián),用內(nèi)置Docker管理器并不能賦予容器完整的特權(quán)模式,這會導(dǎo)致創(chuàng)建測試文件會失敗,請自行搜索這類輕NAS的SSH登錄方法,省的這兩家又碎碎念我。
2??必要工具和NAS狀態(tài)說明
不同NAS的內(nèi)置Docker管理器會有所區(qū)別,分開講解起來會非常麻煩,本文偷個懶,統(tǒng)一用第三方SSH工具作為演示,我用的是FinalShell,請去官方下載一下。
http://www.hostbuf.com/t/988.html
動手測試前請確認兩點:
● 先給NAS創(chuàng)建好存儲池,盡量在空盤狀態(tài)下進行測試,已有的存儲池需要預(yù)留100G及以上的的空閑空間。
● 如果有多個存儲池且想全方位測試讀寫能力也是可以的,分幾次掛載不同存儲池跑就行,這也是本次分享的意義所在。
幾乎所有NAS都不允許直接安裝第三方軟件,這里用容器版本的Ubuntu曲線救國,整個測試流程有兩個注意點:
● 第一是準確的在目標存儲池上創(chuàng)建容器的掛載文件夾,不然測試的可能是其他存儲池。
● 第二是需要正確賦予Ubuntu容器特權(quán)模式,不然會出現(xiàn)FIO卡創(chuàng)建測試文件的問題。
如果看不懂上面這兩句話也問題不大,嚴格跟著下文走就不會出錯,除了掛載文件夾以外,不同NAS操作上的區(qū)別不大。
下面開始正式教程,先確認要測試的存儲池是哪個,點擊設(shè)置中的共享文件夾選項就能看到。
第一步,先創(chuàng)建掛載用文件夾,創(chuàng)建完成后右鍵該文件夾,確認該文件夾的真實路徑,部分NAS可能要手動加上,我這里是:
/volume1/docker/ubuntu
第二步,SSH登錄NAS,登錄后用切換到su模式,輸入:
sudo -i
按回車鍵(enter)確認
按照提示輸入密碼,這里看不到輸入的密碼,盲打。
按回車鍵(enter)確認
第三步,部署容器版本ubuntu,將黑體字替換成剛創(chuàng)建好的文件夾真實路徑:
docker run -it -v /主機路徑:/mnt --privileged ubuntu bash
這里我修改為:
docker run -it -v /volume1/docker/ubuntu://mnt --privileged ubuntu bash
按回車鍵(enter)確認
正確部署完應(yīng)該如下圖所示,已經(jīng)用特權(quán)模式登錄到Ubuntu的容器,而不是SSH登錄NAS,切記檢查一下,至此測試環(huán)境已經(jīng)部署完成,這個窗口不要關(guān),開始安裝FIO。
PS:如果這時候不小心把ssh給關(guān)了,或者后期要重新做測試,重新SSH登錄后輸入上面代碼就可以重新進入。
第一步,更新Ubuntu的軟件源,輸入:
apt update
按回車鍵(enter)確認
第二步,等待更新完成后,安裝fio,輸入:
apt install fio
按回車鍵(enter)確認
期間會按下圖所示提示是否繼續(xù)執(zhí)行,輸入:
Y
按回車鍵(enter)確認
等全部執(zhí)行完成后應(yīng)該如下圖所示,至此fio安裝完成,窗口不要關(guān),下面開始實際測試環(huán)節(jié)。
第一步,創(chuàng)建一個用于存放測試文件的文件夾,輸入:
cd /mnt
按回車鍵(enter)確認
mkdir test
按回車鍵(enter)確認
接下來開始運行fio進行測試,下面四行代碼分別對應(yīng)順序讀取、順序?qū)懭?、隨機讀取和隨機寫入,切記單次只能執(zhí)行一個任務(wù):
順序讀取
fio --filename=/mnt/test/testfile --size=100GB --direct=1 --rw=read --bs=128M --ioengine=libaio --iodepth=32 --runtime=120 --numjobs=4 --time_based --group_reporting --norandommap --name=iops-test-job --eta-newline=1
順序?qū)懭?/span>
fio --filename=/mnt/test/testfile --size=100GB --direct=1 --rw=write --bs=128M --ioengine=libaio --iodepth=32 --runtime=120 --numjobs=4 --time_based --group_reporting --norandommap --name=iops-test-job --eta-newline=1
4K隨機讀取
fio --filename=/mnt/test/testfile --size=100GB --direct=1 --rw=read --bs=4k --ioengine=libaio --iodepth=256 --runtime=120 --numjobs=4 --time_based --group_reporting --name=iops-test-job --eta-newline=1
4K隨機寫入
fio --filename=/mnt/test/testfile --size=100GB --direct=1 --rw=write --bs=4k --ioengine=libaio --iodepth=256 --runtime=120 --numjobs=4 --time_based --group_reporting --name=iops-test-job --eta-newline=1
復(fù)制代碼后按回車執(zhí)行,測試時間可能會比較長,請耐心等待。
這里我以隨機讀取的結(jié)果為例,關(guān)鍵數(shù)據(jù)如下圖所示:
● 上紅框為平均值,包含速度和IOPS兩個單位。
● 下紅框為詳細數(shù)據(jù),包含速度和IOP兩項的平均值、最小值和最大值。
細心的朋友應(yīng)該發(fā)現(xiàn),fio沒有讀寫延遲的統(tǒng)計,可以通過iostat命令可以另外查看,輸入:
iostat -x
下圖圈出來的兩處,左側(cè)框是讀取延遲,右側(cè)框則是寫入延遲。
本文到這里就結(jié)束了,給一拉到底的朋友畫個重點:
這套測試流程基于Docker和FIO這倆工具,部署的前提是NAS內(nèi)置可以賦予特權(quán)模式的Docker管理器,如果沒有那只能走SSH部署。
通過本教程可以直接測試NAS上某個存儲池的順序讀寫和隨機讀寫數(shù)據(jù),和硬盤本身讀寫能力有一定的區(qū)別,具體看開頭的說明。
以上就是本次分享,感謝觀看。