天天看點

實體/虛拟高速緩存差別以及高速緩存重名/同名問題詳解概述實體高速緩存虛拟高速緩存VIPT工作過程VIPT重名問題題目

概述

    處理器在通路存儲器時,通路的位址都是虛拟位址,經過TLB和MMU的映射後變成實體位址。TBL隻用于加速虛拟位址到實體位址的轉換過程。得到實體位址後,若每次都直接從實體記憶體中讀取資料,顯然會變慢。實際上,處理器都配置了多級的高速緩存來加快資料的通路速度。

實體高速緩存

    當處理器查詢MMU和TLB并得到實體位址之後,使用實體位址查詢高速緩存,這種高速緩存稱為實體高速緩存。

缺點:使用實體高速緩存的缺點就是處理器在查詢MMU和TLB後才能通路高速緩存,增加了流水線的延遲時間。

    實體高速緩存的工作流程如下圖:

實體/虛拟高速緩存差別以及高速緩存重名/同名問題詳解概述實體高速緩存虛拟高速緩存VIPT工作過程VIPT重名問題題目

虛拟高速緩存

    若處理器使用虛拟位址來尋址高速緩存,稱為虛拟高速緩存。處理器在尋址時,首先把虛拟位址發送到高速緩存,若高速緩存裡找到需要的資料,就不需要通路TLB和實體記憶體。

缺點:會引入問題:1.重名(aliasing)問題,2.同名(homonyms)問題

虛拟高速緩存的流程圖:

實體/虛拟高速緩存差別以及高速緩存重名/同名問題詳解概述實體高速緩存虛拟高速緩存VIPT工作過程VIPT重名問題題目

總結:

1.不管是實體高速緩存和虛拟高速緩存,其實都是高速緩存,這裡采用虛拟/實體來區分查詢高速緩存的類别。

2.在查詢TLB前,都是先确認高速緩存是否被命中。

重名(Aliasing)問題

在作業系統中,多個不同的虛拟位址有可能映射相同的實體位址。由于采用高速緩存架構,那麼這些不同的虛拟位址會占用高速緩存中不同的高速緩存行,但是他們對應的是相同的實體位址。

例:VA1 和 VA2都映射到PA,在cache中有兩個cache line緩存了VA1和VA2。當程式往VA1寫入資料時,VA1對應的高速緩存行以及PA的内容會被更改,但是VA2還儲存着舊資料。這樣一個實體位址在高速緩存中就儲存了兩份資料,這樣會産生歧義。

實體/虛拟高速緩存差別以及高速緩存重名/同名問題詳解概述實體高速緩存虛拟高速緩存VIPT工作過程VIPT重名問題題目

同名(Homonyms)問題

  •  相同的虛拟位址對應着不同的實體位址,因為作業系統中不同的程序會存在很多相同的虛拟位址,而這些相同的虛拟位址在經過MMU轉換後得到不同的實體位址,就産生了同名問題。
  • 同名問題最常見的地方是程序切換。當一個程序切換到另外一個程序時,新程序使用虛拟位址來通路高速緩存的話,新程序會通路到舊程序遺留下來的高速緩存,這些高速緩存資料對于新程序來說是錯誤的并且是無用的。解決辦法是在程序切換時把舊程序遺留下來的高速緩存都置位無效,這樣就能保證新程序執行時得到一個幹淨的虛拟高速緩存。

高速緩存分類

  • VIVT(virtual index virtual tag):      使用虛拟位址的索引域和虛拟位址的标記域,相當于虛拟高速緩存。
  • PIPT(physical index physical tag): 使用實體位址的索引域和實體位址的标記域,相當于實體高速緩存。
  • VIPT(virtual index physical tag): 使用虛拟位址的索引和實體位址的标記域。

VIPT工作過程

實體/虛拟高速緩存差別以及高速緩存重名/同名問題詳解概述實體高速緩存虛拟高速緩存VIPT工作過程VIPT重名問題題目

處理器輸出的虛拟位址會同時做兩件事:

1.發送虛拟位址到TLB/MMU進行位址翻譯。

2.在高速緩存中進行索引和查詢高速緩存。

當上面兩件事情做完後,從1中可以得到PFN,可以得到實體位址的标記域(PT), 可以從2中得到高速緩存的标記域(tag),對這兩個标記域進行比較,如果相等,說明高速緩存命中了,如果不等,cache miss。

VIPT重名問題

采用VIPT方式也有可能導緻高速緩存重名的問題。在VIPT中,使用虛拟位址的索引域來查找cache組,這時有可能導緻多個cache組映射到同一個實體位址上。以linux kernel為例,它是以4KB大小為一個頁面進行管理的,那麼對于一個頁來說,虛拟位址和實體位址的低12bit(bit(11:0))是一樣的。是以,不同的虛拟位址映射到同一個實體位址,這些虛拟位址頁面的低12位是一樣的。如果索引域位于bit[11:0]範圍内,那麼就不會發生高速緩存重名。例如,cache line是32Byte,那麼資料域偏移offset使用5bit,有128個cache組,那麼索引域使用7bit,這種情況下剛好不會發生重名。

VIPT重名執行個體

以Linux kernel為例,page為4KB,假如索引域為bit[12:0],高速緩存的路(way)為8KB,則bit12索引高速緩存路(way)中的前4KB還是後4KB,bit[11:0]在4KB内進行索引。如下圖:

實體/虛拟高速緩存差別以及高速緩存重名/同名問題詳解概述實體高速緩存虛拟高速緩存VIPT工作過程VIPT重名問題題目

題目

在一個32KB的4路組相聯的cache中,其中cache line為32Byte,請畫出這個cache的cache line、way和set的示意圖。

   答: 在Cortex-A7和Cortex-A9的處理器上可以看到32KB大小的4路組相聯cache。下面來分析這個cache的結構圖。

cache的總大小為32KB,并且4路(way),是以每一路的大小為8KB: way_size = 32/4 = 8 (KB)

cache line的大小為32Byte,是以每一路包含的cache line數量為:num_cache_line = 8KB/32B = 256

繼續閱讀