闡述Linux作業系統中大頁的管理

來源:互聯網
上載者:User
關鍵字 作業系統 Linux 大頁

本文介紹了 Linux 作業系統中大頁的實現。 分別從 memory 層、檔案系統層、libhugetlbfs,以及使用者如何使用大頁等這幾個方面進行了分析和介紹。 讓您更好的瞭解 大頁在內核的實現機制以及HTTP://www.aliyun.com/zixun/aggregation/6579.html">使用者使用方法。

大頁主要是為了使用者使用大量的記憶體時提供優化的方法。 它通過硬體平臺提供的支援,作業系統對記憶體操作進行優化,提高了系統的效率。 本篇文章首先介紹了硬體平臺對大頁的支援,然後分析它在 Linux 內核中的實現,最後通過一個例子來瞭解使用者如何使用這些大頁的。 隨著硬體的價格越來越低,使用者需要訪問更多的記憶體,系統有兩種方法來適應記憶體的增加。 一種方法就是保持頁的大小不變而增加頁表的級數,另一種方法就是頁表的級別不變而增加頁的大小。 第一種方法,會容易出現性能的問題。 頁表級數的增加和小頁就會增加訪問記憶體的次數。 而第二種方法可以減少訪問記憶體的次數。 相對於小頁來說,系統的性能是比較高的。 這就是為何有越來越多的方法支援大頁。

大頁的硬體支援

這裡以 x86 架構為例,介紹硬體平臺對大頁的支援。 下面表格顯示了頁的大小與物理位址長度的關係。 控制寄存器 CR0、CR4 中的某些位決定了頁的大小。 此表格來自 Intel 64 IA and IA32 Architectures Software Developer ’s Manual。

Paging Mode PG Flag CR0 PAE Flag CR4 LME IA32_EFFER Page Size Linear Address Physical Address Width None 0 X X - 32 bit 32 bit 32 bit 1 0 0 4KB


4MB 32 bit Up to 40 bit PAE 1 1 0 4KB


2MB 32 bit Up to 52 bit IA-32e 1 1 2 4KB


2MB


1GB 48 bit Up to 52 bit

大頁總體結構

大頁的結構主要有內核代碼中的 hugetlb.c, memory.c,hugtlbpage.c 和 fs/hugetlbfs/inode.c,還有使用者空間提供的 libhugetlbfs。 其中 hugetlb.c, memory.c 屬於記憶體管理的部分,hugetlbpage.c 是跟具體的架構相關的頁表的管理,fs/hugetlbfs/inode.c 是檔案系統層,hugetlbfs 是一個偽檔案系統, 沒有一個提供的設備檔,它提供了使用和管理大頁的一種方式。 最後,libhugetlbfs 為使用者提供了管理大頁的工具。 這幾部分的關係如下圖所示:

圖 1. 大頁結構圖


圖 2. 大頁使用的時序圖

上面時序圖展示了使用者使用大頁時,從使用者空間調用到內核空間,最終分配頁給使用者的過程。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.