1. 程式人生 > >記憶體管理中提到的hot cold page

記憶體管理中提到的hot cold page

所謂冷熱是針對處理器cache來說的,冷就是頁不大可能在cache中,熱就是有很大機率在cache中。

cold page和hot page的概念可以參考LWN的一片文章http://lwn.net/Articles/14768/

2.5.45核心,Martin Bligh和Andrew Morton以及其他人提交了一個核心分配器patch,引入了hot-n-cold pages的概念,這個概念本身是和現在處理器架構息息相關的。

以往我們認為系統記憶體是儲存資料最快的地方。事實上並不是這樣,最快的地方是處理器內部的cache。因此最近幾年,有很多核心優化方法是儘量利用處理器cache,避免使用主存。hot-cold page就是其中之一。

處理器cache儲存著最近訪問的記憶體。kernel認為最近訪問的記憶體很有可能存在於cache之中。hot-cold page patch因此為per-CPU建立了兩個連結串列(每個記憶體zone)。當kernel釋放的page可能是hot page時(可能在處理器cache中),那麼就把它放入hot連結串列,否則放入cold連結串列。 

當kernel需要分配一個page時,新分配器通常會從per-CPU的hot list獲取頁面,甚至我們獲得的頁面馬上就要寫入新資料的情況下,仍然能獲得較好的速度。當然也有些情況下,申請hot page不會獲得性能上的提高,只要申請cold page就可以了。比如DMA讀操作需要的記憶體分配,裝置會直接修改記憶體並且無效相應的cache。所以核心分配器提供了GFP_COLD分配標記來宣告從cold page連結串列分配記憶體。

使用per-CPU page連結串列也削減了鎖競爭,提高了效能。

Andrew Morton 測試了這個patch,在不同環境下獲得了%1 ~%12不等的效能提升,因此Linus接受了這個patch