一、大(巨)頁
大(巨)頁,很好理解,就是的大的頁。說這個大頁前,得先把計算機中內存的管理簡單說明一下,否則可能對于一些新手或者把操作系統中內存管理的方法的開發者不太友好。最早的計算機,是沒有內存管理這一說的,程序直接向內存里寫,直接操作內存;而后出現了分區管理(靜態的內存分配和動態的內存分配),目的只有一個能夠更好的利用內存。前面這些都可以算是早期的內存管理,簡單粗暴,但好用,也好出意外。隨著計算機硬件技術的不斷發展,可以容納更多的程序在內存中同時運行。特別是隨著操作系統的出現,多任務成為必然,那么對內存管理也就提到了一個重要的程度。這時,計算機的先行者們分別從段和頁兩個方面開始處理內存的管理,它們各有優缺點。分頁可以更好的去除外部的內存碎片,管理簡單高效并且支持虛擬內存;當然也有缺點,仍然無法解決頁內的碎片問題和管理頁一定會存在著開銷。分段管理的優點是更符合開發者的認知,像代碼段、數據段等等,耳熟能詳。同時,不同的分段可以有效的保護數據和實現共享,并且可以動態對段進行擴展。當然缺點也很明顯,最典型的就是產生外部的內存碎片,管理相對復雜。所以就有高手想到了把二者結合起來。在X86的32位架構操作系統中,段頁式管理是標準,即使到了64位系統,為了保持向下的兼容,X86上的操作系統仍然保留著段這個概念,但幾乎已經沒用了實際作用。大家可以簡單理解為在64位的系統中,已經使用了純分頁的管理。
好,現在就可以說什么是大頁了。一般來說,在普通的系統分頁機制下,一個頁(Page)的大小是4K。可以這樣說,這個大小是目前主流的平臺的分頁的大小。但隨著軟硬件技術的發展,它們都支持將分頁的大小提高到了2M。在一些特定的場景下還支持1G大小的分頁。當然,不是說必然是這種大小,不同的平臺可能也會有細微的不同,但一般來說,1G大小的分頁一定是大頁。
是不是很簡單,大的內存頁,就是大頁,很容易明白。
這里再簡單的說明一下,主要是針對一些才剛剛學習的小白,所謂分頁,大家可以理解成書籍的一頁頁的紙,在字體樣式固定的情況下,一頁的大小決定了能印刷多少字。當然,頁面越大,字數也就越多;反之則越少。大頁可以理解成某些書籍采用了特別大的頁(比如小人書之比大學的課本)。
二、大頁的作用
那么好好的分出來的頁的大小,為什么要搞成那么大呢?先看一個例子,大家都知曉一些軍隊的編制,從班到排到連到營到團到師到軍再到集團軍。可以理解班就是一個基礎的頁,那么如果一項命令需要快速的傳達到班,則需要從集團軍向下一級級的傳遞,大家很容易想到,這效率是不是有點低?隨著信息化的到來,可不可以撤掉其中的一些層級,采用較為扁平化的管理,比如把軍、師和團的建制去除,設一個旅的編制,然后,集團軍直接操作旅,由旅直接下放到營,而忽略班排連。大家再看看現代的大國們的軍改方向,基本就是這樣(當然,實際情況可能各有不同,也不可能像這里說的這么簡單和理想)。此時,營就是一個大頁,集團軍就可以管理更多的部隊人數。
內存也是如此,如果內存管理是以4K為基礎的話,在早中期,計算機的物理內存和虛擬內存都不大的情況下,它是相對合理的和高效的。但當操作系統的虛擬內存增加到64位后,這種大小的頁導致管理的頁表開始劇烈的膨脹,不但占用浪費了更多的空間也由于使用了更多層級的頁表而導致效率的低下。同時,TLB緩存的內存數量相比之下變得太少,它會導致內存命中率的嚴重下降從而產生缺頁訪問。學過操作系統的都知道,缺頁會導致性能的開銷巨大。所以大頁就在這種情況下產生了。
其實1G可能大家現在認為是一個大頁,但所謂的大小永遠是相對的。假設物理內存的大小已經超過了256位,虛擬內存已經達到了1024位,那時如果還是采用頁機制管理的話,一頁可能標準的就是1T了。那時的大頁可能會更大。當然,這種想法只是一種簡單的攤大餅的想法,可能真到了那種情況會出現更優秀的管理方法了。
綜合上面的分析,可以明白了,大頁的優缺點,其優點主要有:
- 提升TLB緩存的命中率
- 由于降低了頁表的層級從而提高了訪問的效率
- 由于大量的連續內存的訪問,提高了訪問速度和效率
缺點主要有: - 不恰當的應用可能導致內存碎片的迅速增加并浪費大量的內存
- 大頁管理相對較難,對物理內存和系統的開發都有較高的要求。由于大頁一般是靜態分配,所以其動態分配和和釋放要復雜
- 大頁的分配比較麻煩,畢竟尋找一個如此大的連續的頁面相對要難很多
三、大頁的應用
既然大頁有大頁的好處,標準頁有標準頁的優秀之處,那么到底在什么情況下使用大頁呢?畢竟大家常用的電腦和服務器,一般來說都是使用的4K做為標準頁。
- 海量存儲的數據庫
非常容易想到的便是海量型的數據庫,特別是基于內存的海量型數據庫。 - 大數據的處理
經常對大數據進行處理和轉發的情況下,也需要大頁內存管理,如Hadoop、Flink和Spakr等以及前面分析的DPDK。 - 高性能和科學計算
大量的數據存儲在內存中,盡量不要產生缺頁中斷。大頁就可以滿足這種情況從而提高計算的速度和效率。比如需要同時對大小1M的1000張圖像進行分析,大頁就很有優勢。 - 虛擬化管理
這個看上去比較難理解,其實換個角度就好理解了。虛擬化管理的單元是一個個的硬件甚至是一個虛擬的電腦,那么其分配的單元一定不會太小。現在的計算機誰還看到過內存只有4K的,一般網上的云服務器最低也得1G吧。
四、總結
正如剛剛所講,大和小永遠是相對的。技術的發展不會停滯,設計和架構的思想也在不斷完善。技術的發展不是簡單的一加一,在量變發展到一定程度后,就會產生質變。也就是說,可能以后就沒有了所謂的段頁的管理,產生更新的技術框架。所以對廣大的開發者來說,永遠不要停下自己追尋技術前沿的腳步,才是根本。