帶寬是存儲(chǔ)系統(tǒng)一個(gè)的一個(gè)非常重要的衡量指標(biāo),內(nèi)存帶寬指的是CPU從內(nèi)存讀取或?qū)懭霐?shù)據(jù)到內(nèi)存的速率。我們今天來(lái)思考一個(gè)問(wèn)題,在你的應(yīng)用程序里內(nèi)存的訪問(wèn)帶寬能夠達(dá)到多少?
1、各代內(nèi)存規(guī)格
理論上內(nèi)存帶寬的計(jì)算公式是:Band Width = Speed * Data Width。在這個(gè)公式的基礎(chǔ)上,我們來(lái)看一下各代規(guī)格的內(nèi)存帶寬表現(xiàn)。
圖1 各代內(nèi)存帶寬規(guī)格
從上圖來(lái)看,DDR3代的內(nèi)存 DDR3代1066MHz的帶寬都已經(jīng)達(dá)到了8.5GB/s, DDR4代3200MHz更是達(dá)到了驚人的25.6G。廠家在進(jìn)行銷售的時(shí)候也都是用這個(gè)公式來(lái)算,言外之意就是告訴你:“我家的產(chǎn)品非常快,大家趕快來(lái)買啊!”
廠家這么宣傳似乎也不算錯(cuò),但是有誘導(dǎo)性的謊言在其中。廠家這個(gè)數(shù)據(jù)的基礎(chǔ)是內(nèi)存嚴(yán)格以順序IO的方式工作,而且把傳輸?shù)膬?nèi)存地址也當(dāng)數(shù)據(jù)來(lái)看,進(jìn)而計(jì)算出的結(jié)果。但我們?cè)凇秲?nèi)存隨機(jī)訪問(wèn)也比順序慢,帶你深入理解內(nèi)存IO過(guò)程》中明白了的是,內(nèi)存在并一定是所有的Data Speed周期都在源源不斷往外吐數(shù)據(jù)。在CPU傳入了行地址后,內(nèi)存打開(kāi)一行需要tRCD+tRP個(gè)時(shí)鐘周期的延遲。輸入列地址后,又需要等待CL個(gè)時(shí)鐘周期。而內(nèi)存作為易失性存儲(chǔ)元器件,又需要定時(shí)對(duì)所有的行進(jìn)行充電,來(lái)保證數(shù)據(jù)不丟失。所以,在實(shí)踐中,我們并不是總是能夠達(dá)到廠家宣傳的理論帶寬值。
注意:理論帶寬值計(jì)算時(shí)采用的是內(nèi)存的Speed,也就是其數(shù)據(jù)頻率。而內(nèi)存的延遲呢,用的是時(shí)鐘周期。現(xiàn)代的內(nèi)存在時(shí)鐘周期的上沿和下沿都可以傳輸數(shù)據(jù),所以數(shù)據(jù)頻率比Speed又慢了一半。對(duì)于筆者Speed為1067MHz的內(nèi)存條,其時(shí)鐘頻率是553MHz。
***說(shuō)過(guò),實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)。我們今天就來(lái)進(jìn)行一下實(shí)際的測(cè)試,看看內(nèi)存的到底每秒能給我們吐出多少的數(shù)據(jù)。和前文《實(shí)際測(cè)試內(nèi)存在順序IO和隨機(jī)IO時(shí)的訪問(wèn)延時(shí)差異》的測(cè)試方法類似,我們今天對(duì)方法進(jìn)行下小改動(dòng),用它來(lái)測(cè)試帶寬。
2、順序IO情況核心測(cè)試方法
測(cè)試代碼主體上和延遲測(cè)試差不多,定義一個(gè)指定大小的數(shù)組,然后以指定步長(zhǎng)對(duì)其進(jìn)行訪問(wèn)。
考慮到內(nèi)存對(duì)齊能提高性能,所以公平起見(jiàn),我們每次都是按內(nèi)存位寬去取的(一個(gè)double 8個(gè)字節(jié),正好是一個(gè)內(nèi)存位寬)。帶寬就是一秒內(nèi)訪問(wèn)過(guò)的字節(jié)總數(shù),所以我們通過(guò)如下代碼進(jìn)行計(jì)算。
result = total_accessed_bytes * 1000 / used_microseconds;
3、順序IO情況帶寬測(cè)試結(jié)果
筆者的服務(wù)器上的內(nèi)存條是DDR3,1067MHz,延遲參數(shù)為7-7-7-24。我們進(jìn)行了多場(chǎng)景的測(cè)試。
場(chǎng)景一:固定數(shù)組大小2K,調(diào)節(jié)步長(zhǎng)
數(shù)組為2k,足夠小到L1 cache全部都能裝的下。這時(shí)候其實(shí)基本實(shí)際內(nèi)存IO發(fā)生的很少,大部分都是更高效的L1 cache的IO,在CPU內(nèi)部就完成了。但最高值也才6G而已,也沒(méi)有達(dá)到廠家宣稱的8GB。
場(chǎng)景二:固定步長(zhǎng)為8,數(shù)組從32K到64M
數(shù)組越大,Cache越裝不下,數(shù)據(jù)訪問(wèn)的IO會(huì)更多地往后穿透到L2、L3和內(nèi)存。L1、L2、L3和內(nèi)存IO的性能依次遞減,因此數(shù)組越大,平均帶寬就會(huì)越低。
場(chǎng)景三:步長(zhǎng)為32,數(shù)組從32K到64M
步長(zhǎng)增加后,穿透到內(nèi)存的次數(shù)進(jìn)一步增加,帶寬進(jìn)一步下降。這個(gè)時(shí)候,我們應(yīng)用程序視角看到的數(shù)據(jù)帶寬已經(jīng)下降到1GB以下了。
4、再測(cè)隨機(jī)IO情況
前面的測(cè)試情況,雖然步長(zhǎng)也在變化,但都是有序遞增。這樣內(nèi)存的連續(xù)兩次IO之間,雖然列地址會(huì)變,但是行地址極有可能不發(fā)生變化,因此效率還是算比較高。我們這次是來(lái)徹底隨機(jī)進(jìn)行訪問(wèn),再來(lái)看一下。
當(dāng)數(shù)組比較小的時(shí)候,雖然亂序訪問(wèn),但是cache能兜住,因此內(nèi)存IO實(shí)際上發(fā)生的很少。但當(dāng)數(shù)組增加到64M的時(shí)候,再加上哪一級(jí)Cache都兜不住了。再加上訪問(wèn)又足夠隨機(jī),因此都穿透到了內(nèi)存,而且行的行地址也極大可能發(fā)生變化。這時(shí),內(nèi)存帶寬竟然下降到了474M。
5、結(jié)論
所以內(nèi)存的帶寬并沒(méi)有你想象的那么快,在隨機(jī)IO工作模式的情況下,帶寬只有474M而已。現(xiàn)在SSD固態(tài)硬盤順序IO也差不多能達(dá)到這個(gè)數(shù)量級(jí)了。所以,我們以后不要魯莽地說(shuō)內(nèi)存比硬盤要快很多。快不快,關(guān)鍵取決于你怎么用!
審核編輯:劉清
-
DDR
+關(guān)注
關(guān)注
11文章
716瀏覽量
65580 -
帶寬
+關(guān)注
關(guān)注
3文章
955瀏覽量
41114 -
時(shí)鐘
+關(guān)注
關(guān)注
11文章
1748瀏覽量
131877 -
存儲(chǔ)系統(tǒng)
+關(guān)注
關(guān)注
2文章
415瀏覽量
40956
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
InterBase和Firebird數(shù)據(jù)訪問(wèn)組件介紹
![InterBase和Firebird數(shù)據(jù)<b class='flag-5'>訪問(wèn)</b>組件介紹](https://file1.elecfans.com/web3/M00/07/03/wKgZO2eR2EuAbog3AAAcpcQhbhU048.png)
AWTK-WEB 快速入門(4) - JS Http 應(yīng)用程序
![AWTK-WEB 快速入門(4) - JS Http <b class='flag-5'>應(yīng)用程序</b>](https://file.elecfans.com/web2/M00/50/DA/pYYBAGLH6TyAB71EAAAPQ7KgtYA038.png)
ANACONDA——關(guān)于發(fā)布數(shù)據(jù)應(yīng)用程序的新簡(jiǎn)單方法
![ANACONDA——關(guān)于發(fā)布數(shù)據(jù)<b class='flag-5'>應(yīng)用程序</b>的新簡(jiǎn)單方法](https://file1.elecfans.com/web3/M00/06/60/wKgZO2eJ0ZOAHFqhAAAw14br-lU893.png)
通過(guò)Skyvia Connect SQL終端節(jié)點(diǎn)訪問(wèn)任何數(shù)據(jù)
![通過(guò)Skyvia Connect SQL終端節(jié)點(diǎn)<b class='flag-5'>訪問(wèn)</b>任何數(shù)據(jù)](https://file1.elecfans.com/web3/M00/04/89/wKgZO2d17N6AfFKxAAAOus01Dak970.png)
南亞科技與補(bǔ)丁科技攜手開(kāi)發(fā)定制超高帶寬內(nèi)存
如何使用內(nèi)存加速存儲(chǔ)訪問(wèn)速度
![如何使用<b class='flag-5'>內(nèi)存</b>加速存儲(chǔ)<b class='flag-5'>訪問(wèn)</b>速度](https://file1.elecfans.com/web3/M00/02/FF/wKgZPGdjiz2AXwLjAAAwXYJtCNc802.png)
AWTK-WEB 快速入門(1) - C 語(yǔ)言應(yīng)用程序
![AWTK-WEB 快速入門(1) - C 語(yǔ)言<b class='flag-5'>應(yīng)用程序</b>](https://file.elecfans.com/web2/M00/50/DA/pYYBAGLH6TyAB71EAAAPQ7KgtYA038.png)
什么是RAM內(nèi)存 RAM內(nèi)存對(duì)電腦性能的影響
這個(gè)機(jī)子內(nèi)存是不是集成到板子上了,哪里可以插個(gè)接口訪問(wèn)內(nèi)存?
有沒(méi)有能夠接受20M帶寬或者更高帶寬的比較器型號(hào)?
opa859里有單位增益和增益帶寬積,并且單位增益帶寬是增益帶寬積的兩倍,為什么?
租用服務(wù)器時(shí),從哪些方面來(lái)評(píng)測(cè)是否達(dá)標(biāo)的?
應(yīng)用程序中的服務(wù)器錯(cuò)誤怎么解決?
如何在ModusToolbox?中檢查和設(shè)置應(yīng)用程序的內(nèi)存地址?
CW32L052 DMA直接內(nèi)存訪問(wèn)
![CW32L052 DMA直接<b class='flag-5'>內(nèi)存</b><b class='flag-5'>訪問(wèn)</b>](https://file1.elecfans.com/web2/M00/C2/BE/wKgaomXe1U2AeokOAATX2KVj3HM981.png#pic_center)
評(píng)論