如何展開Linux Memory Management學習?


Linux的進程和內存是兩座大山,沒有翻過這兩座大山對於內核的理解始終是不完整的。

關於Linux內存管理,在開始之前做些准備工作。

 

首先bing到了Quora的《How can one really learn Linux Kernel Memory Management?》,這也是大部分初學者,或者說大部分Linux內核開發人員的疑問?

正如Vaishali Thakkar所說,最好的方法是讀代碼,但是面對這么龐雜的代碼,往往是無從下手。Vaishali Thakkar推薦從LSF/MM論壇入手去了解年度報告,但是這些技術往往都是最前沿的。倒是下面的路徑相對合適:

  1. LinuxMM - linux-mm.org Wiki
  2. Understanding the Linux Virtual Memory Manager 關於Linux內存管理的經典之作,雖然有點老2.4,但仍然有可取之處。
  3. 一些內存管理Maintainer的博客:Rik van Riel's home page Mel Gorman
  4. Kernel coverage at LWN.net內核開發相關細節
  5. 最方便的內核幫助文檔。

其他方法還包括通過IRC channel #mm on OFTC提問,閱讀代碼有疑問使用‘git blame’查找對應的git,然后通過閱讀注釋來理解背景。

最后還可以通過修改代碼或者參數來做實驗,驗證自己的想法。

另一位Chen Gang同樣提到了Understanding the Linux Virtual Memory Manager這本書。另由於MMU是架構相關的,要想理解內存管理,不閱讀MMU規格書是不可能的,對於ARM架構在官網提供了下載。同樣提到了閱讀代碼的重要性,雖然不是立即體現出來效果,但是久而久之會起效的。另外還可以通過修改MM相關參數,來做實驗;和閱讀MM相關 commits。

補充一個Mel Gorman用於測試內核MM的工具集mmtests

 

在經過一些了解之后,簡單做了個總結,如下:
1. 閱讀ARM MMU相關資料《 閱讀ARM Memory(L1/L2/MMU)筆記
2. 內存管理相關圖書《 Understanding the Linux Virtual Memory Manager》、《 奔跑吧 Linux內核》、《 Professional Linux Kernel Architecture/深入Linux內核架構》、《 Linux Kernel Development》、《 Understanding the Linux Kernel
3. 內核代碼閱讀,git blame/log查看信息;內核幫助文檔
4. 修改內核VM參數,進行測試;使用 mmtests
 

最后,正如Chen Gang所說“MM is a tough topic”,前面的路注定不平坦。戒驕戒躁,一步一個腳印吧!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM