【底層原理】存儲(chǔ)數(shù)據(jù)包的一生(上)
最近認(rèn)認(rèn)真真學(xué)習(xí)了一個(gè)叫《Life of a Storage Packet》講座,借助這個(gè)講座將整個(gè)存儲(chǔ)的過程理解了下,不放過任何一個(gè)有疑問的點(diǎn)。這篇文章算是對(duì)講座的理解和自己收獲的總結(jié),同時(shí)也為那些對(duì)存儲(chǔ)系統(tǒng)不夠了解又想要了解的初學(xué)者,展現(xiàn)一個(gè)存儲(chǔ)數(shù)據(jù)包的“生命”。這個(gè)演講主要聚焦在“整體的存儲(chǔ)”,強(qiáng)調(diào)存儲(chǔ)系統(tǒng)中各個(gè)基本元素的關(guān)系,并且盡可能簡(jiǎn)單、清楚地用一種不同的方式可視化一些存儲(chǔ)的概念。
先上一張大圖,可以說這篇文章目的就是解釋這個(gè)圖:
整體視角
存儲(chǔ)系統(tǒng)從整體的分層一覽,包括了主機(jī)/應(yīng)用,存儲(chǔ)介質(zhì),存儲(chǔ)網(wǎng)絡(luò)。對(duì)于存儲(chǔ)來說就做了一件事:Here is a bit of data. Hold onto it. Give that same bit back to me when I ask for it.
Application視角
每個(gè)系統(tǒng)都有會(huì)有很多應(yīng)用程序運(yùn)行在CPU上,對(duì)于這些Application來說,他們覺得自己有很多很多足夠的可用內(nèi)存。
CPU和MMU
計(jì)算機(jī)系統(tǒng)中有一個(gè)“內(nèi)存管理單元”(MMU,Memory Management Unit)的概念,MMU負(fù)責(zé)與DRAM內(nèi)存直接通信,并且獲得一些可用的“頁(yè)”
多租戶:內(nèi)存被某個(gè)進(jìn)程(比如一個(gè)應(yīng)用)獨(dú)享,這些內(nèi)存不能被其他進(jìn)程重寫。
地址:將CPU的物理地址翻譯成獨(dú)有的DRAM地址或者是很多行DRAMs,有了MMU以后,對(duì)于每個(gè)進(jìn)程來說,他們就像是一個(gè)人獨(dú)占了所有的內(nèi)存一樣。
訪問內(nèi)存
Application在他需要訪問的時(shí)候,獲取這些內(nèi)存,在實(shí)際進(jìn)行訪問時(shí),會(huì)發(fā)生如下事情:
1:Application會(huì)問操作系統(tǒng)“Hey,我需要一些可用內(nèi)存”
2:操作系統(tǒng)向MMU說,“能給我一些可以使用內(nèi)存頁(yè)不?”
3:MMU把一些可用的內(nèi)存頁(yè)給操作系統(tǒng)
4:操作系統(tǒng)把這些可用的內(nèi)存頁(yè)給Application。
分配內(nèi)存
在上圖中,獲取的那些內(nèi)存,實(shí)際是可以分布在內(nèi)存中的任何地方的(非連續(xù)),MMU在把這些內(nèi)存給應(yīng)用的時(shí)候會(huì)進(jìn)行初始化操作,當(dāng)然,當(dāng)應(yīng)用不再訪問這些內(nèi)存頁(yè)的時(shí)候,也會(huì)MMU也會(huì)負(fù)責(zé)回收這些內(nèi)存。
加速訪問
如果Application對(duì)內(nèi)存的訪問,每次都要都要從MMU獲取的話,那太慢了,因此有個(gè)經(jīng)驗(yàn)法則是:Always put storage/memory as close to the CPU as possible
可以說在存儲(chǔ)中,改善時(shí)間的限制是永恒不變的主題,然后訪問DRAM的話,需要60-100ns的時(shí)間。我們需要更快的訪問,甚至達(dá)到“0”時(shí)間訪問。
緩存的魔法
于是在CPU中增加了一些緩存,當(dāng)然緩存也是分級(jí)別的,對(duì)于L1緩存大概花費(fèi)1ns以內(nèi),L2緩存大概花費(fèi)3-6ns,沒錯(cuò),這使得每次訪問從60-100ns提升了幾十倍!
更多的空間
如果DRAM中也沒有足夠的空間時(shí),這是你需要更多的持久化存儲(chǔ),比如說磁盤。當(dāng)然直接去訪問磁盤會(huì)非常的昂貴,當(dāng)然這里指的是時(shí)間的花費(fèi)非常昂貴。
在Jeff Dean大神的Software Engineering Advice from Building Large-Scale Distributed Systems給出了數(shù)據(jù):L1緩存、L2緩存、主存、硬盤的訪問分別是1ns、5ns、100ns、10,000,000ns級(jí)別;
舉個(gè)比較形象的例子:你需要快遞送個(gè)包裹,快遞一個(gè)1公里(L1)、5公里(L2)外的包裹,oops,可能馬云爸爸保證當(dāng)日達(dá);快遞100公里(DRAM)的包裹,11點(diǎn)前下單,當(dāng)日達(dá),不能再快了!;快遞1000萬公里(Disk)的快遞,啊親,你真的需要快遞嗎?這可是從地球到月球(38.4萬公里)十幾個(gè)來回的距離啊親。
小結(jié)
存儲(chǔ)設(shè)備和RAM不太一樣,不會(huì)和CPU直接進(jìn)行“對(duì)話”,而是有一些其他的部分來幫助他們完成對(duì)話,我們?cè)谙挛膹拇鎯?chǔ)視角進(jìn)一步去講述。
































