一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

超全的SPDK性能評(píng)估指南

SSDFans ? 來源:未知 ? 作者:胡薇 ? 2018-11-26 09:58 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

通過fio工具測(cè)試磁盤性能

SPDK采用異步I/O(Asynchronous I/O)加輪詢(Polling)的工作模式,通常與Kernel的異步I/O作為對(duì)比。在此,主要介紹通過使用fio評(píng)估Kernel異步I/O,以及spdk fio_plugin的兩種模式。

01

fio評(píng)估kernel異步I/O(AIO)

fio支持多種模式的I/O引擎,同時(shí)也包含了測(cè)試異步I/O的引擎,即libaio。在測(cè)試異步I/O的時(shí)候,只需要將fio啟動(dòng)配置文件中的ioengine設(shè)為libaio即可。通常在做異步I/O的時(shí)候,I/O請(qǐng)求會(huì)發(fā)送到相應(yīng)的隊(duì)列中,等待被處理,因此隊(duì)列深度將會(huì)影響磁盤性能。所以在測(cè)試異步I/O的時(shí)候,根據(jù)磁盤的特性指定相應(yīng)的隊(duì)列深度(iodepth)。

測(cè)試Kernel異步I/O的fio配置參數(shù)示例如下:

[Global]ioengine=libaiodirect=1rw=randrwrwmixread=100 (100% reads), 70 (70% reads 30% writes), 0 (100 writes)thread=1norandommap=1time_base=1runtime=300sramp_time=10sbs=4kiodepth=32Numjobs=1[test]filename=/dev/nvme0n1

參數(shù)詳解

ioengine:指定I/O引擎,在這里測(cè)試Kernel的異步I/O,因此指定I/O引擎為libaio;direct: 指定direct模式O_DIRECT,I/O會(huì)繞過系統(tǒng)的page buffer;rw:讀寫模式,這里指定randrw表示混合隨機(jī)讀寫;rwmixread:混合隨機(jī)讀寫模式下read請(qǐng)求所占比例;thread:指定使用線程模式。由于spdk fio_plugin只支持線程模式,因此與Kernel對(duì)比時(shí),通常都統(tǒng)一指定線程模式來對(duì)比;norandommap:指定I/O時(shí),每次都獲取一個(gè)新的隨機(jī)offset,防止額外的CPU使用消耗;time_based:指定采用時(shí)間模式;runtime:測(cè)試時(shí)長(zhǎng);ramp_time:統(tǒng)計(jì)性能之前所運(yùn)行的時(shí)間,為了防止沒有進(jìn)行穩(wěn)態(tài)而造成的性能虛高帶來的影響;bs:I/O塊大小;iodepth:隊(duì)列深度;numjobs:worker的個(gè)數(shù);filename:指定測(cè)試的對(duì)象。

02

基于NVMe的fio_plugin

安裝步驟

a. 下載編譯fio:

git clone https://github.com/axboe/fiocd fio && git checkout fio-3.3make

b.下載編譯SPDK:

git clone https://github.com/spdk/spdkcd spdk && git submodule update --init./configure --with-fio=/path/to/fio/repo make

注意:由于fio_plugin要依賴fio中提供的一些依賴包,因此在運(yùn)行configure時(shí),必須指定fio目錄,否則默認(rèn)fio_plugin不會(huì)編譯

測(cè)試方法

a. 使用fio_plugin測(cè)試裸盤,需要引入fio_plugin路徑,因此在運(yùn)行fio時(shí),在fio命令之前加如下參數(shù):

LD_PRELOAD=/examples/nvme/fio_plugin/fio_plugin

b. 其次,需要在fio配置文件中設(shè)定ioengine為spdk。

c. 運(yùn)行fio時(shí)候,不僅要指定fio運(yùn)行配置文件,同時(shí)要通過額外的參數(shù)'--filename'指定spdk能夠識(shí)別的設(shè)備地址信息。通常,fio_plugin支持兩種模式下的測(cè)試,一是本地的NVMe設(shè)備,即NVMe over PCIe;二是遠(yuǎn)端的NVMe設(shè)備,即NVMe over Fabrics。如下所示:

NVMe over PCIe:LD_PRELOAD=.../fio_plugin fio config.fio '--filename=trtype=PCIe traddr=0000.06.00.0 ns=1'NVMe over Fabrics:LD_PRELOAD=.../fio_plugin fio config.fio '--filename=trtype=RDMA adrfam=IPv4 traddr=192.0.0.1 trsvcid=4420 ns=1'

其它說明

a. 對(duì)于使用1個(gè)core,測(cè)試多塊盤的情況,通常只需要設(shè)定numjob為1,同時(shí)在fio命令通過多個(gè)filename參數(shù)來指定多塊要測(cè)試的盤(多個(gè)filename參數(shù)之間用空格相隔即可),例如同時(shí)測(cè)試三塊盤:

LD_PRELOAD=.../fio_plugin fio config.fio '--filename=trtype=PCIe traddr=0000.06.00.0 ns=1' '--filename=trtype=PCIe traddr=0000.07.00.0 ns=1' '--filename=trtype=PCIe traddr=0000.08.00.0 ns=1'

b. 對(duì)于使用fio_plugin作為新的ioengine而引入的新的fio參數(shù)說明,可以通過以下命令查看相關(guān)參數(shù)說明:

LD_PRELOAD.../fio_plugin fio --enghelp=spdk

c. 此外,可以通過直接在ioengine中指定fio_plugin的絕對(duì)路徑,而無須每次運(yùn)行fio都動(dòng)態(tài)加載LD_PRELOAD。即: fio配置文件中添加修改ioengine=/examples/nvme/fio_plugin/fio_plugin;運(yùn)行fio config.fio '--filename=trtype=PCIe traddr=0000.06.00.0 ns=1'即可測(cè)試。

03

基于bdev的fio_plugin

基于bdev的fio_plugin是將I/O在spdk塊設(shè)備bdev之上進(jìn)行發(fā)送。而基于裸盤的fio_plugin,I/O是直接到裸盤上進(jìn)行處理。因此兩者最大的差別在于I/O是否經(jīng)過bdev這一層。因此,基于bdev的fio_plugin能夠很好的評(píng)估spdk塊設(shè)備層bdev的性能。

其編譯安裝與裸盤的fio_plugin完全相同,下面詳細(xì)介紹其測(cè)試方法:

a. 使用fio_plugin測(cè)試bdev性能,需要bdev fio_plugin的路徑,因此在運(yùn)行fio時(shí),在fio命令之前加如下參數(shù):

LD_PRELOAD=/examples/bdev/fio_plugin/fio_plugin

b. 其次,需要在fio配置文件中設(shè)定ioengine為spdk_bdev

c. 需要在fio配置文件中指定spdk啟動(dòng)配置文件。如下所示:

spdk_conf=./example/bdev/fio_plugin/bdev.conf

spdk運(yùn)行配置文件中指定了所有bdev的配置信息,示例如下:

[Malloc]

NumberOfLuns 1LunSizeInMB 128

[Nvme]

TransportID "trtype:PCIe traddr:0000:82:00.0" Nvme0

RetryCount 4TimeoutUsec 0AcctionOnTimeout NoneAdminPollRate 100000

d.運(yùn)行fio的時(shí)候,通過'--filename'直接指定所要測(cè)試的bdev名稱即可,示例如下:

LD_PRELOAD=.../fio_plugin fio config.fio '--filename=Nvme0n1'

其他說明

a. 使用基于bdev的fio_plugin測(cè)試多個(gè)設(shè)備時(shí)候,需要在spdk運(yùn)行配置文件中寫入相應(yīng)的bdev配置信息,其次在fio運(yùn)行時(shí),指定多個(gè)filename參數(shù)即可,多個(gè)filename之間用空格相隔。例如同時(shí)測(cè)兩個(gè)設(shè)備Malloc0與Nvme0n1,如下所示:

LD_PRELOAD=.../fio_plugin fio config.fio '--filename=Nvme0n1' '--filename=Malloc0'

b.同理,若查看基于bdev的fio_plugin相關(guān)參數(shù)說明,可以通過如下命令:

LD_PRELOAD.../fio_plugin fio --enghelp=spdk_bdev

c. 此外,可以通過直接在ioengine中指定fio_plugin的絕對(duì)路徑,而無須每次運(yùn)行fio都動(dòng)態(tài)加載LD_PRELOAD。即:

fio配置文件中添加修改ioengine=/examples/bdev/fio_plugin/fio_plugin;運(yùn)行fio config.fio '--filename=Nvme0n1'即可測(cè)試。

通過spdk perf測(cè)試磁盤性能

01

基于NVMe的perf工具

成功編譯spdk后,可在spdk/examples/nvme/perf/目錄下找到perf工具的二進(jìn)制運(yùn)行文件。perf使用方法如下所示:

perf -c -q -t

更多參數(shù)解析,請(qǐng)參考perf --help

perf支持本地的NVMe設(shè)備,同時(shí)也支持遠(yuǎn)端的NVMeoF的設(shè)備。使用范例如下:

NVMe over PCIe:perf -q 32 -s 1024 -w randwrite -t 1200 -c 0xF -o 4096 -r 'trtype:PCIe traddr:0000:06:00.0'NVMe over Fabrics:perf -q 32 -s 1024 -w randwrite -t 1200 -c 0xF -o 4096 -r 'trtype:RDMA adrfam:IPv4 traddr:192.0.0.1 trsvcid:4420'

對(duì)于同時(shí)測(cè)試多塊盤,只需要添加-r并指定設(shè)備地址即可,例如一個(gè)core測(cè)試三塊盤:

perf -q 32 -s 1024 -w randwrite -t 1200 -c 0x1 -o 4096 -r 'trtype:PCIe traddr:0000:06:00.0' -r 'trtype:PCIetraddr:0000:07:00.0' -r 'trtype:PCIe traddr:0000:08:00.0'

02

perf評(píng)估Linux異步I/O(AIO)

使用方式與測(cè)試spdkdriver相同,只需要在perf命令后添加設(shè)備名稱即可。使用范例如下:

perf -q 32 -s 1024 -w randwrite -t 1200 -c 0xF -o 4096 /dev/nvme0n1

03

基于bdev的perf工具

成功編譯spdk后,可在spdk/test/bdev/bdevperf/目錄下找到bdevperf工具的二進(jìn)制運(yùn)行文件。bdevperf使用方法如下所示:

bdevperf -c -q -t

更多參數(shù)解析,請(qǐng)參考perf --help。

其中,-c是指定bdevperf的配置文件,需要測(cè)試的bdev設(shè)備都在配置文件中指定,例如,若需要測(cè)試本地的兩塊NVMe設(shè)備,則bdevperf的配置文

件示例如下:

[Nvme]

TransportID "trtype:PCIe traddr:0000:82:00.0" Nvme0RetryCount 4TimeoutUsec 0AcctionOnTimeout NoneAdminPollRate 100000

相應(yīng)的bdevperf啟動(dòng)參數(shù)示例如下:

bdevperf -q 32 -s 1024 -w randwrite -t 1200 -o 4096 -m 0xF -c bdevperf.conf

對(duì)于bdevperf,若要測(cè)試多塊盤,則只需要在spdk配置文件中配置多塊盤的信息即可,例如同時(shí)測(cè)試三塊盤:

[Nvme]

TransportID "trtype:PCIe traddr:0000:82:00.0" Nvme0

TransportID "trtype:PCIe traddr:0000:83:00.0" Nvme1TransportID "trtype:PCIe traddr:0000:84:00.0" Nvme2RetryCount 4TimeoutUsec 0AcctionOnTimeout NoneAdminPollRate 100000

常見問題

1

通過fio與perf對(duì)SPDK進(jìn)行性能評(píng)估,得到的結(jié)果不同,大部分的時(shí)候perf所得到的性能會(huì)比fio所得到的性能要高。

兩種工具最大的差別在于,fio是通過與Linux fio工具進(jìn)行集成,使其可以用fio_plugin引擎測(cè)試SPDK設(shè)備。而由于fio本身架構(gòu)的問題,不能充分發(fā)揮SPDK的優(yōu)勢(shì),整個(gè)應(yīng)用框架仍然使用fio原本的架構(gòu)。例如fio使用Linux的線程模型,在使用的時(shí)候,線程仍然被內(nèi)核調(diào)度。而對(duì)于perf來說,是針對(duì)SPDK所設(shè)計(jì)的性能測(cè)試工具,因此在底層,不僅是I/O通過SPDK下發(fā),同時(shí)一些底層應(yīng)用框架都是為SPDK所設(shè)計(jì)的。例如剛剛所提到的線程模型,perf中是使用DPDK所提供的線程模型,通過使用CPU的親和性將CPU核與線程捆綁,不再受內(nèi)核調(diào)度,因此可以充分發(fā)揮SPDK下發(fā)I/O時(shí)的異步無鎖化優(yōu)勢(shì)。這就是為什么perf所測(cè)得的性能要比fio高,尤其是在使用單個(gè)線程(單核)同時(shí)測(cè)試多塊盤的情況下,fio所得性能要明顯小于perf所得性能。因此,在同等情況下,我們更推薦用戶使用perf工具對(duì)SPDK進(jìn)行性能評(píng)估。

此外,在多numjob的情況下,fio與perf對(duì)iodepth的分配是不同的。通常在fio中,指定的iodepth表示所有的job一共的iodepth,而在perf指定的iodepth(perf中-q參數(shù))通常指的是每個(gè)job所使用的iodepth。舉例如下:Fio:numjob=4, iodepth=128。則每個(gè)job對(duì)應(yīng)的iodepth為32(128/4)。Perf:-c 0xF (相當(dāng)于fio中numjob=4),-q 128(相當(dāng)于fio中iodepth=128)。則每個(gè)job對(duì)應(yīng)的iodepth為128。

2

對(duì)SPDK和內(nèi)核的性能評(píng)估時(shí),雖然性能有所提升,但是沒有看到SPDK官方所展示的特別大的性能差異。

首先,如問題1中所述,不同的工具之間所得出的性能結(jié)果是不同的,另外最主要的因素還是硬盤本身的性能瓶頸所導(dǎo)致的問題。例如,以2D NAND為介質(zhì)的Intel DC P3700,本身的性能都存在一定的瓶頸,因此無論是SPDK用戶態(tài)驅(qū)動(dòng)還是內(nèi)核驅(qū)動(dòng),都不會(huì)達(dá)到較高的IOPS。若換用更高性能的硬盤,例如使用以3D Xpoint為介質(zhì)的Optane(Intel DC P4800X)為測(cè)試對(duì)象,便會(huì)看到很大的性能差異。因此,硬盤性能越高,SPDK所發(fā)揮出的優(yōu)勢(shì)越明顯,這也是SPDK產(chǎn)生的初衷,其本身就是為高性能硬盤所訂制的。

3

關(guān)于評(píng)估不同硬盤的隊(duì)列深度(iodepth)與CPU core的問題。

通常根據(jù)不同硬盤的特點(diǎn),選擇不同的iodepth以及所使用的CPUcore。通常在評(píng)估以2D NAND、3D NAND介質(zhì)的硬盤,一般情況下,為了達(dá)到磁盤的最高性能,通常會(huì)選擇較高的iodepth(128或256)。對(duì)于P4XXX的硬盤,通??赡芤粋€(gè)CPU core無法達(dá)到滿IOPS,此時(shí)并不是由于一個(gè)core的能力不夠,而是由于硬盤中硬件隊(duì)列本身限制的問題。因此,通常需要使用兩個(gè)CPU core才能夠達(dá)到specification中的滿IOPS。此外,對(duì)于以3D Xpoint為介質(zhì)的Optane(Intel P4800X),通常只需要一個(gè)core并使用較小的iodepth即可達(dá)到滿IOPS,此時(shí)已經(jīng)達(dá)到硬盤的上限,若再次增大iodepth只會(huì)是latency變大而IOPS不再增長(zhǎng)。

下面給出各種硬盤建議的評(píng)估參數(shù):Intel P3700: numjob=1, iodepth=128Intel P4500、Intel P4510、Intel P4600:numjob=2, iodepth=256Intel Optane(Intel P4800X):numjob=1, iodepth=8/16/32

4

關(guān)于寫性能虛高的問題。

通常以2D NAND、3D NAND為介質(zhì)的硬盤,在測(cè)試write/randwrite的性能時(shí)候,通常要比sepcification里的最高值高很多。這是由于這類介質(zhì)本身的問題,所以在測(cè)試時(shí)會(huì)出現(xiàn)write/randwrite性能虛高的問題。因此在測(cè)試該類硬盤,為了避免此類現(xiàn)象,通常需要對(duì)磁盤做一次precondition。通常的做法為:在格式化之后,對(duì)磁盤不斷進(jìn)行寫操作,寫滿整個(gè)磁盤,使其進(jìn)行穩(wěn)態(tài)。以DC P3700 800GB為例,通常首先以4KB的大小順序?qū)憙尚r(shí),之后再隨機(jī)寫一小時(shí)。此外,在測(cè)試的時(shí)候,fio參數(shù)中的ramp_time可以設(shè)置較大一些,避免初始的虛高值計(jì)入最終結(jié)果。

5

關(guān)于磁盤性能測(cè)試指標(biāo)。

通常,對(duì)于一個(gè)磁盤的性能,我們主要從三方面去評(píng)估:IOPS、bandwidth、latency。

IOPS:通常評(píng)估磁盤的IOPS,主要關(guān)注塊大小為4k,隨機(jī)讀寫的情況。因此,通常fio關(guān)鍵參數(shù)為:bs=4k,iodepth=128,direct=1,rw=randread/randwrite。

Bandwidth:評(píng)估磁盤的bandwidth,通常是關(guān)注塊大小為128k,順序讀寫的情況。因此,通常fio關(guān)鍵參數(shù)為:bs=128k,iodepth=128,direct=1,rw=read/write。

Latency:評(píng)估latency通常情況下,是關(guān)注一個(gè)I/O發(fā)送/完成的延遲情況,因此,通常選擇iodepth為1。因此,通常fio關(guān)鍵參數(shù)為:bs=4k,iodepth=1,direct=1,rw=randread/randwrite。此外,對(duì)于latency的結(jié)果,不僅要關(guān)注平均值,同時(shí)也要注意長(zhǎng)尾延遲,即99.99%的延遲情況。

注意:通常在測(cè)試磁盤的性能時(shí),要添加direct=1,即繞過系統(tǒng)的cache buffer。這時(shí)測(cè)得的性能為裸盤的性能 。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • SSD
    SSD
    +關(guān)注

    關(guān)注

    21

    文章

    2984

    瀏覽量

    119607
  • 磁盤
    +關(guān)注

    關(guān)注

    1

    文章

    390

    瀏覽量

    25839

原文標(biāo)題:基于SPDK的NVMe SSD性能評(píng)估指南

文章出處:【微信號(hào):SSDFans,微信公眾號(hào):SSDFans】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    [分享] 的EDA軟件生成坐標(biāo)文件教程

    點(diǎn)下邊文字即可下載  的EDA軟件生成坐標(biāo)文件教程
    發(fā)表于 11-14 18:29

    超強(qiáng)布線經(jīng)驗(yàn)教程大全

    超強(qiáng)布線經(jīng)驗(yàn)教程大全
    發(fā)表于 08-03 21:42

    單片機(jī)編程實(shí)例

    單片機(jī)編程實(shí)例
    發(fā)表于 07-05 22:07

    經(jīng)典的FPGA開發(fā)指南與電路圖集

    經(jīng)典的FPGA開發(fā)指南與電路圖集
    發(fā)表于 07-16 16:22

    超級(jí)codewarrior使用指南?。?/a>

    超級(jí)codewarrior使用指南??!
    發(fā)表于 10-13 23:42

    超強(qiáng)布線經(jīng)驗(yàn)教程大全

    超強(qiáng)布線經(jīng)驗(yàn)教程大全
    發(fā)表于 09-30 09:00

    超強(qiáng)布線經(jīng)驗(yàn)教程大全

    本帖最后由 lee_st 于 2017-10-31 08:43 編輯 超強(qiáng)布線經(jīng)驗(yàn)教程大全
    發(fā)表于 10-21 21:01

    分享高性能Android應(yīng)用開發(fā)清版PDF

    `性能問題在很大程度上決定了用戶是否會(huì)使用一款A(yù)pp,本書正是android性能方面的關(guān)鍵性指南。全書共8章,主要從電池、內(nèi)存、CPU和網(wǎng)絡(luò)方面講解了電池管理、工作效率和速度這幾個(gè)方面的性能
    發(fā)表于 08-13 10:40

    半橋焊機(jī)器件選擇指南評(píng)估

    半橋焊機(jī)(IGBT /二極管)器件選擇指南評(píng)估板。各種拓?fù)浣Y(jié)構(gòu),包括兩個(gè)SW正向,半橋和橋,已用于低壓/大電流DC-ARC焊接機(jī),以最大限度地提高系統(tǒng)效率并提高效率。在這些拓?fù)浣Y(jié)構(gòu)中,半橋最常用于小型,低于230A的焊接機(jī)
    發(fā)表于 04-13 09:52

    實(shí)用的電路圖合集

    實(shí)用電路圖合集
    發(fā)表于 09-25 08:13

    Zynq-7000可編程SoC ZC706評(píng)估套件(ISE Design Suite 14.5)入門指南

    Zynq-7000可編程SoC ZC706評(píng)估套件(ISE Design Suite 14.5)入門指南
    發(fā)表于 05-19 14:20 ?21次下載
    Zynq-7000<b class='flag-5'>全</b>可編程SoC ZC706<b class='flag-5'>評(píng)估</b>套件(ISE Design Suite 14.5)入門<b class='flag-5'>指南</b>

    SPDK Thread模型設(shè)計(jì)與實(shí)現(xiàn) NVMe-oF的使用案例

    SPDK Thread 模型是SPDK誕生以來十分重要的模塊,它的設(shè)計(jì)確保了spdk應(yīng)用的無鎖化編程模型,本文基于spdk最新的release 19.07版本介紹了整體thread模型
    的頭像 發(fā)表于 07-03 16:20 ?2904次閱讀

    DA9230/31 評(píng)估指南用戶指南

    DA9230/31 評(píng)估指南用戶指南
    發(fā)表于 03-17 19:09 ?0次下載
    DA9230/31 <b class='flag-5'>評(píng)估</b><b class='flag-5'>指南</b>用戶<b class='flag-5'>指南</b>

    DA9230/31 評(píng)估指南用戶指南

    DA9230/31 評(píng)估指南用戶指南
    發(fā)表于 07-06 20:34 ?0次下載
    DA9230/31 <b class='flag-5'>評(píng)估</b><b class='flag-5'>指南</b>用戶<b class='flag-5'>指南</b>

    SPDK在虛擬化場(chǎng)景下的使用方法

    ? SPDK(全稱Storage Performance Development Kit),提供了一整套工具和庫,以實(shí)現(xiàn)高性能、擴(kuò)展性強(qiáng)、用戶態(tài)的存儲(chǔ)應(yīng)用程序。它是繼DPDK之后,intel在存儲(chǔ)領(lǐng)域
    的頭像 發(fā)表于 11-10 10:12 ?2424次閱讀
    <b class='flag-5'>SPDK</b>在虛擬化場(chǎng)景下的使用方法