• memory zone spanned/present/managed区别


    这两天研究memory zone的水位问题涉及到两个参数分别是/proc/sys/vm/extra_free_kbytes以及min_free_kbytes(在kernel-4.4)。

    而通过代码发现min_free_kbytes这个值由normal zone下的managed pages决定。

    先说总的关系:

    spanned:表示当前zone所包含的所有的pages

    present:表示当前zone在去掉第一阶段kernel reserve的内存之后剩下的pages。

    managed:表示当前zone去掉初始化完成以后所有的kernel reserve的内存剩下的pages。

    其中min_free_kbytes由normal zone去掉第一阶段初始化完成后的kernel reserve的内存后所剩余的pages来计算得出min_free_kbytes

    1.  
      int __meminit init_per_zone_wmark_min(void)
    2.  
      {
    3.  
      unsigned long lowmem_kbytes;
    4.  
      int new_min_free_kbytes;
    5.  
       
    6.  
      lowmem_kbytes = nr_free_buffer_pages() * (PAGE_SIZE >> 10);-------------(1)
    7.  
      new_min_free_kbytes = int_sqrt(lowmem_kbytes * 16);-------------(2)
    8.  
       
    9.  
      if (new_min_free_kbytes > user_min_free_kbytes) {
    10.  
      min_free_kbytes = new_min_free_kbytes;-------------------(3)
    11.  
      if (min_free_kbytes < 128)
    12.  
      min_free_kbytes = 128;
    13.  
      if (min_free_kbytes > 65536)
    14.  
      min_free_kbytes = 65536;
    15.  
      } else {
    16.  
      pr_warn("min_free_kbytes is not updated to %d because user defined value %d is preferred ",
    17.  
      new_min_free_kbytes, user_min_free_kbytes);
    18.  
      }
    19.  
      setup_per_zone_wmarks();
    20.  
      refresh_zone_stat_thresholds();
    21.  
      setup_per_zone_lowmem_reserve();
    22.  
      setup_per_zone_inactive_ratio();
    23.  
      return 0;
    24.  
      }
    25.  
      module_init(init_per_zone_wmark_min)

    ps:kernel reserve部分内存的初始化在kernel启动过程中可能会而分为两个阶段。

    (1)这里的值为所有zone的managed pages之和乘4将单位换算成KB,但是此时的memory reserve还没完成,所以得到的managed pages和最后系统完全起来之后打出的值不一致,此时的managed pages为总的spanned pages减去reserved pages。

    (2)然后乘16在开方,最后这个值就是min_free_kbytes的值。

    (3)得出min_free_kbytes的值。

     from: https://blog.csdn.net/zsj100213/article/details/80696451

  • 相关阅读:
    获取设备信息
    获取Mac地址
    常用正则
    几个字段相同的纪录去重留下主键最小的一条纪录
    mysql查询数据库中包含某字段(列名)的所有表
    nginx反向代理
    Eureka参数配置项详解
    html5验证自适应
    synchronized对象解析
    多线程进行数据同步
  • 原文地址:https://www.cnblogs.com/aspirs/p/13977599.html
Copyright © 2020-2023  润新知