成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

多核CPU的TLB競爭:如何降低跨核刷新開銷

系統 Linux
通過使用頁表緩存,Linux內核能夠顯著提升虛擬地址到物理地址轉換的速度,從而加快系統的響應和執行效率。不過需要注意,在多處理器或多核系統上,由于存在并發訪問和一致性問題,對于共享數據結構如頁表緩存的設計與管理需要特別小心。

頁表緩存(Page Table Cache)是Linux內核中的一項關鍵機制,用于提高虛擬地址到物理地址轉換的性能。它在操作系統內部維護了一個緩存,用來存儲最近訪問過的頁表項。

當程序訪問虛擬地址時,需要將其轉換為物理地址才能進行實際的讀寫操作。這個轉換過程涉及到查找對應的頁表項,并且可能會導致缺頁異常等開銷較大的操作。為了減少這種開銷,Linux內核引入了頁表緩存。當某個虛擬頁面第一次被訪問時,相應的頁表項會被加載到頁表緩存中。如果之后再次訪問同樣的虛擬頁面,就可以直接從頁表緩存中獲取對應的頁表項,避免了頻繁地查找和加載。

通過使用頁表緩存,Linux內核能夠顯著提升虛擬地址到物理地址轉換的速度,從而加快系統的響應和執行效率。不過需要注意,在多處理器或多核系統上,由于存在并發訪問和一致性問題,對于共享數據結構如頁表緩存的設計與管理需要特別小心。

一、頁表緩存簡介

1.1虛擬與物理的橋梁

在計算機的世界里,內存是數據和程序運行的舞臺。其中,有兩個關鍵概念:虛擬內存與物理內存。物理內存,就像是計算機實實在在擁有的 “舞臺場地”,由內存條提供,程序運行時的指令和數據會臨時存儲在這個物理空間中 ,它的容量受限于硬件配置,像我們常見的 8GB、16GB 、32GB 內存規格,便是物理內存的大小體現。而虛擬內存,則像是一個 “虛擬的大舞臺”,操作系統通過將硬盤的一部分空間模擬成內存來實現。當物理內存不夠用時,它就會把暫時不用的數據從物理內存轉移到硬盤上的虛擬內存區域,等需要的時候再取回來。這種機制使得程序可以使用比實際物理內存更大的內存空間,就好像給計算機 “借” 了更多的場地來表演。

不過,虛擬內存和物理內存之間存在著一個關鍵問題:地址轉換。程序使用的是虛擬地址,而實際的數據存儲在物理內存中,這就需要一種機制將虛擬地址轉換為物理地址,才能準確地訪問到數據。頁表,就是實現這個轉換的關鍵數據結構,它記錄了虛擬地址和物理地址之間的映射關系。但頁表通常存放在內存中,每次地址轉換都要訪問內存中的頁表,而內存訪問速度相對較慢,這就像每次找東西都要去一個比較遠的倉庫(內存)查清單(頁表),效率不高。

這時,頁表緩存(Translation Lookaside Buffer,TLB)就登場了,它就像是一個放在身邊的 “快速清單”。TLB 是一種高速緩存,位于 CPU 的內存管理單元(MMU)中,專門用于存儲虛擬地址到物理地址的映射關系 。當 CPU 需要訪問一個虛擬地址時,會首先在 TLB 中查找對應的物理地址,如果找到了,就可以直接訪問物理地址對應的內存,這就大大加快了地址轉換的速度,如同直接在身邊的快速清單里找到了要找東西的位置,無需再跑去遠處的倉庫查清單,極大地提高了內存訪問的效率。頁表緩存雖小,卻在虛擬內存與物理內存之間搭建起了一座高速橋梁,是計算機高效運行不可或缺的關鍵角色。

1.2虛擬地址到物理地址的映射過程

虛擬地址到物理地址的映射過程是通過頁表完成的。在使用虛擬內存時,操作系統將物理內存劃分成固定大小的頁面(通常為4KB),并將每個進程的虛擬地址空間劃分成相同大小的頁面。

當程序訪問虛擬地址時,CPU會將該虛擬地址發送給內存管理單元(MMU),其中包含一個頁表基址寄存器(Page Table Base Register, PTBR)指向當前進程的頁表。

映射過程如下:

  1. CPU將虛擬地址發送給MMU。
  2. MMU根據虛擬地址中的頁號找到對應的頁表項。
  3. 如果頁表項中標記為有效,則獲取對應的物理頁框號。
  4. 將物理頁框號與虛擬地址中的偏移量組合,得到最終的物理地址。
  5. 將最終物理地址返回給CPU,程序可以訪問該物理地址上存儲的數據。

如果在步驟3中發現頁表項無效,則表示所請求的頁面不在物理內存中。這時可能觸發缺頁異常,操作系統需要從磁盤上加載對應頁面,并更新頁表項以建立新的映射關系。

(1)虛擬地址到物理地址轉換機制

①當應用程序需要訪問內存時,會生成一個虛擬地址。這個虛擬地址由兩個部分組成:頁號和偏移量。

圖片圖片

②操作系統將虛擬地址中的頁號與頁面表進行匹配,找到對應的Page Table Entry(PTE)。

③如果PTE中記錄了該頁面在物理內存中的位置,則操作系統將物理內存地址和偏移量組合成一個物理地址,并返回給應用程序。如果PTE中未記錄該頁面在物理內存中的位置,則產生一個缺頁異常。

圖片圖片

④在發生缺頁異常時,操作系統會嘗試從磁盤或其他存儲設備上加載相應頁面,并更新PTE以反映新頁面所處的位置。

圖片圖片

⑤一旦新頁面加載到物理內存中,操作系統就可以使用步驟3中描述的方式來計算出該頁面在物理內存中的位置,并返回給應用程序。

這樣,在之后訪問同一段虛擬地址時,就不需要再次發生缺頁異常,而是直接查找PTE并返回對應的物理地址。

(2)線性地址和虛擬地址之間的關系

線性地址是CPU產生的地址,它是由段選擇符和偏移量組成。在進行內存訪問時,CPU會將線性地址轉換為物理地址,并將數據從物理內存中讀取或寫入。因此,線性地址是在CPU內部使用的,不直接對應物理內存中的位置。而虛擬地址則是應用程序使用的地址,它也由兩部分組成:頁號和偏移量。虛擬地址對應了應用程序所需訪問的具體數據塊在邏輯上的位置。操作系統會負責將虛擬地址轉換為物理地址,并實現內存訪問。

在這個過程中,操作系統采用了一些技術來實現虛擬地址到物理地址的轉換。例如,在32位x86架構中常用的方法是利用分頁機制(paging),將整個邏輯空間劃分為大小相等、連續編號的頁面(page)。每個頁面包含若干個字節,并且與一個PTE相對應。PTE記錄了該頁面是否已經加載到物理內存中以及其在物理內存中的位置等信息。

當應用程序需要訪問某個虛擬地址時,操作系統首先根據虛擬地址的頁號查找PTE,如果該頁面已經在物理內存中,則可以通過PTE計算出對應的物理地址,并將數據從物理內存中讀取或寫入。否則,就會發生缺頁異常,并且操作系統需要將相應頁面從磁盤或其他存儲設備上加載到物理內存中。

因此,線性地址和虛擬地址之間存在一定的關系。在32位x86架構中,線性地址是由段選擇符和偏移量組成的,而偏移量部分直接對應了虛擬地址的偏移量部分。同時,在進行內存訪問時,CPU會自動執行線性地址到物理地址的轉換,并且可以利用硬件支持來提高訪問速度。

圖片圖片

二、頁表緩存是什么

頁表緩存,全稱是 Translation Lookaside Buffer,簡稱 TLB ,也常被叫做快表,從專業角度來講,它是一種用于提高虛擬地址到物理地址轉換速度的硬件緩存機制。

在計算機系統中,CPU 運行程序時產生的是虛擬地址,而數據實際存儲在物理內存中,這中間就需要頁表來完成虛擬地址到物理地址的映射。然而,頁表存放在內存里,每次查詢頁表都要訪問內存,內存訪問速度相對較慢,這就好比每次找東西都要去較遠的倉庫翻清單,效率不高。

TLB 就如同在身邊設置的一個快速清單。它集成在 CPU 的內存管理單元(MMU)中,是一種高速緩存,專門用來存放近期使用過的虛擬地址與物理地址的映射關系 。當 CPU 要訪問一個虛擬地址時,會先到 TLB 里查找對應的物理地址。要是找到了(這就是命中),就能直接用找到的物理地址去訪問內存,極大地加快了地址轉換速度;要是沒找到(即未命中),CPU 就會去內存中的頁表查詢物理地址,然后把新的映射關系存入 TLB,方便下次快速查找 ??梢哉f,TLB 雖然容量不大,卻在虛擬內存和物理內存之間搭建起了一座高速橋梁,大大提升了內存訪問效率,是計算機系統高效運行的關鍵一環。

三、頁表緩存的工作原理

3.1地址查詢

當處理器需要訪問內存時,會如同在圖書館查找一本急需的書籍一般,首先在頁表緩存這個 “快速索引區” 查找所需的虛擬地址到物理地址的映射。假設我們正在運行一個辦公軟件,當軟件中的程序指令需要讀取存儲在內存中的用戶文檔數據時,CPU會產生一個虛擬地址。

這個虛擬地址就像是一個帶有編號的 “虛擬書架位置”,CPU拿著這個編號先來到頁表緩存這個“快速清單”前查找。如果在頁表緩存中找到了匹配的條目,也就是命中了,就好比在快速索引區找到了這本書的實際書架位置,CPU可以直接獲取對應的物理地址,從而避免了訪問內存中完整的頁表,大大提高了地址轉換速度,快速讀取到所需的數據,讓辦公軟件能流暢地將文檔內容展示在用戶面前 。

3.2緩存更新

要是在頁表緩存中未找到所需的映射,即未命中,情況就像在快速索引區沒找到那本書的位置,處理器就不得不去內存中的頁表這個 “完整藏書目錄” 查詢物理地址。當完成查詢,得到新的物理地址后,處理器會如同將新書的位置信息補充到快速索引區一樣,將新的映射關系添加到頁表緩存中,以便后續再次訪問相同虛擬地址時能夠更快地找到對應的物理地址 。

為了保證頁表緩存始終能高效工作,在添加新映射時,如果緩存已滿,就需要按照一定的替換策略,將那些不常用的條目替換出去,比如采用最近最少使用(LRU)策略,把長時間未被訪問的映射條目替換掉,讓頁表緩存時刻保持 “新鮮”,隨時為快速地址轉換服務,確保計算機系統的高效運行 。

3.3頁表緩存的特點剖析

(1)高速緩存

頁表緩存堪稱計算機硬件世界里的 “短跑冠軍”,它通常由高速硬件打造而成,要么是專用的高速緩存芯片,如同為其量身定制的高性能裝備;要么直接集成在處理器內部,與處理器緊密協作,就像親密無間的伙伴,能在極短時間內完成地址查詢,訪問延遲低至幾個時鐘周期 。

與之形成鮮明對比的是內存訪問,內存訪問速度相對較慢,每次查詢內存中的頁表,都如同在一條漫長的道路上行走,需要經過內存總線等硬件設備,可能要耗費多個時鐘周期才能完成一次訪問。在計算機運行過程中,若每次地址轉換都依賴內存訪問頁表,系統性能將會大幅下降,就像一個人背著沉重的包袱跑步,速度會大受影響。而頁表緩存的高速特性,使得 CPU 在進行地址轉換時,能快速獲取所需的物理地址,極大地提升了系統性能,讓計算機的運行更加流暢高效,如同為計算機插上了高速飛行的翅膀 。

(2)小容量

由于成本和芯片面積等因素的限制,頁表緩存的容量相對較小,通常只能存儲幾百到幾千個映射條目,就像一個空間有限的小型倉庫 。在實際應用中,計算機系統運行的程序眾多,進程的虛擬地址空間龐大,頁表中記錄的虛擬地址到物理地址的映射關系數量巨大,相比之下,頁表緩存的容量就顯得捉襟見肘。

當處理器訪問的虛擬地址在頁表緩存中未命中時,就不得不去內存中查詢頁表,這不僅增加了地址轉換的時間,還可能導致系統性能的波動。為了應對這一挑戰,計算機系統采用了多種策略,比如優化頁面置換算法,像最近最少使用(LRU)算法,優先替換長時間未被訪問的映射條目,確保緩存中始終保留最有可能被再次訪問的映射關系;還有預取技術,操作系統根據程序的執行路徑和內存訪問模式,提前將可能需要的頁表項預取到頁表緩存中,提高緩存命中率,以充分發揮頁表緩存的作用 。

(3)關聯性

頁表緩存一般采用組相聯或全相聯的映射方式,來提高緩存的命中率,就像精心規劃的分類存放系統 。以組相聯映射為例,頁表緩存被巧妙地分為多個組,每個組內又包含多個緩存行,宛如一個大型圖書館被劃分成多個書架區域,每個書架區域里又有多層書架。

當處理器拿著虛擬地址來查詢物理地址時,虛擬地址會根據其索引字段映射到特定的組,這就如同根據書籍的分類編號快速找到對應的書架區域。然后在組內進行查找,就像在特定書架區域的多層書架中尋找具體的書籍。這種映射方式,相比直接映射緩存,能在同一組內存儲多個頁表項,降低了因地址沖突導致的緩存未命中情況。比如,當不同的虛擬地址映射到相同的緩存位置(即地址沖突)時,如果是直接映射緩存,就只能保留一個映射關系,其他的會被覆蓋,導致后續訪問可能未命中;而組相聯映射方式,由于同一組內可以存放多個映射關系,就大大減少了這種沖突,提高了緩存命中率,使得頁表緩存能更高效地為地址轉換服務 。

四、Linux內核頁表結構

在Linux內核中,頁表是用來管理虛擬內存和物理內存之間映射關系的數據結構。Linux采用了兩級頁表(two-level page table)的結構,具體包括以下幾個部分:

  1. 一級頁表(Level 1 Page Table):也稱為頂層頁表(Top-Level Page Table),它是整個頁表層次結構的入口點。一級頁表的條目數與物理內存大小相關,每個條目指向二級頁表。
  2. 二級頁表(Level 2 Page Table):也稱為中間層頁表(Intermediate Page Table)。二級頁表將虛擬地址空間劃分成更小的區域,并對應到三級頁表。
  3. 三級頁表(Level 3 Page Table):也稱為底層頁表(Leaf Page Table)。三級頁表對應著最細粒度的頁面大小,通常是4KB或2MB。每個條目包含了虛擬地址和物理地址之間的映射關系。

通過多級頁表結構,Linux 內核能夠有效地管理大型虛擬地址空間和物理內存。當進程訪問一個虛擬地址時,內核會根據虛擬地址在不同層次的頁表中進行查找和轉換,最終得到對應的物理地址。

需要注意的是,在64位版本的 Linux 內核中,由于更廣闊的虛擬地址空間和更大容量的物理內存支持,可能會有更多級的頁表結構。具體的層次結構和細節可能因不同的架構、配置和內核版本而有所變化,上述描述僅為一般情況下的常見頁表結構。

4.1頁表項

頁表項(Page Table Entry)是頁表中的每個條目,用于描述虛擬地址與物理地址之間的映射關系。每個頁表項通常包含以下字段:

  1. 物理頁面基址(Physical Page Base Address):指向對應的物理內存頁面的起始地址。
  2. 標志位(Flags):用于控制頁面的訪問權限、緩存策略和其他特性。常見的標志位包括可讀/寫/執行權限、緩存禁用、全局標志等。
  3. 狀態位(Status Bits):記錄頁面的狀態信息,如臟頁標記、引用位等。
  4. 其他輔助字段:可能包含一些額外信息,如頁表層次索引、保留位等。

根據操作系統和硬件架構的不同,頁表項可能有不同的結構和長度。例如,在x86體系結構上,一個典型的32位頁表項長度為4字節(32 bits),而在64位上則是8字節(64 bits)。這些長度限制了能夠表示的物理內存大小和虛擬地址空間范圍。

通過逐級查找和解析頁表項,操作系統可以將虛擬地址轉換為物理地址,并進行訪問控制和管理。因此,正確配置和使用頁表項對于有效管理內存和實現安全性至關重要。

4.1各種類型的頁面

  • Page Table Entry (PTE):記錄了一個頁面在物理內存中的地址以及相關信息,用于虛擬地址到物理地址的映射。
  • Page Global Directory (PGD):一種高級頁表結構,用于管理大量虛擬內存。它將多個Page Table組織起來,形成更大的虛擬地址空間。
  • Page Middle Directory (PMD):類似于PGD,但粒度更小。通常用于管理特定區域內的虛擬內存。
  • Inverted Page Table (IPT):與傳統頁表不同,IPT根據物理地址索引每個頁面對應的虛擬地址和進程信息。它可以減少頁表占用的內存,并提高查找效率。
  • Translation Lookaside Buffer (TLB):高速緩存,位于CPU芯片上,加速虛擬地址到物理地址轉換過程。

4.3頁表緩存與頁表的關系解讀

頁表緩存與頁表,雖然都服務于虛擬地址到物理地址的轉換,但它們在計算機系統中扮演著截然不同的角色 。

從定義上看,頁表是一種數據結構,就像一本詳細的 “地址映射大全”,它完整記錄了虛擬地址空間中的頁與物理內存中的頁框之間的映射關系,是虛擬內存管理的核心所在,為操作系統實現虛擬內存到物理內存的轉換提供了最基礎的依據 。而頁表緩存,即快表(TLB),則像是從這本 “地址映射大全” 中精選出來的 “常用地址速查表”,是一種高速緩存機制,專門用于緩存頁表中最近使用的映射關系,是對頁表部分內容進行快速存儲和訪問的硬件結構 。

在作用方面,頁表承擔著實現虛擬地址到物理地址完整映射的重任,操作系統依靠它來管理進程的虛擬地址空間,進行內存分配、回收以及地址轉換等一系列關鍵操作,確保每個進程都能在自己獨立的虛擬地址空間中準確無誤地訪問內存,實現內存的有效隔離和保護 。頁表緩存的主要作用則是加速這一地址轉換過程,通過緩存最近使用的頁表項,減少訪問內存中頁表的次數,就像為地址轉換開辟了一條高速通道,從而顯著提高地址轉換速度,提升整個系統的運行性能 。

存儲位置與訪問速度上,二者也有很大差異。頁表通常存儲在主內存中,由于內存訪問需要經過內存總線等硬件設備,就像要穿過一條漫長的通道才能到達,每次訪問可能需要多個時鐘周期才能完成,速度相對較慢 。頁表緩存一般集成在處理器內部,或者靠近處理器的高速緩存芯片中,離處理器非常近,能在幾個時鐘周期內快速完成地址查詢,極大地縮短了地址轉換時間,就像在處理器身邊隨時待命,快速響應地址轉換請求 。

從數據結構與容量來看,頁表是一個完整且通常較為龐大的數據結構,包含了進程虛擬地址空間中所有頁與物理內存頁框的映射關系,其大小取決于虛擬地址空間的大小和頁的大小等因素,可能會占用大量的內存空間 。頁表緩存的數據結構相對簡單,主要包含虛擬頁號、物理頁框號等關鍵信息,以及一些用于管理和查找的標志位等,其容量相對較小,通常只能存儲幾百到幾千個映射條目 。

在數據更新與維護方面,頁表由操作系統在進行內存管理操作,如進程創建、內存分配、頁面置換等時進行更新和維護,以確保虛擬地址到物理地址映射的正確性和完整性 。頁表緩存一方面會在操作系統更新頁表時,根據更新策略相應地更新緩存中的條目;另一方面,在發生地址轉換時,如果在頁表緩存中未命中,會從頁表中加載新的映射關系到頁表緩存中,并根據替換策略替換掉不常用的條目 。頁表緩存就像是頁表的 “高速助手”,雖然依賴于頁表,但通過自身的特性,大大提升了地址轉換的效率,與頁表共同協作,保障計算機系統的高效運行 。

4.4頁表緩存的重要性與應用場景

在計算機系統中,頁表緩存(TLB)就像一個隱藏在幕后卻掌控全局的關鍵角色,其重要性不言而喻,在提升內存訪問效率和系統整體性能方面發揮著不可替代的作用 。

從內存訪問效率來看,頁表緩存是加速地址轉換的 “加速器”。在沒有頁表緩存的情況下,每次內存訪問都需要查詢內存中的頁表,由于內存訪問速度相對較慢,這會大大增加地址轉換的時間。而頁表緩存的存在,使得 CPU 能夠在極短時間內完成地址轉換,快速獲取所需數據,減少了處理器等待數據的時間,讓計算機能夠高效運行。例如,在程序運行過程中,頻繁地訪問內存中的指令和數據,如果每次都要經過漫長的頁表查詢過程,程序的執行速度將大幅下降,而頁表緩存的高速特性則有效避免了這種情況,確保程序能夠流暢運行 。

從系統整體性能角度而言,頁表緩存對提升系統性能有著至關重要的影響。它能夠顯著提高 CPU 的利用率,因為減少了內存訪問的延遲,CPU 可以更快地執行指令,從而提高整個系統的吞吐量。在多任務處理環境下,頁表緩存使得不同進程之間的切換更加高效,每個進程都能快速訪問自己的內存空間,減少了進程上下文切換帶來的開銷,提高了系統的并發處理能力,讓計算機能夠同時處理多個復雜任務而不卡頓 。

頁表緩存的身影廣泛出現在各類計算機應用場景中 。在操作系統運行時,頁表緩存為操作系統的高效運行提供了有力支持。操作系統需要頻繁地訪問內存中的各種數據結構和程序代碼,頁表緩存能夠快速完成地址轉換,使得操作系統能夠及時響應各種系統調用和中斷請求,保證系統的穩定性和流暢性 。比如在 Windows 系統中,當用戶打開多個應用程序時,操作系統通過頁表緩存快速管理各個應用程序的內存訪問,確保系統的高效運行 。

在大型軟件運行時,頁表緩存同樣發揮著關鍵作用。像3D游戲、視頻編輯軟件等大型軟件,它們通常需要處理大量的數據和復雜的圖形渲染任務,對內存訪問的速度要求極高。頁表緩存能夠快速將虛擬地址轉換為物理地址,讓軟件能夠快速讀取和處理所需的數據,保證軟件的流暢運行,為用戶提供更好的使用體驗 。以熱門的 3D 游戲為例,游戲中的場景渲染、角色動作等都需要大量的數據支持,頁表緩存能夠快速響應游戲對內存的訪問請求,使得游戲畫面更加流暢,避免出現卡頓現象 。

在服務器環境中,頁表緩存更是不可或缺。服務器需要同時處理大量的客戶端請求,對系統性能和穩定性要求極高。頁表緩存能夠提高服務器對內存的訪問效率,加快數據的處理速度,從而提高服務器的并發處理能力,確保服務器能夠穩定地為大量用戶提供服務 。例如,在電商網站的服務器中,在購物高峰期,大量用戶同時訪問網站進行商品瀏覽、下單等操作,頁表緩存能夠幫助服務器快速處理這些請求,保證網站的正常運行 。

五、頁表緩存原理

由于頁表存放在主存中,因此程序每次訪存至少需要兩次:一次訪存獲取物理地址,第二次訪存才獲得數據。提高訪存性能的關鍵在于依靠頁表的訪問局部性。當一個轉換的虛擬頁號被使用時,它可能在不久的將來再次被使用到,。

TLB是一種高速緩存,內存管理硬件使用它來改善虛擬地址到物理地址的轉換速度。當前所有的個人桌面,筆記本和服務器處理器都使用TLB來進行虛擬地址到物理地址的映射。使用TLB內核可以快速的找到虛擬地址指向物理地址,而不需要請求RAM內存獲取虛擬地址到物理地址的映射關系。這與data cache和instruction caches有很大的相似之處。

TLB的原理如下:

  1. 當CPU訪問一個虛擬地址時,首先檢查TLB中是否有對應的頁表項。
  2. 如果TLB中有對應的頁表項(即命中),則直接從TLB獲取物理地址。
  3. 如果TLB中沒有對應的頁表項(即未命中),則需要訪問內存來獲取正確的頁表項。
  4. 在未命中情況下,操作系統會進行相應處理,從主存中獲取正確的頁表項,并將其加載到TLB中以供后續使用。
  5. 一旦正確的頁表項加載到TLB中,CPU再次訪問相同虛擬地址時就可以直接在TLB中找到映射關系,提高了轉換效率。

TLB具有快速查找和高效緩存機制,能夠極大地減少查詢頁表所需的時間。然而,由于TLB是有限容量的,在大型程序或多任務環境下可能無法完全覆蓋所有需要轉換的頁面。當發生TLB未命中時,則會導致額外的內存訪問開銷;操作系統會負責管理和維護TLB,包括緩存策略、TLB的刷新機制等。常見的緩存策略有全相聯、組相聯和直接映射等。

5.1TLB原理

當cpu要訪問一個虛擬地址/線性地址時,CPU會首先根據虛擬地址的高20位(20是x86特定的,不同架構有不同的值)在TLB中查找。如果是表中沒有相應的表項,稱為TLB miss,需要通過訪問慢速RAM中的頁表計算出相應的物理地址。同時,物理地址被存放在一個TLB表項中,以后對同一線性地址的訪問,直接從TLB表項中獲取物理地址即可,稱為TLB hit。

想像一下x86_32架構下沒有TLB的存在時的情況,對線性地址的訪問,首先從PGD中獲取PTE(第一次內存訪問),在PTE中獲取頁框地址(第二次內存訪問),最后訪問物理地址,總共需要3次RAM的訪問。如果有TLB存在,并且TLB hit,那么只需要一次RAM訪問即可。

5.2TLB表項

TLB內部存放的基本單位是頁表條目,對應著RAM中存放的頁表條目。頁表條目的大小固定不變的,所以TLB容量越大,所能存放的頁表條目越多,TLB hit的幾率也越大。但是TLB容量畢竟是有限的,因此RAM頁表和TLB頁表條目無法做到一一對應。因此CPU收到一個線性地址,那么必須快速做兩個判斷:

  1. 所需的也表示否已經緩存在TLB內部(TLB miss或者TLB hit)
  2. 所需的頁表在TLB的哪個條目內

為了盡量減少CPU做出這些判斷所需的時間,那么就必須在TLB頁表條目和內存頁表條目之間的對應方式做足功夫

全相連 - full associative

在這種組織方式下,TLB cache中的表項和線性地址之間沒有任何關系,也就是說,一個TLB表項可以和任意線性地址的頁表項關聯。這種關聯方式使得TLB表項空間的利用率最大。但是延遲也可能相當的大,因為每次CPU請求,TLB硬件都把線性地址和TLB的表項逐一比較,直到TLB hit或者所有TLB表項比較完成。特別是隨著CPU緩存越來越大,需要比較大量的TLB表項,所以這種組織方式只適合小容量TLB

直接匹配

每一個線性地址塊都可通過模運算對應到唯一的TLB表項,這樣只需進行一次比較,降低了TLB內比較的延遲。但是這個方式產生沖突的幾率非常高,導致TLB miss的發生,降低了命中率。

比如,我們假定TLB cache共包含16個表項,CPU順序訪問以下線性地址塊:1, 17 , 1, 33。當CPU訪問地址塊1時,1 mod 16 = 1,TLB查看它的第一個頁表項是否包含指定的線性地址塊1,包含則命中,否則從RAM裝入;然后CPU方位地址塊17,17 mod 16 = 1,TLB發現它的第一個頁表項對應的不是線性地址塊17,TLB miss發生,TLB訪問RAM把地址塊17的頁表項裝入TLB;CPU接下來訪問地址塊1,此時又發生了miss,TLB只好訪問RAM重新裝入地址塊1對應的頁表項。因此在某些特定訪問模式下,直接匹配的性能差到了極點

組相連 - set-associative

為了解決全相連內部比較效率低和直接匹配的沖突,引入了組相連。這種方式把所有的TLB表項分成多個組,每個線性地址塊對應的不再是一個TLB表項,而是一個TLB表項組。CPU做地址轉換時,首先計算線性地址塊對應哪個TLB表項組,然后在這個TLB表項組順序比對。按照組長度,我們可以稱之為2路,4路,8路。

經過長期的工程實踐,發現8路組相連是一個性能分界點。8路組相連的命中率幾乎和全相連命中率幾乎一樣,超過8路,組內對比延遲帶來的缺點就超過命中率提高帶來的好處了。

這三種方式各有優缺點,組相連是個折衷的選擇,適合大部分應用環境。當然針對不同的領域,也可以采用其他的cache組織形式。

TLB表項更新

TLB表項更新可以有TLB硬件自動發起,也可以有軟件主動更新

  • TLB miss發生后,CPU從RAM獲取頁表項,會自動更新TLB表項
  • TLB中的表項在某些情況下是無效的,比如進程切換,更改內核頁表等,此時CPU硬件不知道哪些TLB表項是無效的,只能由軟件在這些場景下,刷新TLB。

在linux kernel軟件層,提供了豐富的TLB表項刷新方法,但是不同的體系結構提供的硬件接口不同。比如x86_32僅提供了兩種硬件接口來刷新TLB表項:

  • 向cr3寄存器寫入值時,會導致處理器自動刷新非全局頁的TLB表項
  • 在Pentium Pro以后,invlpg匯編指令用來無效指定線性地址的單個TLB表項無效。

內核對頁緩存的操作函數

內核對頁緩存的基本操作包含了在一個頁緩存所形成的radix樹中查找,增加和刪除一個頁緩存?;趓adix的基本操作函數,頁高速緩存的處理函數如下:

  • page_cache_alloc():分配一個新的頁緩存;
  • find_get_page():在頁高速緩存中查找指定頁;
  • add_to_page_cache():把一個新頁添加到頁高速緩存;
  • remove_from_page_cache():將指定頁從頁高速緩存中移除;
  • read_cache_page():確保指定頁在頁高速緩存中包含最新的數據;
責任編輯:武曉燕 來源: 深度Linux
相關推薦

2009-04-10 13:32:46

Nehalem多核intel

2013-12-16 15:04:51

多核編程

2013-12-18 16:12:26

多核編程

2012-03-22 10:33:33

思杰XenDesktop

2013-10-30 09:37:19

LinuxLinux命令

2018-11-15 11:14:13

CPU主頻核數

2022-09-15 08:38:39

WebCPU數量

2013-12-18 16:18:08

多核線程

2018-09-29 15:01:31

CPUAMD 64Intel 56

2019-08-12 07:39:25

數據中心IT開銷

2010-12-08 11:26:36

Intel

2009-06-26 17:33:00

雙核刀片多核

2020-02-05 13:03:55

數據中心混合云技術

2009-04-18 14:52:54

雙核四核服務器

2009-08-06 18:12:06

2013-10-29 09:46:42

hypervisor私有云

2013-01-29 09:58:55

2012移動應用付費應用

2009-04-17 22:25:16

多核四核CPU

2012-05-04 09:10:50

多核CPUwindows

2011-03-15 15:47:04

MySQL鎖競爭
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩黄色一级片 | 国产91丝袜在线18 | 国产免费自拍 | 亚洲视频中文字幕 | 久久机热| 欧美aaaaaaaa| 免费中文字幕日韩欧美 | 人人玩人人添人人澡欧美 | 午夜影视| 亚洲一区视频在线 | 日日摸日日添日日躁av | 久久国内精品 | 久久美女网 | 草久久久| 羞羞色视频 | 综合久久一区 | 在线视频a | 成人一区二区在线 | 三级黄色片在线观看 | 超碰av免费| 久久精品网 | 久久久久无码国产精品一区 | 91电影| 成人精品高清 | 国产成人在线免费 | 国产在线视频一区二区董小宛性色 | 国产美女久久 | 中文字幕一区二区三区四区 | 中文字幕综合 | 一区在线视频 | 欧美精品一区二区三区四区五区 | 91看片网 | 欧美精三区欧美精三区 | 欧美一区二区在线播放 | 毛片免费观看视频 | 亚洲成色777777在线观看影院 | 久久精品男人的天堂 | 综合另类 | 亚洲欧洲一区二区 | 久久99久久| 国产精品久久久久国产a级 欧美日韩国产免费 |