min_free_kbytes是內存最安全值的閾值,然后這個值是怎么影響到系統內存回收的呢?


min_free_kbytes

內存域水印值:min_free_kbytes

當不設置的時候:sqrt(16M)=4k 4k*4 = 16k

設置內存水印值的函數是:

6792 /*
6793  * Initialise min_free_kbytes.
6794  *
6795  * For small machines we want it small (128k min).  For large machinemis
6796  * we want it large (64MB max).  But it is not linear, because network
6797  * bandwidth does not increase linearly with machine size.  We use
6798  *
6799  *  min_free_kbytes = 4 * sqrt(lowmem_kbytes), for better accuracy:
6800  *  min_free_kbytes = sqrt(lowmem_kbytes * 16)
6801  *
6802  * which yields
6803  *
6804  * 16MB:    512k
6805  * 32MB:    724k
6806  * 64MB:    1024k
6807  * 128MB:   1448k
6808  * 256MB:   2048k
6809  * 512MB:   2896k
6810  * 1024MB:  4096k
6811  * 2048MB:  5792k
6812  * 4096MB:  8192k
6813  * 8192MB:  11584k
6814  * 16384MB: 16384k
6815  */
6

 __setup_per_zone_wmarks 中會設置每個內存zone中的min/low/high水印

內存域的這些值都是怎么玩的?

突然間發現了一個函數,可以看到每個內存域的各種內存的信息:show_free_areas竟然是printk,只有在內存很低的時候才打印!

min: 在vmscan時會用到:pfmemalloc_watermark_ok , __zone_watermark_ok這里會判斷是不是超過了內存的水位。

./include/linux/mmzone.h:258:#define min_wmark_pages(z) (z->watermark[WMARK_MIN])

 

low:

high

 


免責聲明!

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



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