1. 程式人生 > >簡要總結計算機各種延時(暫存器、cache、記憶體、磁碟)

簡要總結計算機各種延時(暫存器、cache、記憶體、磁碟)

 

Register暫存器

暫存器是中央處理器的組成部份,可用來暫存指令、資料和位址。通常有通用暫存器,如指令暫存器IR、程式計數器(PC)、累加器(ACC)、堆疊指標暫存器(SP)等,另外還有狀態暫存器(標記狀態Z、N、V、C)。暫存器最靠近CPU,隨取隨用,速度最快。

 

Cache

即高速緩衝儲存器,位於CPU與記憶體之間,容量小但速度快。由於CPU快而記憶體慢,CPU不存在直接讀/寫記憶體的情況,每次讀/寫記憶體都要訪問Cache。Cache Line是cache與記憶體同步的最小單位,典型的虛擬記憶體頁面大小為4K,Cache line為32或64位元組。Cache中一般儲存著CPU剛用過或迴圈使用的部分資料,當CPU再次使用該部分資料時可從Cache中直接呼叫,這樣就抹平了CPU與記憶體的速度差。Cache又分為L1、L2、L3(L1、L2一般整合在CPU上)。

理論上L1有著跟暫存器相同的速度,但L1工作在寫通過(write-through)模式下時,需要加鎖用來同步cache和記憶體的內容,這段期間L1不能被訪問,所以L1就沒暫存器快。L2、L3同樣需要加鎖,並且L2比L1慢,L3比L2慢。

cache下還有一個TLB,TLB是一個記憶體管理單元用於改進虛擬地址到實體地址轉換速度的快取。

 

RAM(主要針對DRAM)

即記憶體,其作用是用於暫存CPU的運算資料,以及與硬碟等外部儲存器交換的資料。記憶體的一個儲存週期是從儲存器收到有效地址(EA)開始,經過地址譯碼、驅動,直到被訪問的儲存單元被讀出/寫入為止。

簡單介紹下CPU訪問記憶體的流程:

1. 找到資料(一般為運算元)地址(或地址的地址)。(地址一般放在通用暫存器內)
2. 將地址送往記憶體管理單元(MMU),由MMU將虛擬的記憶體地址翻譯成實際的實體地址。
3. 將實體地址送往記憶體控制器,由控制器進行譯碼找到對應的儲存體。
4. 從對應的儲存體讀取資料送回給控制器,最後再送回CPU。

可以看出記憶體的工作流程比cache多出許多,每一步都會產生延遲。並且當外圍裝置(比如磁碟)通過DMA控制器與記憶體進行資料傳輸時(走資料匯流排),會與上面的CPU訪問記憶體發生衝突,此時CPU和DMA就會輪流挪用記憶體週期,這樣CPU訪問記憶體的速度就更慢了。

HardDisk

又稱硬碟驅動器,常見的有磁性旋轉機械盤和基於快閃記憶體的固態硬碟SSD,這裡主要講機械盤,當進行資料存取時,主要的速度影響來自於磁頭的尋道時間和碟片的旋轉時間,通常需要花費數毫秒的時間。如果是順序I/O還好,如果是隨機I/O,速度將很慢。雖然磁碟內部、作業系統及應用程式都對磁碟進行了快取優化,但速度還是遠遠不及記憶體。

下面是一張磁碟呼叫棧圖(引用Brendan Gregg)

最後以一張圖量化系統的各種延時時間(部分資料引用Brendan Gregg)