linux 內存管理(11) - TLB flush

  • 瞭解 TLB flush

1.TLB flush API

1.1.void flush_tlb_all(void);

  這個接口用來invalidate TLB cache中的所有的條目,執行完畢了該接口之後,由於TLB cache中沒有緩存任何的VA到PA的轉換信息,因此,調用該接口API之前的所有的對page table的修改都可以被CPU感知到。注:該接口是大殺器,不要隨便使用。

  對於ARM64,flush_tlb_all接口使用的底層命令是:tlbi vmalle1is。Tlbi是TLB Invalidate指令,vmalle1is是參數,指明要invalidate那些TLB。vm表示本次invalidate操作對象是當前VMID,all表示要invalidate所有的TLB entry,e1是表示要flush的TLB entry的memory space identifier是EL0和EL1,regime stage 1的TLB entry。is是inner shareable的意思,表示要invalidate所有inner shareable內的所有PEs的TLB。如果沒有is,則表示要flush的是local TLB,其他processor core的TLB則不受影響。

  flush_tlb_all接口有一個變種:local_flush_tlb_all。flush_tlb_all是invalidate系統中所有的TLB(各個PEs上的TLB),而local_flush_tlb_all僅僅是invalidate本CPU core上的TLB。local_flush_tlb_all對應的底層接口是:tlbi vmalle1,沒有is參數。

1.2.void flush_tlb_mm(struct mm_struct *mm);

  這個接口用來invalidate TLB cache中所有和mm這個進程地址空間相關的條目。執行完畢了該接口之後,由於TLB cache中沒有緩存任何的mm地址空間中VA到PA的轉換信息,因此,調用該接口API之前的所有的對mm地址空間的page table的修改都可以被CPU感知到。

  對於ARM64,flush_tlb_mm接口使用的底層命令是:tlbi aside1is, asid。is是inner shareable的意思,表示該操作要廣播到inner shareable domain中的所有PEs。asid表示該操作範圍是根據asid來進行的。

1.3.void flush_tlb_page(struct vm_area_struct *vma, unsigned long addr);

  flush_tlb_page接口函數對addr對應的TLB entry進行flush操作。這個函數類似於flush_tlb_range,只不過flush_tlb_range操作了一片VA區域,涉及若干TLB entry,而flush_tlb_page對range進行了限定(range的size就是一個page),因此,也就只是invalidate addr對應的tlb entry。

  對於ARM64,flush_tlb_page接口使用的底層命令是:tlbi vale1is, addr。va參數是virtual address的意思,表示本次flush tlb的操作是針對當前asid中的某個virtual address而進行的,addr給出具體要操作的地址和ASID信息。l表示last level,也就是說用戶修改了last level Translation table的內容(一般而言,PTE就是last level,在某些情況下,例如section map,last level是PMD),那麼我們僅僅需要flush最後一級的頁表(page table walk可以有多級)。

1.4.void flush_tlb_range(struct vm_area_struct *vma, unsigned long start, unsigned long end);

  flush_tlb_range接口是一個flush強度比flush_tlb_mm要弱的接口,flush_tlb_range不是invalidate整個地址空間的TBL,而是針對該地址空間中的一段虛擬內存(start到end-1)在TLB中的entry進行flush。

  ARM64並沒有直接flush一個range的硬件操作接口,因此,在ARM64的代碼中,flush一個range是通過flush一個個的page來實現的。

refer to

  • Documentation/core-api/cachetlb.rst
  • https://lwn.net/Articles/684934/
  • http://www.wowotech.net/memory_management/tlb-flush.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章