zoukankan      html  css  js  c++  java
  • 如何触发匿名页的回收[]

    echo 3 > /proc/sys/vm/drop_cache 保证了对pagecache和slab的回收,但是匿名页的回收没什么办法呀,

    其实原理很简单,page-cache是缓存,没有人拥有,并且slab中注册的那些shrinker也是只回收没有用到的内存,都不属于任何进程的

    但是匿名页就不一样了【说到这里还真是有个疑问了:kswap中释放的在进程用户空间中map的页咯】

    /proc/sys/vm/min_free_kbytes

    把这个值设置成100G之后,卡死机了;把这个值设置得很大,系统终于在不断进行page的回收过程了!

    【如何启动匿名页的回收,在页面的回收逻辑中】

    有个问题,mmap的file的页是属于匿名页还是文件缓存页?LRU_FILE链表中是管理的所有的匿名页么

    mem_cgroup_shrink_node:
    总共有两个地
    shrink_node_memcg是唯一的地方会涉及到
    mem_cgroup_shrink_node--->shrink_node_memcg
    ---------------------------------------------------------------
    1)- kswapd-->balance_pgdata-->kswapd_shrink_node
    2)- get_page_from_freelist-->node_reclaim-->__node_reclaim
    3)- try_to_free_pages/try_to_free_mem_cgroup_pages/shrink_all_memory---->do_try_to_free_pages-->shrink_zones
    -->shrink_node-------------->shrink_node_memcg
    ---------------------------------------------------------------
    
    3.1)__alloc_pages_slowpath --> __alloc_pages_direct_reclaim -->__perform_reclaim ----> try_to_free_pages
    3.2) try_to_free_mem_cgroup_pages [当在这个memory], 在try_to_charge的时候会自己触发回收
    3.3.1) try_charge
    3.3.2) mem_cgroup_write --> mem_cgroup_resize_limit
    3.3.3) mem_cgroup_force_empty_write-->mem_cgroup_force_empty
    3.3.4) mem_files['high']--->memory_high_write
    3.3.5) memory_max_write['max']
    3.3.6) reclaim_high
    
    3.3.6.1) mem_cgroup_alloc-->INIT_WORK(&memcg->high_work, high_work_func)-->high_work_func-->reclaim_high /* 原来每个 cgroup 都是有自己的>回收函数的 */ 
    3.3.6.2) exit_to_usermode_loop ---> tracehook_notify_resume --> mem_cgroup_handle_over_high; [b23afb93d317c65cef553b804f08dec8a7a0f7e1, mmecg: punt high overage reclaim to return-to-userland path ]中说的很清楚,在返回用户态之前回收这个组的内存!
    

     代码的逻辑,有心人能看懂吧。

  • 相关阅读:
    java中金钱计算BigDecimal
    SpringBoot的学习二:整合Redis,JPA,Mybatis
    SpringBoot的学习一:入门篇
    Java基础回顾一
    golang 实现冒泡排序
    Go统计键盘输入随机字母的个数
    破解点触码的识别之第三方平台超级鹰的SDK(python3版本)
    RuntimeError: Failed to init API, possibly an invalid tessdata path: E:python36报错
    Django项目部署
    Django REST framework 的功能
  • 原文地址:https://www.cnblogs.com/honpey/p/7816386.html
Copyright © 2011-2022 走看看