計算機中程式執行時所有的指令和資料都是從儲存器中取出來執行的。儲存器是計算機系統中的重要組成部分,相當於計算機的倉庫,用來存放各類程式及其處理的資料。因此儲存器的容量和效能應當隨著處理器的速度和效能的提高而通過提高,以保持系統效能的平衡。 然而在過去的 20 多年中,隨著時間的推移,處理器和儲存器在效能發展上的差異越來越大,儲存器在容量尤其是訪問延時方面的效能增長越來越跟不上處理器效能發展的需要。為了縮小儲存器和處理器兩者之間在效能方面的差距,通常在計算機內部採用層次化的儲存器體系結構。
從上圖可以看到,速度越快則容量越小、越靠近 cpu。cpu 可以直接訪問內部儲存器。而外部儲存器的資訊則要先取到主存,然後才能被 cpu 訪問。cpu 執行指令時,需要的運算元大部分來自暫存器,當需要對儲存器進行讀寫操作時,先訪問 cache ,如果不在 cache 中,則訪問主存,如果不在主存中,則訪問硬碟。此時,運算元從硬碟中讀出送到主存,然後從主存送到 cache。
資料使用時,一般只在相鄰兩層之間複製傳送,而且總是從慢速儲存器複製到快速儲存器。傳送的單位是乙個定長塊,因此需要確定定長塊的大小,並且在相鄰兩層間建立塊之間的對映關係。
為什麼需要cache
由於 cpu 和主存所使用的半導體器件工藝不同,兩者速度上的差異導致快速的 cpu 等待慢速的儲存器,為此需要想辦法提高 cpu 訪問主存的速度。除了提高 dram 晶元本身的速度和採用並行結構技術以外,加快 cpu 訪存速度的主要方式之一是在 cpu 和主存之間增加高速緩衝器,也就是我們主角 cache。 cache 位於 cpu 和記憶體之間,可以節省 cpu 從外部儲存器讀取指令和資料的時間。
程式訪問的侷限性
對大量典型程式運**況分析的結果表明,在較短的時間間隔內,程式產生的位址往往集中在儲存空間的乙個很小範圍,這種現象稱為程式訪問的區域性性。這種區域性性可細分為時間區域性性和空間區域性性。時間區域性性是指被訪問的某個儲存單元在乙個較短的時間間隔很可能又被訪問。空間的區域性性是指訪問的某個儲存單元的臨近單元在乙個較短的時間間隔內很可能也被訪問。
instruction cache
指令 cache 只被用於快取指令,從外部儲存器讀取指令需要很長時間,如果外部儲存器是 flash,那麼 cpu 可能需要 50-100ns 才能獲得指令。
data cache
資料 cache 只被用於快取資料,和指令 cache 類似,cpu 要花費很長時間才能從外部的 sram 或者 sdram 取回資料。
cache工作原理
cache 是一種小容量高速緩衝儲存器,由快速的 sram 組成,直接製作在 cpu 晶元內,速度較快,幾乎與 cpu 處於同乙個量級。在 cpu 和主存之間設定 cache,總是把主存中被頻繁訪問的活躍程式塊和資料塊複製到 cache 中。由於程式訪問的區域性性,大多數情況下,cpu 可以直接從 cache 中直接取得指令和資料,而不必訪問慢速的主存。
為了方便 cache 和主存間交換資訊,cache 和主存空間都被劃分為相等的區域。例如將主存中乙個 512 個位元組的區域稱作乙個塊(block),cache 中存放乙個主存塊的區域稱作行(line)。
cache的行有效位
系統啟動時,每個 cache 行都為空,其中的資訊無效,只有 cache 行中裝入了主存塊之後才有效。為了說明 cache 行中的資訊是否有效,某乙個行都有乙個有效位。通過將一行的有效位清零來淘汰這一行中所儲存的主存快的操作稱為沖刷,也就是我們常說的刷 cache。
cpu在cache中的訪問過程
在 cpu 執行程式過程中,需要從主訪問指令或寫資料時,先檢查 cache 中有沒有要訪問的資訊,若有,就直接在 cache 中讀寫,而不用訪問主儲存器。若沒有,再從主存中把當前訪問資訊所在的乙個乙個主存塊複製到 cache 中。因此,cache 中的內容是主存中部分內容的副本。
cache與主存的平均訪問時間
需要判斷所訪問的資訊是否在 cache 中。若 cpu 訪問單元的主存塊在 cache 中,則稱 cache 命中(hit),命中的概率稱為命中率 p (hit rate)。若不在 cache 中,則為不命中(miss),其概率為缺失率(miss rate)。命中時,cpu 在 cache 中直接訪問資訊,所用的時間開銷就是 cache 的訪問時間 tc,稱為命中時間。缺失時,需要從主存讀取乙個主存塊送 cache,並同時將所需資訊送 cpu,因此所用時間為主存訪問時間 tm,和 cache 訪問時間 tc 之和。通常把從主存讀入乙個主存塊到 cache 的時間 tm 稱為缺頁損失。
cpu 在 cache 和主存層次的平均訪問時間為: ta = p * tc + (1 - p) * (tm + tc) = tc + (1 - p) * tm
cache對映方式
cache 行中的資訊取自主存中的某個塊。將主存塊複製到 cache 行時,主存塊和 cache 行之間必須遵循一定的對映規則。這樣 cpu 在要訪問某個主存單元時,可以依據對映規則到 cache 對應的行中查詢要訪問的資訊,而不用在整個 cache 中查詢。
根據不同的對映規則,主存塊和 cache 行之間有以下三種對映方式。
值得注意的是,cache 對程式設計師在編寫高階或低階語言程式時是透明的,因此程式設計師無需了解 cache 是否存在或者如何設定,感覺不到 cache 的存在。但是對 cahche 的深入了解有助於編寫出高效的程式!
ElasticSearch基本概念及原理
起源 lucene elasticsearch主要功能 索引結構 目前使用中,大多數都是乙個index,對應乙個type,在es 6.x版本中,乙個索引只允許存在乙個 type,後續版本會刪掉這個type的概念。settings定義不同的資料分布 索引的不同語義 索引 動詞 文件到elasticse...
Cache 基本概念
cache用來存放最近cpu訪問的一些memory的數值 l1 cache 離cpu比較近的cache,有i cache,d cache l2 cache 離cpu比較遠的cache,如果沒有內部的,可以在外面加 cpu盡可能從cache裡取資料,就減少了向外面訪問的頻率 同時也減小了功耗,外部功耗...
git學習之基本概念及原理
1 基於版本快照的資料儲存 git將其所管理的資料視為乙個微型檔案系統的一組快照,它儲存的不是檔案的變化或者差異,而是一系列不同時刻的檔案快照。每次提交或在git中儲存專案的狀態時,git基本上會抓取一張所有檔案當前狀態的快照,然後儲存乙個指向該快照的引用。出於效率的考慮,如果檔案並沒有發生變動,g...