Linux 內存管理四

  1. Page cache 理解,Page cache 實際是一塊內存,linux 讀取一個文件,會先看看page cache 是否命中,如果沒有命中,先把文件讀到page cache ,再從page cache 讀文件。如果是寫的,也是先寫入page cache區域,linux應用程序的write 已經返回,什麼時候真正寫入磁盤,這是linux內存磁盤替換算法的事情。
  2. Linux 讀寫文件有兩種方式,read/write  mmap 。read write好處是可以流控,每次寫入接着上次的,mmap是減少了page cache和內存的拷貝過程,每次都是直接操作用戶空間指向page cache的內存,性能更高。所以如果page cache 命中,會很大程度提高性能。比如我們運行一個a.out ,第一次時間要比第二次時間長很多。這就是cache 影響的性能。 我們可以用 echo 3 > /proc/sys/vm/drop_caches 來丟掉cache。

     

    Page cache 在linux有兩種形式,cached 與buffers。

    Cached 是以文件爲背景的page cache,比如分區A 中的三個文件 a b c ,那麼讀a b c產生的page cache 是在cached 這裏。

    Buffers 是以裸分區爲北京的page cache ,比如你讀取sda ,那麼產生的page cache 是在buffers這裏。

還有一個特例,對於文件系統,比如ext4也會直接訪問裸分區,比如文件系統的meta data還是裸分區訪問。

不論cached 還是buffers 都是文件的緩存。所以新版本的free命令把他們合在一列了。

有文件背景的頁面,內存是文件的副本,在出現內存不夠的時候。Linux系統會回收這些內存,也有一些一般不能被直接回收的,比如堆,棧,數據段等一般不會被回收,這些是沒有文件背景的,也叫匿名頁,這些通常常駐內存。Linux 爲了回收匿名頁,僞造了一個文件背景,也就是linux 裏面的swap分區。匿名頁就可以被交換到這裏面,在window 裏面就叫做虛擬內存(pagefile.sys).swap的算是LRU:最近最少使用的頁面swap出去

回收的兩種方式:

桌面系統一般會使能swap分區,增大內存,嵌入式系統通常是關閉swap分區的,因爲一旦使能後,匿名頁就是經常寫flash ,一是速度慢,而是flash 壽命有限。

嵌入式系統可以使用Zram ,利用cpu的算力自動壓縮,達到增大內存的效果,這是一個非常巧妙的設計:

我們公司android 項目中ZRAM默認也是打開的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章