免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: embeddedlwp
打印 上一主题 下一主题

[内存管理] page cache问题 [复制链接]

论坛徽章:
1
双鱼座
日期:2013-08-28 13:47:26
71 [报告]
发表于 2012-05-30 12:04 |只看该作者
回复 50# embeddedlwp
文件映射时,vm_pgoff是以页为单位的,页内偏移被mask了。

   

论坛徽章:
1
双鱼座
日期:2013-08-28 13:47:26
72 [报告]
发表于 2012-05-30 12:18 |只看该作者
回复 69# embeddedlwp
就像注释里说的,页表崩溃,要打印出错的页表项,杀死当前进程{:3_191:} ,所以返回VM_FAULT_OOM,打上标志就可以杀死当前进程了。

   

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
73 [报告]
发表于 2012-05-30 14:50 |只看该作者
回复 72# firkraag

之前我看的OOM代码是2.6.11的,我的问题是页表错误跟VM_FAULT_OOM什么关系,OOM应该是在内存十分紧张的时候,select bad process, then kill it的时候使用的。这个页表错误应该与内存不足没关系吧,还是后来的代码中VM_FAULT_OOM这个标记也会作为select bad process考虑的因素之一?


   

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
74 [报告]
发表于 2012-05-30 15:10 |只看该作者
回复 72# firkraag

看了一下2.6.24的do_anonymous_page代码,为什么这里只在HIGHMEM分配一个page,为什么不读入数据,
应该什么时候读入数据。还有在2.6.11的代码中的do_anonymous_page函数分别处理写请求和读请求,
而较新的代码比如2.6.24已经没有读写判断了,他是怎样区分处理写请求和读请求呢?


   

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
75 [报告]
发表于 2012-05-30 15:13 |只看该作者
回复 64# firkraag


问题1:应该和该filemap是否是private有关。

=====================

这个anon_vma_prepare(vma)也算是一个比较复杂的函数了吧,如果不一定是filemap private也得加个判断吧,如果不是filemap private就不执行这句!

   

论坛徽章:
1
双鱼座
日期:2013-08-28 13:47:26
76 [报告]
发表于 2012-05-30 15:26 |只看该作者
回复 73# embeddedlwp
应该没关系,就是用它关闭进程。

这是注释:
We ran out of memory, or some other thing happened to us that made
us unable to handle the page fault gracefully.

论坛徽章:
1
双鱼座
日期:2013-08-28 13:47:26
77 [报告]
发表于 2012-05-30 16:12 |只看该作者
回复 75# embeddedlwp
anon的cow也会运行到这里的。

   

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
78 [报告]
发表于 2012-05-30 16:25 |只看该作者
回复 77# firkraag

从set_swap_extents的代码来看,如果发现得到的磁盘扇区号不是PAGE_SIZE aligned的话,
那个会找下一个文件数据块,那么根据下边代码中的probe_block++来看,应该是找到下一个
PAGE_SIZE aligned对齐的数据块,那么这个swap file是不是有些数据块就被跳过了,由于
这种情况的产生,那么我建一个1GB的swap file,把它mkswap然后swapon成真正的分区后是不是
这个分区会小于1GB,但是事实貌似与我的猜想相反,看下边的操作和dmesg,求指点!
  1.         while ((probe_block + blocks_per_page) <= last_block &&
  2.                         page_no < sis->max) {
  3.                 unsigned block_in_page;
  4.                 sector_t first_block;

  5.                 first_block = bmap(inode, probe_block);
  6.                 if (first_block == 0)
  7.                         goto bad_bmap;

  8.                 /*
  9.                  * It must be PAGE_SIZE aligned on-disk
  10.                  */
  11.                 if (first_block & (blocks_per_page - 1)) {
  12.                         probe_block++;
  13.                         goto reprobe;
  14.                 }

  15.                 for (block_in_page = 1; block_in_page < blocks_per_page;
  16.                                         block_in_page++) {
  17.                         sector_t block;

  18.                         block = bmap(inode, probe_block + block_in_page);
  19.                         if (block == 0)
  20.                                 goto bad_bmap;
  21.                         if (block != first_block + block_in_page) {
  22.                                 /* Discontiguity */
  23.                                 probe_block++;
  24.                                 goto reprobe;
  25.                         }
  26.                 }

  27.                 first_block >>= (PAGE_SHIFT - blkbits);
  28.                 if (page_no) {        /* exclude the header page */
  29.                         if (first_block < lowest_block)
  30.                                 lowest_block = first_block;
  31.                         if (first_block > highest_block)
  32.                                 highest_block = first_block;
  33.                 }

  34.                 /*
  35.                  * We found a PAGE_SIZE-length, PAGE_SIZE-aligned run of blocks
  36.                  */
  37.                 ret = add_swap_extent(sis, page_no, 1, first_block);
  38.                 if (ret < 0)
  39.                         goto out;
  40.                 nr_extents += ret;
  41.                 page_no++;
  42.                 probe_block += blocks_per_page;
  43. reprobe:
  44.                 continue;
  45.         }
复制代码
root@kernel:~# dd if=/dev/zero of=/swapfile bs=1024 count=1048576
记录了1048576+0 的读入
记录了1048576+0 的写出
1073741824字节(1.1 GB)已复制,27.4414 秒,39.1 MB/秒
root@kernel:~# mkswap /swapfile
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=351ed635-295e-4478-855b-623fc003cc76
root@kernel:~# swapon /swapfile

dmesg
[ 2388.055366] Adding 1048572k swap on /swapfile.  Priority:-2 extents:10 across:2105340k


   

论坛徽章:
1
双鱼座
日期:2013-08-28 13:47:26
79 [报告]
发表于 2012-05-30 16:37 |只看该作者
本帖最后由 firkraag 于 2012-05-30 16:44 编辑

回复 74# embeddedlwp
此处是缺页,而且缺的是anon的页,不是cow或filemap,不用读入数据。我看好像干脆就vma属性设置了。


   

论坛徽章:
1
双鱼座
日期:2013-08-28 13:47:26
80 [报告]
发表于 2012-05-30 17:33 |只看该作者
回复 78# embeddedlwp

用tune2fs先看看swapfile所在文件系统的块大小。

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP