- 作者: 雪山肥魚
- 時間:20210402 06:29
- 目的:內(nèi)存部分的結(jié)束
What Every Programmer Should Know About Memory
恕我直言邑滨,網(wǎng)上的原版pdf扇丛,關(guān)鍵地方缺少標點符號薄辅,著實令人蛋疼。還是看lwn原文把
https://lwn.net/Articles/252125/
# 內(nèi)存硬件的基礎(chǔ)只是
## introduction
## 硬件架構(gòu)
# RAM 簡介
## SRAM簡介
## DRAM簡介
## DRAM內(nèi)部結(jié)構(gòu)簡介
## DRAM相關(guān)屬于
## Memory Types(SDRAM)的演進
# CPU cahce
# VMA
# NUMA
內(nèi)存硬件的基礎(chǔ)知識
我對硬件了解幾乎為0,也就這兩天翻查閱了一些資料塞关。結(jié)合這篇文檔窿给,大致了解下即可。
Introduction
在上古時代的計算機四大基礎(chǔ)組成部分的速度其實差不多墩新。
- CPU
- Memory
- Mass Storage
- Network Interface
只不過后續(xù)人們主要研發(fā)CPU,導(dǎo)致其余的跟不上節(jié)奏窟坐,速度變慢或者到達了瓶頸海渊。所謂瓶頸,要么突破的cost會很大哲鸳, 要么需要調(diào)整整個的硬件結(jié)構(gòu)臣疑。
已經(jīng)調(diào)整了的硬件結(jié)構(gòu):
- RAM hardware design(speed and parallelism)
- Memory controller designs
- CPU cache
- DMA
硬件架構(gòu)
帶有北橋的架構(gòu)
如圖所示CPU與CPU之間,CPU與北橋之間用 FSB 總線進行通訊徙菠。北橋內(nèi)嵌memeory contoral , 內(nèi)存RAM的不同決定了MC的不同讯沈。DRAM,RamBus,SDRAM對接的Memory Contorl 是不同的
南橋被當作I/O橋,對接不同類型的總線婿奔,PCI-E,SATA,USB等
-
值得注意的點
- CPU之間的通訊必須經(jīng)過FSB總線
- 與RAM通訊必須經(jīng)過北橋
- RAM 只有單一的端口(多端口不在此處討論)
- CPU與南橋的I/O設(shè)備通訊缺狠,必須要經(jīng)過北橋
瓶頸:
- 設(shè)備對RAM的訪問
- 早期不管是在南橋還是北橋的所有通訊都要經(jīng)過CPU,非常涌向性能
- 引入DMA,DMA在北橋的幫助下萍摊,沒有CPU的介入挤茄,直接從RAM里接受或者儲存數(shù)據(jù),但會與CPU產(chǎn)生對RAM使用的競爭
2.北橋總線到RAM的瓶頸冰木,總線本身的瓶頸驮樊?
- 最小化延遲的方式來調(diào)度內(nèi)存訪問。當遇到 hyper-threads, cores, processors DMA同時訪問內(nèi)存,等待內(nèi)存訪問的時間會更長囚衔。
- 除了并發(fā)訪問挖腰,還有更多的訪問內(nèi)存的取到。訪問模式本身也會影響內(nèi)存模塊的性能练湿,特別是multiple memory channles,例如后續(xù)會討論到的有關(guān)RAM的訪問方式
后續(xù)言演進出不包含MC的北橋架構(gòu):
- 優(yōu)點
- 多條內(nèi)存總線猴仑,增加帶寬
- 對并發(fā)訪問內(nèi)存更加友好(by simultaneousely accessing different memory banks)
- 主要的性能限制歸咎與北橋內(nèi)部的帶寬
只有南橋的架構(gòu)
將MC模塊整合到CPU中,直接對接RAM
- SMP system based on AMD'Operation
- CSI(Common System Interface) Nehalem processors. Intel
對于這樣的架構(gòu)來說, 可用的memory banks數(shù)量和處理器一樣多肥哎。在一個4-CPU的電腦中辽俗,內(nèi)存帶寬是原來的4倍,并且并不需要龐雜的北橋輔助的情況下篡诽。
缺點:
- 內(nèi)存非統(tǒng)一 NUMA崖飘, Non-Uniform Memory Architechture。一塊CPU 一塊內(nèi)存杈女。
- 這里的local memory(memory attached to a processor)
- 跨CPU的內(nèi)存訪問朱浴,比較特殊。
- 跨cpu 的remote memory access, 會存在一個 numa factors. cpus 會組成node达椰,也會涉及node之間的內(nèi)存訪問翰蠢,這時的 numa factors 是很大的,對性能影響很嚴重啰劲。
RAM 簡介
在一臺機器中為說明會有兩種RAM梁沧?
如果全部配成DRAM,慢蝇裤。
如果全部配成SDRAM廷支,成本太高,而且體積會很大栓辜。
SRAM
Static RAM:
SRAM的一個cell 由6個晶體管組成恋拍,只要vdd長期供電,則會一直在BL BL非讀取到值.
關(guān)于SRAM知道以下幾點即可
- 一個cell 有 6個 晶體管啃憎,1-4 存儲 5-6 輸出
- 只要給vdd持續(xù)供電,就會一直保存cell的值
- 只要WL給一個上拉電壓似炎,就可以一直讀出狀態(tài)
- 不需要向DRAM定時refresh電容充電辛萍,保存值。
缺點很明顯羡藐,貴贩毕,大,性價比低仆嗦。
DRAM 簡介
DRAM的結(jié)構(gòu)比SRAM結(jié)構(gòu)簡單很多辉阶,元器件也非常精簡。電容有電荷時代表bit 1,無電荷代表bit 0
缺點:
- 電容漏電,每次從電容讀數(shù)據(jù)都會造成電荷流失谆甜,讀數(shù)據(jù)其實伴隨著一次寫操作
- 泄漏造成要定時refresh memory.
- 從cell讀出的數(shù)據(jù)不能用垃僚,需要通過 sense amplifer 放大電壓 bits line之間的打壓差后,存儲到 row buffer 才能使用.
- 電荷的流失和充電不是即時的规辱。被sense amplifer 探測到的電流不能用谆棺。說實話我也不知道為啥『贝總之一句話改淑。DRAM之所以慢,要等到電容充分放電或者充電后浴讯,才能訪問朵夏。
相對于SRAM 的有點就是小,便宜。
DRAM內(nèi)部結(jié)構(gòu)簡介
結(jié)構(gòu)
對應(yīng)之前敘述的DRAM的結(jié)構(gòu)榆纽,注意其中的word line仰猖、bit line、sense amplifer
宏觀上sense amplifers 又對接了 另一組DRAM 矩陣掠河。
讀流程
當從word line中取出數(shù)據(jù)后亮元,word line 的電荷全部清空
根據(jù) row buffer 中的數(shù)據(jù)(猜的), 重新給bit line 上電,形成row refresh
工作流程:1-3 就是所謂的 row activate 行激活
1唠摹、對所有的bit line 進行 pre-charge.
2爆捞、根據(jù) RAS 對所需word line 進行 pre-charge.
3、利用Sense Amplifiers 偵測的電壓差勾拉,讀取一行 word line 的數(shù)據(jù)煮甥,相當于存儲到raw buffer
4、根據(jù) CAS 讀取對應(yīng)列的數(shù)據(jù)
5藕赞、重新row refresh成肘,恢復(fù)數(shù)據(jù)
6、word line release
7斧蜕、colume address Strobe diasable
由上述流程圖也能看出双霍,DRAM確實很慢呀
寫流程
工作流程(與讀相似)
1、所有bit line pre-charge
2批销、根據(jù) RAS 對所需word line 進行 pre-charge.
3洒闸、數(shù)據(jù)存儲到raw buffer
4、we使能
5均芽、修改 row buffer 數(shù)據(jù)
6丘逸、row refresh
DRAM相關(guān)術(shù)語
參考資料 https://zhuanlan.zhihu.com/p/33444359
- dram array
多個DRAM存儲單元的矩陣 叫做dram array
raw buffer
存儲從 DRAM cell 扒下來數(shù)據(jù)的地方-
bank地址
https://blog.csdn.net/qq_39759656/article/details/81672895
結(jié)構(gòu).png
bank 可以理解為多個DRAM Arrays 組成,黑框的就是一個IC掀宋。正反兩面16個IC深纲。 單面成為一個Rank仲锄。
發(fā)送行地址的時候,同時還要發(fā)送兩個比特的bank地址湃鹊,用于區(qū)分是訪問哪個bank.這樣每個bank 有自己的row buffer, 就有了n個row buffer儒喊,使CPU大概率每個線程訪問時不同的bank。減少行激活涛舍,提高速度澄惊。
總結(jié):
以DDR3 DIMM 為例子:
2個 rank,16個IC, 每個IC 有8個bank,每個bank 有一組 dram arrays. 一個 dram arrays 有 mxn 個 dram cell. 一個cell 就是一個1T1C (one transistor and 1 capcitory)結(jié)構(gòu)富雅,一個三極管+1個電容
Memory Types(SDRAM) 的演進
-
SDR(single data rate)
SDR Operation.png -
DDR1
DDR1.png
上下沿都在傳輸數(shù)據(jù)
-
DDR2
DDR2.png
總線的頻率時原來的2倍掸驱,意味著貸款是原來的2倍
-
DDR3
DDR3.png
總之理解為越來越快,傳送的數(shù)據(jù)越來越多就完事兒了没佑。唯一注意的是文章后續(xù)要討論的NUMA 架構(gòu)的引入毕贼。
CPU Cache
上班劃水讀了一天,沒讀明白蛤奢。大部分都是實驗數(shù)據(jù)鬼癣。學(xué)到 多線程多進程并不會是性能提升,反而會爭奪FSB總線啤贩,導(dǎo)致性能下降待秃。才疏學(xué)淺,只能理解到這里了痹屹。再沉淀一段時間章郁,回頭再來看這一章節(jié)吧。了解程度 到 cache line 那一章節(jié)的文章志衍,暫且就夠了暖庄,能力不夠,先剎車吧楼肪。
Virtual Memory
和之前的文章差不多培廓,掠過
NUMA
https://www.youtube.com/watch?v=Vmb8xGD-LV8
https://www.youtube.com/watch?v=4JleOfUeDvg
簡單的理解就是一塊CPU(當然也可以多個CPU)享受一片內(nèi)存
但是每塊CPU仍然可以訪問全部內(nèi)存,但是訪問速度就不同了春叫,訪問屬于自己的那一塊內(nèi)存肩钠,肯定是最快的。訪問其他的就變慢了暂殖。這就是為什么叫做 non-uniform!
not same the speed it can access all memory.
numa node 是多個CPU
更夸張:
兄弟們 后續(xù)章節(jié)實在看不懂了价匠,更到這里把。剎車了央星。
其實第6章寫的很全面霞怀。奈何技術(shù)有限惫东,再沉淀寫日子莉给,回頭繼續(xù)讀把毙石。