2012-03-22 384 views
7

我剛剛閱讀了兩篇文章,其中提供的信息不一致,所以我想知道哪一個是正確的。也許兩者都是正確的,但在什麼情況下?高速緩存控制器從主內存到L2高速緩存的讀取時間有多少個字節?

first一個狀態,我們取一個頁面大小時間

高速緩存控制器始終觀察內存位置被加載並從內存中的位置幾經內存位置剛剛加載數據讀。爲了給你一個真實的例子,如果CPU加載的數據存儲在地址1000中,緩存控制器將在地址1000之後加載來自「n」個地址的數據。這個數字「n」被稱爲頁面;如果一個給定的處理器正在處理4 KB頁面(這是一個典型值),它將從當前正在加載的內存位置(本例中爲地址1,000)以下的4,096個地址加載數據。在下圖中,我們將說明這個例子。

enter image description here

second一個狀態,我們取的sizeof(高速緩存行)+的sizeof(預取)時間

因此,我們可以總結出內存緩存的工作原理爲:

  1. CPU要求存儲在地址「a」中的指令/數據。
  2. 由於地址「a」中的內容不在內存高速緩存中,所以CPU必須直接從RAM中獲取內存地址 。
  3. 緩存控制器將從地址「a」開始的行(通常爲64字節)加載到緩存的內存中。這是比請求的CPU更多的數據,所以如果程序繼續按順序運行 (即詢問地址a + 1),CPU將詢問的下一條指令/數據將已經加載到內存高速緩存中。
  4. 稱爲預取器的電路加載位於該行之後的更多數據,即開始將地址爲a + 64的內容 加載到高速緩存中。舉一個真實的例子,Pentium 4 CPU具有一個256字節的 預取程序,因此它在加載到高速緩存中之後加載下一個256字節。
+0

它不能是一個完整的頁面。目前的處理器可以支持32位模式下最多4 MB的頁面和64位模式下1 GB的頁面。 – ughoavgfhw 2012-03-22 20:45:13

回答

9

完全依賴硬件實現。某些實現在時間爲—時從主內存加載單行,並且不同處理器之間的高速緩存行大小有很大差異。我已經看到從64字節一直到256字節的行大小。基本上,「高速緩存行」的大小意味着,當CPU從主RAM請求內存時,它一次執行的內容是n。因此,如果n是64字節,並且您在0x1004加載4字節整數,則MMU實際上將在總線上發送64字節,所有地址從0x1000到0x1040。整個數據塊將作爲一行存儲在數據緩存中。

某些MMU可以通過總線爲每個請求獲取多個高速緩存行 - 因此,在具有64字節高速緩存的機器上在地址0x1000處發出請求實際上會加載四條從0x1000到0x1100的行。Some systems可以使用特殊的高速緩存預取或DMA操作碼明確執行此操作。

然而,通過您的第一個鏈接文章是完全錯誤的。它混淆了OS memory page與硬件cache line的大小。這些是完全不同的概念。第一種是OS一次分配的虛擬地址空間的最小大小。後者是CPU如何與主RAM對話的細節。

他們彼此相似彼此相似只是當操作系統在物理內存上運行低時,它會將一些不最近使用的虛擬內存分頁到磁盤;那麼稍後再次使用該內存時,操作系統會將整個頁面從磁盤加載回物理RAM中。這與CPU從RAM加載字節的方式類似(但不相關),這就是「硬件祕密」作者混淆的原因。

一個很好的學習計算機內存的所有內容,以及爲什麼緩存工作的方式是Ulrich Drepper的論文What Every Programmer Should Know About Memory

+0

+1鏈接到Drepper的記憶紙。但是,頁面大小當然是hw特性,操作系統無法爲其選擇任意值(例如,查找頁表如何工作)。 – janneb 2012-03-22 21:25:55

+0

@janneb這個答案似乎並不是討論高速緩存提取,d-ERAT頁面大小,TLB大小和軟件VMEM表大小之間差異的正確位置。但長話短說,許多實現允許TLB中的可變頁面大小。我的桌上有一臺設備,可以將內存分配爲4kb,64kb或4mb的頁面。 – Crashworks 2012-03-22 21:36:19

+0

當然不是,但就目前而言,通過閱讀您的答案,人們可​​能會錯誤地理解內存頁面僅僅是操作系統的實現細節,而實際上它與硬件如何進行虛擬 - >物理地址查找密切相關。 – janneb 2012-03-22 21:44:24