1. 程式人生 > >避免實體記憶體碎片化

避免實體記憶體碎片化

在2.6.20-rc6中,mel Gorman提交了的patch引入了ZONE_MOVABLE,引入這個pseudo zone的目的是為了防止zone記憶體碎片化

ZONE_MOVABLE表示這個zone僅能被帶有__GFP_HIGHMEM和__GFP_MOVABLE標誌的分配使用。這就使得所有non-movable頁面都限制在單一的記憶體區,而movable的分配則由其他的記憶體區滿足。這個patch可以和基於連結串列的防碎片patch一起使用。

Movable zone的大小由核心引數"kernelcore="指定。這個引數指定了多少記憶體分配給ZONE_MOVALBE。在ZONE_MOVABLE zone內的頁面都可以做頁面遷移或者頁面回收。

當我們選擇一個zone的頁面用於ZONE_MOVABLE時,需要考慮兩點:

首先,僅僅位於最高記憶體zone的記憶體可用於ZONE_MOVABLE。對於x86 arm平臺,是ZONE_HIGHMEM;對於ppc64則是ZONE_DMA;對於x86_64則是ZONE_DMA32.

其次,核心使用的記憶體可能平坦的分佈在多個NUMA節點。如果這些節點的尺寸不相同,就會導致核心在不同節點上使用的記憶體數量不同。

預設情況下,這個zone不會被用作huge pages分配,因為huge pages分配是固定的和non-migratable。提供了一個sysctl hugepages_treat_as_movable允許在ZONE_MOVABLE上執行huge pages分配。這就意味著當系統執行了這個系統呼叫後,huge page pool的尺寸包含了ZONE_MOVABLE的尺寸。

除了hugh pages可以是non-ovable,作者不再引入其他可能會導致ZONE_MOVABLE外碎片的分配。

相關推薦

避免實體記憶體碎片

在2.6.20-rc6中,mel Gorman提交了的patch引入了ZONE_MOVABLE,引入這個pseudo zone的目的是為了防止zone記憶體碎片化 ZONE_MOVABLE表示這個zone僅能被帶有__GFP_HIGHMEM和__GFP_MOVABLE標誌的

記憶體管理五 實體記憶體初始

一、概序   linux記憶體管理包含記憶體初始化、頁表對映過程、核心記憶體佈局圖、夥伴系統、SLAB分配器、vmalloc、malloc、mmap缺頁中斷等內容。按層分可以分為使用者空間、核心空間和硬體層,下面的圖可以詳細的說明:    二、核心記憶體分佈 1、實體記憶體大小:   現

malloc原理和記憶體碎片

當一個程序發生缺頁中斷的時候,程序會陷入核心態,執行以下操作: 1、檢查要訪問的虛擬地址是否合法  2、查詢/分配一個物理頁  3、填充物理頁內容(讀取磁碟,或者直接置0,或者啥也不幹)  4、建立對映關係(虛擬地址到實體地址) 重新執行發生缺頁中斷的那條指令 如果第3步

奔跑吧linux核心-實體記憶體初始

記憶體管理是一個很複雜的系統,涉及的內容很多,下圖是一個抽象的概述 記憶體大小 在ARM linux中用dts(dts由powerPC的fdt演變過來)呈現,在ARM vexpress中,記憶體的定義是在 kernel\linux\v4.4\arc

圖解記憶體池內部結構,看它是如何克服記憶體碎片的?

記憶體是軟體系統必不可少的物理資源,精湛的記憶體管理技術是確保記憶體使用效率的關鍵,也是進階高階研發的必備技巧。為提高記憶體分配效率,_Python_ 內部做了很多殫心竭慮的優化,從中我們可以獲得一些啟發。 開始研究 _Python_ 記憶體池之前,我們先大致瞭解下 _Python_ 記憶體管理層次:

STL中的vector如何處理才可以避免記憶體碎片

答: 使用vector內的reserve函式。 reserve函式主要是為提升vector的效率而存在的,如果已知vector的大小,可以在初始化時為vector執行reserve操作,分配足夠的記

Delphi 的TStringBuilder防止服務器內存碎片

防止 size span 內存空間 .get cte protect int eof Delphi 2009+ 的 System.SysUtils提供了一個類似.Net的StringBuilder,用於存儲字符數組。 很多人不明白為什麽要用TStringBuilder, D

張書樂:碎片超級IP式微!中國式IP養成必須靠“森林”

ip7月,一連串與超級IP有關的利好紛至沓來。國內網文IP重鎮閱文集團即將沖擊IPO;迪士尼中國與網易集團宣布合作,除了送來漫威正版漫畫外,還計劃共同打造中國超級英雄;博易創為宣布獲得古龍、梁羽生、溫瑞安等宗師級武俠IP,並將圍繞望古神話打造世界觀超級IP;更為驚人的還在後面,中央電視臺和美國玩具遊戲公司“孩

(13)碎片閱讀只會讓你變得越來越愚蠢

強烈 快速 str 多好 努力 滿足 養成 補充 感覺 碎片化閱讀正在令你變得越來越愚蠢 昨天下午我坐在回上海的火車上,掏出Kindle準備看《金字塔原理》。 當我開始看這本書的時候有兩件非常可怕的事情發生了。 第一件事,我發現自己的大腦竟然像轉不動了一樣!

Asp.net相關知識和經驗的碎片記錄

class xquery 配置 lte 方案 字符 慎用 code run 1、解決IIS7.0下“HTTP 錯誤 404.15 - Not Found 請求篩選模塊被配置為拒絕包含的查詢字符串過長的請求”問題 方案1:在程序的web.config中system.web節點

給大家推薦兩門課程,利用碎片的時間去提升自己

運維 網絡 微服務 架構 實戰 古人雲:“活到老,學到老。”互聯網算是最辛苦的行業之一,“加班”對工程師來說已是“家常便飯”,同時互聯網技術又日新月異,很多技術人都疲於應付,叫苦不堪。以至於長期以來流傳一個很廣的誤解:35歲是技術人員工作的終點。 那麽技術人如何快速成長?也是技術人一直以來

怎麼利用碎片時間去充實自己?

相信大家身邊都有這種現象,在忙著逼地鐵時也會同時也會拿起手機看看最新的時事;在忙完一半工作時休息下會隨便上網瀏覽下關於工作方面的資訊。這是今天想要說的,合理利用碎片化時間,學習更多的知識或者瞭解更多以充實自己。人們沒有完整的時間學習知識,所以大家希望用碎片化閱讀的方式來獲取一些資訊和資訊。

如何高效的碎片學習

碎片化學習是絕大多數人都會遇到的問題。而與碎片化學習相關聯的一個詞語就是低效,那麼怎麼才能讓你的碎片化學習變得高效呢? 1.不要“假收藏”,什麼是假收藏,就是收藏了卻從來不看,要麼不收藏,要麼收藏了經常去消化。 2.帶著目的,基於搜尋去學習。不這樣,你瀏覽過的新聞,公眾號文章,書,看

無法在節點上執行實體記憶體檢查

解決辦法:  你可以忽略所有強制安裝,一般不會影響功能。 但如果你有一個好奇的心,想知道為什麼會產生這種錯誤,並且如何解決,請繼續閱讀事實上Oracle執行先決條件檢查是依賴c$共享,很多系統管理員為了安全預設都關閉了這個,所以導致檢查不通過。開啟方法很簡單,確保“服務”裡的

e820與kernel實體記憶體對映

http://deltamaster.is-programmer.com/posts/37297.html 我們都對作業系統如何管理記憶體有一定的瞭解,然而,在作業系統開始管理記憶體之前,首先要獲取實體記憶體的資訊,比如一共有多少實體地址是可用的,有哪些實體地址是被ACPI(Advanced C

QEMU深入淺出: guest實體記憶體管理

原  文:http://blog.vmsplice.net/2016/01/qemu-internals-how-guest-physical-ram.html 作  者:Stefan Hajnoczi 領  域:Open source and virtuali

Oracle安裝時先決條件實體記憶體檢查失敗的解決方案

Oracle安裝時先決條件檢查失敗的解決方案: 環境說明:   安裝環境:Win7-64bit專業版,記憶體6G,硬碟空間足夠   安裝版本:Oracle Database 11g Release 2 (11.2.0.1.0) for Micros

虛擬記憶體實體記憶體

第一層理解         1.每個程序都有自己獨立的4G(32位系統下)記憶體空間,各個程序的記憶體空間具有類似的結構           2.一個新程序建

Linux記憶體初始之夥伴系統(三)

這裡主要分析zone/zonelist的初始化,以及把系統空閒記憶體釋放到夥伴系統 1.zone的初始化 呼叫關係:start_kernel->setup_arch->paging_init->bootmem_init->zone_sizes_init->fre

Linux記憶體初始之sparse記憶體模型(二)

1.Linux記憶體模型 前面已經分析把實體記憶體新增到memblock以及給實體記憶體建立頁表對映,這裡我們分析sparse記憶體模型 在linux核心中支援3中記憶體模型,分別是flat memory model,Discontiguous memory model和sparse mem