What Every Programmer Should Know About Memory

  • 作者: 雪山肥魚
  • 時間: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)

北橋初期架構(gòu).png

如圖所示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)過北橋
  • 瓶頸:

  1. 設(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):


MC脫離北橋.png
  • 優(yōu)點
  1. 多條內(nèi)存總線猴仑,增加帶寬
  2. 對并發(fā)訪問內(nèi)存更加友好(by simultaneousely accessing different memory banks
  3. 主要的性能限制歸咎與北橋內(nèi)部的帶寬

只有南橋的架構(gòu)

無北橋架構(gòu).png

將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倍,并且并不需要龐雜的北橋輔助的情況下篡诽。

缺點:

  1. 內(nèi)存非統(tǒng)一 NUMA崖飘, Non-Uniform Memory Architechture。一塊CPU 一塊內(nèi)存杈女。
  • 這里的local memory(memory attached to a processor)
  • 跨CPU的內(nèi)存訪問朱浴,比較特殊。
  1. 跨cpu 的remote memory access, 會存在一個 numa factors. cpus 會組成node达椰,也會涉及node之間的內(nèi)存訪問翰蠢,這時的 numa factors 是很大的,對性能影響很嚴重啰劲。

RAM 簡介

在一臺機器中為說明會有兩種RAM梁沧?
如果全部配成DRAM,慢蝇裤。
如果全部配成SDRAM廷支,成本太高,而且體積會很大栓辜。

SRAM

Static RAM:


SRAM結(jié)構(gòu).png

SRAM的一個cell 由6個晶體管組成恋拍,只要vdd長期供電,則會一直在BL BL非讀取到值.
關(guān)于SRAM知道以下幾點即可

  1. 一個cell 有 6個 晶體管啃憎,1-4 存儲 5-6 輸出
  2. 只要給vdd持續(xù)供電,就會一直保存cell的值
  3. 只要WL給一個上拉電壓似炎,就可以一直讀出狀態(tài)
  4. 不需要向DRAM定時refresh電容充電辛萍,保存值。
    缺點很明顯羡藐,貴贩毕,大,性價比低仆嗦。

DRAM 簡介

Dram cell.png

DRAM的結(jié)構(gòu)比SRAM結(jié)構(gòu)簡單很多辉阶,元器件也非常精簡。電容有電荷時代表bit 1,無電荷代表bit 0
缺點:

  1. 電容漏電,每次從電容讀數(shù)據(jù)都會造成電荷流失谆甜,讀數(shù)據(jù)其實伴隨著一次寫操作
  2. 泄漏造成要定時refresh memory.
  3. 從cell讀出的數(shù)據(jù)不能用垃僚,需要通過 sense amplifer 放大電壓 bits line之間的打壓差后,存儲到 row buffer 才能使用.
  4. 電荷的流失和充電不是即時的规辱。被sense amplifer 探測到的電流不能用谆棺。說實話我也不知道為啥『贝總之一句話改淑。DRAM之所以慢,要等到電容充分放電或者充電后浴讯,才能訪問朵夏。

相對于SRAM 的有點就是小,便宜。

DRAM內(nèi)部結(jié)構(gòu)簡介

結(jié)構(gòu)

內(nèi)部矩陣結(jié)構(gòu).png

對應(yīng)之前敘述的DRAM的結(jié)構(gòu)榆纽,注意其中的word line仰猖、bit line、sense amplifer
宏觀上sense amplifers 又對接了 另一組DRAM 矩陣掠河。

layout.png

讀流程

Raw Address Strobe.png
RAS取數(shù)據(jù).png

當從word line中取出數(shù)據(jù)后亮元,word line 的電荷全部清空

CAS取數(shù)據(jù).png
row refresh.png

根據(jù) row buffer 中的數(shù)據(jù)(猜的), 重新給bit line 上電,形成row refresh

時序圖.png

工作流程: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確實很慢呀

寫流程

we使能.png
根據(jù)CAS 寫入數(shù)據(jù).png
重新row refresh.png
寫數(shù)據(jù)時序圖.png

工作流程(與讀相似)
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
Dram Array.png
  • 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仲锄。

bank內(nèi)部結(jié)構(gòu).png

發(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)存

NUMA示意圖.png

但是每塊CPU仍然可以訪問全部內(nèi)存,但是訪問速度就不同了春叫,訪問屬于自己的那一塊內(nèi)存肩钠,肯定是最快的。訪問其他的就變慢了暂殖。這就是為什么叫做 non-uniform!
not same the speed it can access all memory.

numa node 是多個CPU


多CPU節(jié)點.png

更夸張:


多CPU節(jié)點.png
NUMA中的node.png
NUMA.png

兄弟們 后續(xù)章節(jié)實在看不懂了价匠,更到這里把。剎車了央星。
其實第6章寫的很全面霞怀。奈何技術(shù)有限惫东,再沉淀寫日子莉给,回頭繼續(xù)讀把毙石。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市颓遏,隨后出現(xiàn)的幾起案子徐矩,更是在濱河造成了極大的恐慌,老刑警劉巖叁幢,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滤灯,死亡現(xiàn)場離奇詭異,居然都是意外死亡曼玩,警方通過查閱死者的電腦和手機鳞骤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來黍判,“玉大人喳瓣,你說我怎么就攤上這事寨腔。” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵腰埂,是天一觀的道長。 經(jīng)常有香客問我呀闻,道長拇惋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任陶舞,我火速辦了婚禮嗽测,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吊说。我一直安慰自己论咏,他們只是感情好,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布颁井。 她就那樣靜靜地躺著厅贪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪雅宾。 梳的紋絲不亂的頭發(fā)上养涮,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機與錄音眉抬,去河邊找鬼贯吓。 笑死,一個胖子當著我的面吹牛蜀变,可吹牛的內(nèi)容都是我干的悄谐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼库北,長吁一口氣:“原來是場噩夢啊……” “哼爬舰!你這毒婦竟也來了们陆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤情屹,失蹤者是張志新(化名)和其女友劉穎坪仇,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體垃你,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡椅文,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了惜颇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片皆刺。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖凌摄,靈堂內(nèi)的尸體忽然破棺而出芹橡,到底是詐尸還是另有隱情,我是刑警寧澤望伦,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布林说,位于F島的核電站,受9級特大地震影響屯伞,放射性物質(zhì)發(fā)生泄漏腿箩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一劣摇、第九天 我趴在偏房一處隱蔽的房頂上張望珠移。 院中可真熱鬧,春花似錦末融、人聲如沸钧惧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽浓瞪。三九已至,卻和暖如春巧婶,著一層夾襖步出監(jiān)牢的瞬間乾颁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工艺栈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留英岭,地道東北人。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓湿右,卻偏偏與公主長得像诅妹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子毅人,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容