新聞中心
Linux是一款廣泛使用的操作系統(tǒng),擁有著良好的穩(wěn)定性和可靠性。在運行過程中,Linux會自動對一些重復操作所使用的數(shù)據(jù)進行緩存,以提高系統(tǒng)的性能。這種緩存機制在Linux系統(tǒng)中被稱作頁面緩存,是優(yōu)化系統(tǒng)性能的關鍵一頁。

按需搭建網(wǎng)站可以根據(jù)自己的需求進行定制,成都網(wǎng)站設計、成都網(wǎng)站制作構思過程中功能建設理應排到主要部位公司成都網(wǎng)站設計、成都網(wǎng)站制作的運用實際效果公司網(wǎng)站制作網(wǎng)站建立與制做的實際意義
一、頁面緩存的概念
頁面緩存,即Page Cache,是Linux系統(tǒng)自帶的一種緩存機制。它將磁盤中的文件數(shù)據(jù)全部讀入內存,緩存住這些數(shù)據(jù),使得后續(xù)的讀操作可以直接從內存中獲取,而無需再從磁盤中讀取。這樣可以大大縮短I/O操作的時間,提高系統(tǒng)性能。
二、頁面緩存的工作原理
在Linux系統(tǒng)中,每一個文件都被抽象為一個inode,inode是文件系統(tǒng)數(shù)據(jù)結構中的一部分,它包含了文件的元數(shù)據(jù)(例如大小、權限等)以及指向文件內容的指針。當用戶運行一個應用程序讀取某個文件時,Linux會通過讀取該文件的inode來獲取文件的物理位置。如果該文件存在于頁面緩存中,則直接從緩存中讀取數(shù)據(jù),否則就需要從磁盤中讀取數(shù)據(jù)。
頁面緩存機制的本質是將磁盤中的文件數(shù)據(jù)全部讀入內存,并將其緩存住,使得后續(xù)的讀操作可以直接從緩存中獲取。在實現(xiàn)上,Linux會為每一個文件打開一個緩存頁面列表,將文件的所有緩存頁面鏈接在一起,形成一個鏈表。當應用程序請求讀取某個文件時,Linux會檢查該文件的緩存頁面列表,如果該頁面已經(jīng)在內存中,則直接返回緩存頁面的數(shù)據(jù);否則就需要從磁盤中讀取該頁面的數(shù)據(jù),并將其添加到緩存頁面列表中。
當應用程序進行寫操作時,頁面緩存會將用戶寫入的數(shù)據(jù)暫存在內存中,并且在一定時間后寫回磁盤。在這個過程中,Linux會將正在寫入的數(shù)據(jù)標記為臟頁,同時在緩存中保留一份該頁面的拷貝,以便后續(xù)的讀操作能夠直接從緩存中獲取。在內存空間不足時,Linux會優(yōu)先將臟頁寫回磁盤,并釋放掉這部分內存空間。
除了文件系統(tǒng)數(shù)據(jù)的緩存外,頁面緩存還會緩存進程的內存數(shù)據(jù)。在程序運行時,Linux會將進程的數(shù)據(jù)(例如棧、堆等)保存在內存中,而這部分數(shù)據(jù)同樣可以被緩存到頁面中,以避免反復的IO操作。
三、頁面緩存的優(yōu)勢
頁面緩存作為Linux系統(tǒng)的核心功能之一,在提高系統(tǒng)性能、減少IO操作等方面具有重要的作用。
頁面緩存可以大大縮短I/O操作的時間,提高系統(tǒng)性能。相對于從磁盤中讀取數(shù)據(jù),從內存中讀取數(shù)據(jù)的速度相對要快得多,因為讀取內存數(shù)據(jù)的速度普遍比訪問硬盤的速度快10倍以上。這意味著,使用頁面緩存可以大大降低I/O操作的時間延遲,提高數(shù)據(jù)讀取的速度,從而為系統(tǒng)的性能提供了有力的支持。
頁面緩存可以減少對磁盤的訪問次數(shù),從而減少對硬件的使用量。這對于頻繁進行IO操作的應用程序尤為重要。通過減少對磁盤的訪問,可以降低磁盤使用壽命,延長磁盤的使用壽命。
頁面緩存是一種最有效的提高系統(tǒng)性能的方式之一。它通過減少文件IO操作來縮短系統(tǒng)的響應時間,同時也為系統(tǒng)提供了更多的內存空間,使得系統(tǒng)更加穩(wěn)定可靠。
四、頁面緩存的缺陷
盡管頁面緩存是一種很有用的技術,但是它在某些情況下也會帶來一些問題。
頁面緩存會占用大量的內存空間。特別是在處理大型文件時,緩存區(qū)可能會占用數(shù)百MB的內存空間,這可能會導致其他應用程序的性能和響應能力下降。對于一些資源有限的設備,例如個人電腦和嵌入式設備等,建議盡量避免大規(guī)模使用頁面緩存。
頁面緩存可能會引起一些奇怪的現(xiàn)象,例如文件的修改并不會立即反映在內存中。由于頁面緩存將文件的數(shù)據(jù)保存在內存中,因此它可能會導致文件的修改被延遲寫入磁盤,從而導致在重啟時數(shù)據(jù)的丟失。
頁面緩存可能會成為一個安全漏洞。如果攻擊者能夠獲取系統(tǒng)中的緩存數(shù)據(jù),并且能夠在其中進行惡意篡改,那么系統(tǒng)的安全性將會受到嚴重的威脅。因此,在使用頁面緩存時,需要進行一些必要的安全措施。
五、結論
頁面緩存是Linux系統(tǒng)中非常重要的一部分,它可以提高系統(tǒng)性能、減少對硬件的使用等,同時也為系統(tǒng)的穩(wěn)定性和可靠性提供了保障。當然,頁面緩存也存在一些缺點,需要注意一些安全和可用性問題。因此,在使用頁面緩存時,需要謹慎考慮各種因素,以確保系統(tǒng)的穩(wěn)定性和安全性。
相關問題拓展閱讀:
- Linux 內核的內存管理 – 概念
Linux 內核的內存管理 – 概念
Concepts overview — The Linux Kernel documentation
Linux中的內存管理是一個復雜的系統(tǒng),經(jīng)過多年的發(fā)展,它包含越來越多的功能,以支持從 MMU-less microcontrollers 到 supercomputers 的各種系統(tǒng)。
沒有MMU內存管理的系統(tǒng)被稱為 nommu ,它值得寫一份專門的文檔進行描述。
盡管有些概念是相同的,這里我們假設MMU可用,CPU可以將虛擬地址轉換為物理地址。
計算機系統(tǒng)中的物理內存是有限資源,即便支持內存熱插拔,其可以安裝的內存也有限的。物理內存不一定必須是連續(xù)的;它可以作為一組不同的地址范圍被訪問。此外,不同的CPU架構,甚至同架構的不同實現(xiàn)對如何定義這些地址范圍都是不同的。
這使得直接處理物理內存異常復雜,為了避免這種復雜性,開發(fā)了
虛擬內存 (virtual memory)
的概念。
虛擬內存從應用軟件中抽象出物理內存的細節(jié),只允許在物理內存棗神中保留需要的信息
(demand paging)
,并提供一種機制來保護和控制進程之間的數(shù)據(jù)共享。
通過虛擬內存,每次內存訪問都訪問一個
虛擬地址
。當CPU對從系統(tǒng)內存讀?。ɑ驅懭耄┑闹噶钸M行解碼時,它將該指令中編碼的虛擬地址轉換為內存控制器可以理解的物理地址。
物理內存被切分為
頁幀 page frames
或
頁 pages
。頁的大小是基于架構的。一些架構允許從幾個支持的值中選擇頁大小;此選擇在內核編譯時設置到內核配置。
每個物理內存頁都可以映射為一個或多個
虛擬頁(virtual pages)
。映射關系描述在
頁表(page tables)
中,頁表將程序使用的虛擬地址轉換為物理內存地址。頁表以層次結構組織。
更底層的表包含軟件使用的實際內存頁的物理地址。較高層的表包含較低層表頁的物理地址。頂層表的指針駐留在寄存器中。
當CPU進行地址轉換的時候,它使用寄存器訪問頂級頁表。
虛擬地址的高位,用于頂級頁表的條目索引。然后,通過該條目訪問下級,下級的虛擬地址位又作為其下下級頁表的索引。虛擬地址的更低位定義實際頁內的偏移量。
地址轉換需要多次內存訪問,而內存訪問相對于CPU速度來說比較慢。為了避免在地址轉換上花費寶貴的處理器周期,CPU維護著一個稱為
TLB
(Translation Lookaside Buffer)的用于地址轉換緩存(cache)。通常TLB是非常稀缺的資源,需要大內存工作應用程序會因為TLB未命中而影響性能。
很多現(xiàn)代CPU架構允許頁表的高層直接映射到內存頁。例如,x86架構,可以通過二級、三級頁表的條目映射2M甚至1G內存頁。在Linux中,這些內存頁稱為
大頁 (Huge)
。大頁的使用顯著降低了TLB的壓力,提高了TLB命中率,從而提高了系統(tǒng)的整體性能。
Linux提供兩種機制開啟使用大頁映射物理內存。
之一個是
HugeTLB
文件系統(tǒng),即
hugetlbfs
。它是一個偽文件系統(tǒng),使用RAM作為其存儲。在此文件系統(tǒng)中創(chuàng)建的文件,數(shù)據(jù)駐留在內存中,并使用大頁進行映射。
關于 HugeTLB Pages
另一個被稱為
THP (Transparent HugePages)
,后出的開啟大頁映射物理內存的機制。
與
hugetlbfs
不同,hugetlbfs要求用戶和/或系統(tǒng)管理員配置系統(tǒng)內存的哪些部分應該并可以被大頁映射;THP透明地管理這些映射并獲取名稱。
關于 Transparent Hugepage Support
通常,硬件對不同物理內存范圍的訪問方式有所限制。某些情況下,設備不能對所有可尋址內存執(zhí)行DMA。在其他情況下,物理內存的大小超過虛擬內存的更大可尋址大小,需要采取改巖大特殊措施來訪問部分內存。還有些情況,物理內存的尺寸超過了虛擬內存的更大可尋址尺寸,需要采取特殊措施來訪問部分內存。
Linux根據(jù)內存頁的使用情況,將其組合為多個
zones
。比如, ZONE_DMA 包含設備用于DMA的內存, ZONE_HIGHMEM 包含未永久映射到內核核豎地址空間的內存, ZONE_NORMAL 包含正常尋址內存頁。
內存zones的實際層次架構取決于硬件,因為并非所有架構都定義了所有的zones,不同平臺對DMA的要求也不同。
多處理器機器很多基于
NUMA
(Non-Uniform Memory Access system – 非統(tǒng)一內存訪問系統(tǒng) )架構。 在這樣的系統(tǒng)中,根據(jù)與處理器的“距離”,內存被安排成具有不同訪問延遲的
banks
。每個
bank
被稱為一個
node
,Linux為每個
node
構造一個獨立的內存管理子系統(tǒng)。
Node
有自己的zones、free&used頁面列表,以及各種統(tǒng)計計數(shù)器。
What is NUMA?
NUMA Memory Policy
物理內存易失,將數(shù)據(jù)放入內存的常見情況是讀取文件。讀取文件時,數(shù)據(jù)會放入
頁面緩存(page cache)
,可以在再次讀取時避免耗時的磁盤訪問。同樣,寫文件時,數(shù)據(jù)也會被放入
頁面緩存
,并最終進入存儲設備。被寫入的頁被標記為
臟頁(dirty page)
,當Linux決定將其重用時,它會將更新的數(shù)據(jù)同步到設備上的文件。
匿名內存 anonymous memory
或
匿名映射 anonymous mappings
表示沒有后置文件系統(tǒng)的內存。這些映射是為程序的stack和heap隱式創(chuàng)建的,或調用mmap(2)顯式創(chuàng)建的。通常,匿名映射只定義允許程序訪問的虛擬內存區(qū)域。讀,會創(chuàng)建一個頁表條目,該條目引用一個填充有零的特殊物理頁。寫,則分配一個常規(guī)物理頁來保存寫入數(shù)據(jù)。該頁將被標記為臟頁,如果內核決定重用該頁,則臟頁將被交換出去
swapped out
。
縱貫整個系統(tǒng)生命周期,物理頁可用于存儲不同類型的數(shù)據(jù)。它可以是內核內部數(shù)據(jù)結構、設備驅動DMA緩沖區(qū)、讀取自文件系統(tǒng)的數(shù)據(jù)、用戶空間進程分配的內存等。
根據(jù)內存頁使用情況,Linux內存管理會區(qū)別處理??梢噪S時釋放的頁面稱為
可回收(reclaimable)
頁面,因為它們把數(shù)據(jù)緩存到了其他地方(比如,硬盤),或者被swap out到硬盤上。
可回收頁最值得注意的是
頁面緩存
和
匿名頁面
。
在大多數(shù)情況下,存放內部內核數(shù)據(jù)的頁,和用作DMA緩沖區(qū)的頁無法重用,它們將保持現(xiàn)狀直到用戶釋放。這樣的被稱為
不可回收頁(unreclaimable)
。
然而,在特定情況下,即便是內核數(shù)據(jù)結構占用的頁面也會被回收。
例如,文件系統(tǒng)元數(shù)據(jù)的緩存(in-memory)可以從存儲設備中重新讀取,因此,當系統(tǒng)存在內存壓力時,可以從主內存中丟棄它們。
釋放可回收物理內存頁并重新調整其用途的過程稱為
(surprise!) reclaim
。
Linux支持異步或同步回收頁,取決于系統(tǒng)的狀態(tài)。
當系統(tǒng)負載不高時,大部分內存是空閑的,可以立即從空閑頁得到分配。
當系統(tǒng)負載提升后,空閑頁減少,當達到某個閾值(
low watermark
)時,內存分配請求將喚醒
kswapd
守護進程。它將以異步的方式掃描內存頁。如果內存頁中的數(shù)據(jù)在其他地方也有,則釋放這些內存頁;或者退出內存到后置存儲設備(關聯(lián)
臟頁
)。
隨著內存使用量進一步增加,并達到另一個閾值-
min watermark
-將觸發(fā)回收。這種情況下,分配將暫停,直到回收到足夠的內存頁。
當系統(tǒng)運行時,任務分配并釋放內存,內存變得碎片化。
雖然使用虛擬內存可以將分散的物理頁表示為虛擬連續(xù)范圍,但有時需要分配大的連續(xù)的物理內存。這種需求可能會提升。例如,當設備驅動需要一個大的DMA緩沖區(qū)時,或當THP分配一個大頁時。
內存地址壓縮(compaction )
解決了碎片問題。
該機制將占用的頁從內存zone的下部移動到上部的空閑頁。壓縮掃描完成后,zone開始處的空閑頁就并在一起了,分配較大的連續(xù)物理內存就可行了。
與
reclaim
類似,
compaction
可以在
kcompactd守護進程中異步進行,也可以作為內存分配請求的結果同步進行。
在存在負載的機器上,內存可能會耗盡,內核無法回收到足夠的內存以繼續(xù)運行。
為了保障系統(tǒng)的其余部分,引入了
OOM killer
。
OOM killer
選擇犧牲一個任務來保障系統(tǒng)的總體健康。選定的任務被killed,以期望在它退出后釋放足夠的內存以繼續(xù)正常的操作。
關于linux 緩存機制頁的介紹到此就結束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關注本站。
成都網(wǎng)站推廣找創(chuàng)新互聯(lián),老牌網(wǎng)站營銷公司
成都網(wǎng)站建設公司創(chuàng)新互聯(lián)(www.cdcxhl.com)專注高端網(wǎng)站建設,網(wǎng)頁設計制作,網(wǎng)站維護,網(wǎng)絡營銷,SEO優(yōu)化推廣,快速提升企業(yè)網(wǎng)站排名等一站式服務。IDC基礎服務:云服務器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗、服務器租用、服務器托管提供四川、成都、綿陽、雅安、重慶、貴州、昆明、鄭州、湖北十堰機房互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務。
分享題目:Linux緩存機制:提高系統(tǒng)性能的關鍵一頁 (linux 緩存機制頁)
本文路徑:http://www.5511xx.com/article/cddcsii.html


咨詢
建站咨詢
