文档章节

匿名内存 | shm

o
 osc_z1hvg4cu
发布于 2018/04/24 09:11
字数 464
阅读 12
收藏 0

精选30+云产品,助力企业轻松上云!>>>

page_is_file_cache是和swapbacked互斥的,所以说对于匿名页来说,分配的时候就就会把PageSwapBacked给设置上,page->mapping_address = 0x1

swap_backed和page->mapping_address貌似是重复的呢?感觉swapbacked是page->mapping_adddres超集。

今天和公司的内存管理的专家求教,原来系统的swapback包括shm,包括匿名页等等;而shm并不属于匿名页,匿名页刚分配出来就被设置上swapbacked啦。

shm内存增加内存的统计量是:

 580         __mod_node_page_state(page_pgdat(page), NR_FILE_PAGES, nr);
 581         __mod_node_page_state(page_pgdat(page), NR_SHMEM, nr);
 

/**
 * page_is_file_cache - should the page be on a file LRU or anon LRU?
 * @page: the page to test
 *
 * Returns 1 if @page is page cache page backed by a regular filesystem,
 * or 0 if @page is anonymous, tmpfs or otherwise ram or swap backed.
 * Used by functions that manipulate the LRU lists, to sort a page
 * onto the right LRU list.
 *
 * We would like to get this info without a page flag, but the state
 * needs to survive until the page is last deleted from the LRU, which
 * could be as far down as __page_cache_release.
 */
static inline int page_is_file_cache(struct page *page)
{
    return !PageSwapBacked(page);
}

 

是所有的匿名的内存,

普通的文件在普通的address_space,swap 的命名空间中保存着要被swap出去的页,还有将要被读出来的页。普通情况下匿名页是没有东西的在里面的。

swapbacked什么时候设置:在读之前设置,[只对shmem有用]

swapcache什么时候设置

backed还有swapcache的都是用来判断的:

 

share memory什么情况下都不会回收么?看函数:shmem_writepage

正常情况下:

add_to_swap --> add_to_swap_cache

什么时候清呢?

目前看只有一个地方是是shrink_page_list ---> add_to_swap

        if (PageAnon(page) && !PageSwapCache(page)) {
            if (!(sc->gfp_mask & __GFP_IO))
                goto keep_locked;
            if (!add_to_swap(page, page_list))
                goto activate_locked;
            lazyfree = true;
            may_enter_fs = 1;

            /* Adding to swap updated mapping */
            mapping = page_mapping(page);
        } else if (unlikely(PageTransHuge(page))) {
            /* Split file THP */
           if (split_huge_page_to_list(page, page_list))
                goto keep_locked;
        }
设置swapCache的地方是:SetPageSwapCache:
1):  __add_to_swap_cache

2):  shmem_replace_page

3): 

// 所以知道了,一个page刚被申请出来的时候,仅仅是放在了

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
mmap和shm共享内存的区别和联系

共享内存的创建 一、区别 1. 共享内存允许两个或多个进程共享一给定的存储区,因为数据不需要来回复制,所以是最快的一种进程间通信机制。共享内存可以通过mmap()映射普通文件(特殊情况下还...

osc_xb4v1nhl
2018/05/20
2
0
Posix共享内存

[TOC] 1. 概述 <font color=red>共享内存是可用IPC机制中最快的,</font>一旦共享内存区映射到共享它的进程地址空间: 进程间的数据传递就不再执行需进入内核的系统调用 各个进程向共享内存读...

osc_gh68xcjy
2019/09/16
1
0
golang对共享内存的操作

不同进程间的内存是互相独立的,没办法直接互相操作对方内的数据,而共享内存则是靠操作系统提供的内存映射机制,让不同进程的一块地址空间映射到同一个虚拟内存区域上,使不同的进程可以操作...

加油2018
2013/11/26
2.9K
0
进程间通信方法

1.进程间通信方法   进程用户空间是相互独立的,是不能相互访问的。但很多情况下进程间需要互相通信,来完成系统的某项功能。   通信方法:管道(匿名管道和命名管道)、共享内存、消息队...

osc_bt2kdd6q
2019/02/28
0
0
Linux进程间通信—— 内存映射

Linux环境进程间通信(五): 共享内存(上) 共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地...

li_wen01
2017/07/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

SpringCloud- 第六篇 Hystrix参数配置(三)

1:概述 Hystrix使用Archaius作为配置属性的默认实现。官方配置文档: https://github.com/Netflix/Hystrix/wiki/Configuration 每个属性有四个优先级,依次增大: 1:代码的全局默认值 2:动...

osc_7z601p6x
25分钟前
5
0
SpringBoot2 整合JTA组件,多数据源事务管理

本文源码:GitHub·点这里 || GitEE·点这里 一、JTA组件简介 1、JTA基本概念 JTA即Java-Transaction-API,JTA允许应用程序执行分布式事务处理,即在两个或多个网络计算机资源上访问并且更新...

osc_sju4uxml
26分钟前
11
0
Springboot + Vue + shiro 实现前后端分离、权限控制

本文总结自实习中对项目的重构。原先项目采用Springboot+freemarker模版,开发过程中觉得前端逻辑写的实在恶心,后端Controller层还必须返回Freemarker模版的ModelAndView,逐渐有了前后端分...

osc_lbt7zo1x
28分钟前
13
0
docker-compose部署配置jenkins

docker-compose部署配置jenkins 一、docker-compose文件 version: '3.1'services: jenkins: image: jenkins/jenkins:lts volumes: - /data/jenkins/:/var/jenkins_home ......

osc_4p2c0ecc
30分钟前
13
0
第五周

1、查找/etc目录下大于1M且类型为普通文件的所有文件 2、打包/etc/目录下面所有conf结尾的文件,压缩包名称为当天的时间,并拷贝到/usr/local/src目录备份。 3、利用sed 取出ifconfig命令中本...

osc_hxm151is
31分钟前
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部