原書:《The Memory System: You Can‘t Avoid It, You Can’t Ignore It, You Can‘t Fake It》Bruce Jacob(Morgan&Claypool Publishers - Synthesis Lectures On Computer Architecture)出版時間:Jan 2009

個人漢化了此書的目錄與前言,以便大家在搜尋相關中文關鍵詞時能獲得參考,但也僅供參考。相關術語僅為個人翻譯,一切請以原文或已出版物中的翻譯為準。

note:

本文中將“Memory”翻譯為“記憶體”,“Storage”翻譯為“儲存/儲存器”,“Cache”翻譯為“快取”。

note:本書作者Bruce Jacob也是《Memory - Cache, DRAM, Disk》的作者之一。本書出版時間是2009年,引用原書第三章開頭的一句話:“我今天教你的東西,有可能在半年內就有一半會變得一文不值。關鍵在於找出是哪一半”。

就如本文封面一樣,這本書已經老得包漿了,內容出現部分過時是難免的(主要是資料和技術方面的,以及更主要地,許多現在的新趨勢沒能被考慮在內),但本書中的大量經驗以及思路對各領域初學者(包括程式設計師與架構師等等)而言仍具有相當的參考價值。這本書前面主要討論的是一些可能踩到的坑,後面則主要是作者當時對幾個可能方向的思考與展望。

關鍵詞:memory systems(記憶體系統), storage systems(儲存系統), memory scheduling(記憶體排程), system simulation(系統模擬), memory system design(記憶體系統設計), prefetching(預取), hash associative cache(hash相聯快取) , virtual memory(虛擬記憶體), superpages(超級頁面

[1]

), memory power(記憶體功耗), storage power(儲存器功耗), translation lookaside buffers(TLB, 快表), cache design(快取設計), DRAM systems(DRAM系統), memory bandwidth(記憶體頻寬) , memory latency(記憶體延遲) , memory trends(記憶體的趨勢/動向)

目錄漢化

序:我為什麼要關心記憶體系統? Prelude: Why Should I Care About the Memory System?

■■1 導論 Primers

■1 你的程式碼並不能脫離實際地執行 Your Code Does Not Run in a Vacuum

1 資料及其表示 Data and its Representation

2 變數和棧的分配 Variables and Stack Allocation

3 “隨意

[2]

訪問”一點也不隨意 `Random Access’ is Anything But

■2 效能表現角度方面 Performance Perspective

■3 記憶體系統的組成與操作 Memory-System Organization and Operation

■4 DRAM的各種應用狀況 State of the (DRAM) Union

■■2 必須正確地

[3]

對其建模 It Must Be Modeled Accurately

■1 一些背景知識 Some Context

■2 記憶體系統建模 Modeling the Memory System

■3 模型間的比較 Comparing the Models

■4 讓我們將預取技術混入其中 Let‘s Add Prefetching to the Mix

■5 小結 Summary

■■3 。。。並且很快就會發生變化 。。。 and It Will Change Soon

■1 問題與趨勢 Problems and Trends

1 多核心的使用增加了工作集需求 The use of Multiple Cores Increases Working-Set Demands

2 多核心的頻寬需求約為每核心1GB/s Multicore Bandwidth Requirement is Roughly 1GB/s per Core

3 TLB覆蓋範圍擴充套件的並不好(。。。或者完全不,真的) TLB Reach does not Scale Well (。。。 or at all, Really)

4 你實際上並不能插入所有你買得起的DRAM

[4]

You Cannot Physically Connect to all the DRAM you can Afford to Purchase

5 DRAM重新整理在時間和功耗上都正在變得昂貴 DRAM Refresh is Becoming Expensive in Both Power and Time

6 快閃記憶體正在搶佔磁碟的市場 Flash is Eating Disk’s Lunch

7 針對大型系統,DRAM的功耗將超過CPU For Large Systems, Power Dissipation of DRAM Exceeds that of CPUs

8 片上快取層次結構非常複雜 On-Chip Cache Hierarchies are Complex

9 磁碟訪問仍然很慢 Disk Access is Still Slow

10 一般主機板上的導線還是很多 There are too Many Wires on a Typical Motherboard as it is

11 還有許多正在開發的新技術 Numerous New Technologies are in Development

■2 一些顯然的結論 Some Obvious Conclusions

1 需要一種新型的DRAM系統組織結構 A New DRAM-System Organization is Needed

2 快閃記憶體需要被整合 Flash Needs to be Integrated

3 超級頁面技術可能迴歸 Possibly Revisit Superpages

■3 一些建議 Some Suggestions

1 全緩衝DIMM(或者說“BOMB”) Fully Buffered DIMM, take 2 (aka ``BOMB‘’)

2 快閃記憶體的一些應用 Some Uses for Flash

3 超級頁面,以及超級TLB Superpages (Take 2) and SuperTLBs

4 hash相聯記憶體 The Hash-Associative Cache

■4 在廉價記憶體時代中的虛擬記憶體 Virtual Memory in the Age of Cheap Memory

尾:你不能偽造它 Postlude: You Can‘t Fake It

摘要漢化

如今,針對計算機體系的最佳化,必須同時在硬軟體兩個層面上針對記憶體系統(Memory System)進行詳盡的分析;否則不能做到這點的話,整個系統就會變得越來越複雜、越來越低效。

本講座的目的是位讀者介紹記憶體系統中最重要的細節;面向的讀者包括工業界和學術界的計算機科學家和工程師。粗略地說,計算機科學家是記憶體系統的使用者,而計算機工程師是記憶體系統的設計者。兩者都能從有關記憶體系統真正工作原理的基本瞭解中受益匪淺:計算機科學家將可以創造出更好的演算法,而計算機工程師則能在資源有限的情況下,設計出更好的系統。

目前,架構研究者們都一致認為記憶體系統是“瓶頸”,這種共識已存在了十多年。但有點令人費解的是,該領域中的大部分研究仍是針對CPU的:針對CPU進行改進,以更好地容忍適應緩慢的記憶體系統。而不是直接地解決記憶體系統的弱點。

本講座應該能幫助大多計算機科學家和工程師跨過學習曲線中的一個陡峭部分。儘管並不是每個CS/CE研究員/開發人員都需要在記憶體系統中工作。但若獲得對記憶體系統的更好直覺的話,一定能夠有助於他們建立更好的軟體,同時包括軟體和硬體。

序:我為什麼要關心記憶體系統?

不管您是否願意承認,您的程式碼都並不會在真空中執行(即,脫離實際地執行):程式必須透過物理資源進行計算和儲存。當然,寫程式碼的人可以完全不知道這些物理資源的狀況,亦或它們是如何工作的。但僅僅是這樣的話,通常並不能實現更好的效能或者更小的能耗。這一教訓是我們很早就從中學到的;因此,如今任何針對硬軟體的優秀分析(good analysis),都會考慮到處理器(包括多處理器)中的具體細節情況。

我們已經步入到了這一階段,因此必須從作為背景的記憶體系統中汲取知識。

如今,針對計算機體系的最佳化,必須同時在硬軟體兩個層面上針對記憶體系統(Memory System)進行詳盡的分析;否則不能做到這點的話,整個系統就會變得越來越複雜、越來越低效。為什麼會這樣?這點是非常直觀的:

隨著系統變得越發複雜,元件(component)間那些那些次要的相互作用也開始相繼出現,甚至佔據主導地位。然後,那些忽略這些相互作用的模型就會開始變得越來越不準確,因為它們所代表的的系統變得越來越複雜了。

這導致的一個後果就是,依賴於這些模型的研究和開發人員在建立系統時,將面臨著越來越大的風險,因為這些系統可能無法實現模型預測的效能,或者在電力和冷卻需求方面超出預算。

曾經的系統比較簡單,因此簡單的模型也就足夠了;但在如今,無論是計算還是儲存方面,系統都已經不再簡單,簡單模型的簡單結論,如今已經不夠用了。

本講座的目的是位讀者介紹記憶體系統中最重要的細節;面向的讀者包括工業界和學術界的計算機科學家和工程師。因此所涵蓋的主題範圍非常廣泛。其中一個當然的問題就是:“為需要知道有關記憶體系統的什麼?”:

你需要了解相關的基礎知識。包括你的程式碼與物理儲存器(physical storage)間的互動方式。DRAM系統的執行基本原理(不是技術細節)。以及對現今技術和趨勢的一些見解。

你需要明白,你會被簡化的模型誤導地多麼嚴重。如今幾乎所有的模擬器都僅僅只基於一個非常簡化的記憶體系統模型(包括許多聲稱使用了“精確到時鐘週期的記憶體系統模型”的模擬器)。近乎所有的研究都在使用這樣的模型,無論是學術界還是工業界。一個日益顯著的趨勢就是:在文獻中描述的某些軟硬體機制能夠進入到生產系統中,但隨後就被取消了。這些問題相互之間都是密切相關的。

你需要知道不久的將來會是什麼樣子,因為很多細節都將會發生改變。但社群所面臨的一些重要問題並不會無故消失。而且某些問題是致命的,不盡快解決的話,效能提升就會變得平緩(很多人認為這已經發生了)。有趣一點的是,許多問題之間都存在著共同的解決方案,這可能暗示著未來的方向。無論社群所選擇的方向是什麼,不管問題是否成真,我們都應該去意識到它們,並考慮好相應可能的解決方案,以對將發生的變故做好準備。

如前所述。本講座面向的讀者同時包括工業界和學術界的計算機科學家和工程師。粗略地說,計算機科學家是記憶體系統的使用者,而計算機工程師是記憶體系統的設計者。兩者都能從有關記憶體系統真正工作原理的基本瞭解中受益匪淺:計算機科學家將可以創造出更好的演算法(如我們所知的所謂的大O記號只是一種初階理解,因為演算法必須在實際情況中執行),而計算機工程師則能在資源有限的情況下,設計出更好的系統。

目前,架構研究者們都一致認為記憶體系統是“瓶頸”,這種共識已存在了十多年。但有點令人費解的是,該領域中的大部分研究仍是針對CPU的:針對CPU進行改進,以更好地容忍適應緩慢的記憶體系統。而不是直接地解決記憶體系統的弱點。

本講座應該能幫助大多計算機科學家和工程師跨過學習曲線中的一個陡峭部分。儘管並不是每個CS/CE研究員/開發人員都需要在記憶體系統中工作。但若獲得對記憶體系統的更好直覺的話,一定能夠有助於他們建立更好的軟體,同時包括軟體和硬體。

【目錄與序言漢化】記憶體系統:你無法避免它,也不能無視它,更不能欺騙它《The Memory System: You Can't Avoid It,... Ignore and Fake It》

參考

^

如linux的大頁(huge page)

^

Random:隨機的,隨意的(非事先決定或不規則),這裡重點要傳達的意思是“非事先決定或不規則”。即,記憶體訪問每次的表現(如延遲)並不是一樣的,資料訪問的順序、資料編排順序等非常多因素,都會對記憶體訪問的表現造成很大影響。

^

Accurately:準確地/精確地/正確地

^

就是說,記憶體介面(DIMM)擴充套件所需的成本非常高,DRAM現在並不昂貴,你可以買得起十條二十條高容量的記憶體條,但卻很難將它們全部插入一個主機板上,因為主機板並不能提供這麼多的記憶體介面,或者說是提供更多記憶體介面的開銷太高昂了。