iT邦幫忙

2021 iThome 鐵人賽

DAY 13
2
Software Development

閱讀 Linux Kernel 文件系列 第 13

# Day 13 Cache and TLB Flushing Under Linux (Q&A - I)

  • 分享至 

  • xImage
  •  

今天我們從 TLB 出發,來看看可以複習多少計算機組織架構的知識!

從 TLB 是什麼出發

  • TLB(Translation Lookaside Buffer) 是一個用來儲存分頁表(page table) 的快取(cache),用途是如同大多數快取,想要增加存取的效率,而這邊增加的是虛擬記憶體(vitual memory) 轉換成實體記憶體(physical memory)的效率。
    • 分頁表是用來儲存虛擬記憶體和實體記憶體之間的轉換(映射)關係
    • 虛擬記憶體是將機器可定址的空間映射到實體記憶體上,例如:32 位元的機器 (可定址空間為 2^32 byte --> 4GB),所以不管實體記憶體多大,在這個機器上運作的程序都會認為自己有 4GB 的記憶體可以使用,而實際上儲存的東西還是在實體記憶體上,那麼要怎麼從虛擬記憶體知道相對應的實體記憶體位置呢?靠的就是分頁表!
      • 使用虛擬記憶體的好處
        • 程式的鏈結(linking)、載入(loading) 更加容易實作
        • 可以很容易的做到程序間的隔離(安全性)
        • 可以輕鬆的做到共享程式碼(減少記憶體浪費) ...等等
    • 但是分頁表是存在 memory 中的,每次 memory access 都要到 memory 中查表做轉換之後,再到轉換後的位置做存取實在是太耗時了,所以 TLB 就誕生了!

記憶體轉換的過程

  • 那麼今天我們拿到一個虛擬記憶體位址(VA,Virtual Address),這個虛擬記憶體位址會經過怎麼樣的旅程呢?
    • 首先,CPU 執行一道指令,指令裡面包含 VA,那麼這個 VA 就會被傳到 TLB 上做查找,查找該 VA 對應的 PA (Physical Address)
    • 若有找到 (TLB hit),那麼就找到該 VA 對應到的 PA 了
    • 但若是沒找到 (TLB miss),那麼依據實作的不同,會有不同的對應操作
      • 若是硬體來做處理的話,會由硬體來遍歷分頁表(page table walk),看是否有有效的(valid)的分頁含有對應的 PA
      • 若是軟體來做處理的話,會由作業系統來遍歷分頁表,看是否有有效的分頁含有對應的 PA
        • 若沒有有效的分頁,那麼就會產生分頁錯誤 (page fault),由 OS 接管,來做相對應的處理 (page fault handler)
        • 若有的話,會將該分頁載入 TLB 中,並重新做一次 TLB 查找,此次就會找到相對應的 PA

比對 TLB entry 的過程

要如何確定我們在 TLB entry 中有找到我們要的對應的 PA 呢?

  • TLB 是一種快取,如同快取,TLB 也有分不同階層的 TLB,有 iTLB、dTLB、L1 TLB ... 等,而也如同快取的比對方式,TLB entry 會含有 VA 作為索引的部分以及實體記憶體的對應。
  • 但虛擬定址空間也分為很多個,不同的 process、host OS、guest OS、trust zone (ARM) 等等都是使用不同的虛擬定址空間,這些不同的定址空間是會有相同的 VA 索引但對應到不同的 PA ;
    • ARM 提出了 non-Global bit 和 ASID (Address Space IDentifier) 來做為判斷依據
    • RISC-V 也有 ASID,在 satp 中,看起來也是 有機會/想達到 類似的效果。(但還沒有好好地看過這部分的 spec)

TLB 的位置

TLB 是一個硬體 buffer,TLB 可能位於 CPU 和 CPU cache 之間、CPU cache 和 memory 之間,又或是位於不同 level 的 cache 之間,而不同的實作會影響到 cache 的定址方式是 VIVT、VIPT 還是 PIPT,至於這些 cache 的定址方式,我們就留到明天再來記錄吧!

參考資料

可能可以參考的程式碼

以下都有 RISC-V 上面的 TLB 相關實作,也許有相關操作的程式碼可以參考(筆者僅查到這些相關資料,尚未檢視過XD)


上一篇
# Day 12 Cache and TLB Flushing Under Linux (四)
下一篇
# Day 14 Cache and TLB Flushing Under Linux (Q&A - II)
系列文
閱讀 Linux Kernel 文件30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
高魁良
iT邦新手 1 級 ‧ 2021-09-23 08:53:03

感謝大大熱心整理。

我要留言

立即登入留言