Linux.ChinaUnix.net
ChinaUnix | Linux首页 | 新闻 | 博客 | 文章 | 专栏 | 新手 | 方案 | 图书 | 下载 | 人才 | 手册 | wiki | 搜索     
Linux论坛
  会员: 密码: 免费注册 | 忘记密码 | 会员登录 | 搜索 | 帮助 


有关mmap的锁页一直不是很清楚
首页 » CU论坛 » Linux » 汇总贴列表 » 内核源码 »  
[打印] [订阅] [收藏] [推荐给朋友] [本帖文本页]
duanius
精灵王



UID:471810
注册:2006-10-1
最后登录: 2008-05-16
帖子:294
精华:1

可用积分:294
信誉积分:100
专家积分:0 (本版)

状态:...保密...

[资料] [站内短信] [Blog]


顶部
1楼 发表于 2008-5-6 22:49 
可能很幼稚  但一直不理解
就是在字符设备驱动中  在内核态分配了一段缓冲区  然后逐页锁定 比如SetPageReserved
然后往用户空间做mmap的时候   把这个vma块再次锁定 比如vma->vm_flags |= VM_LOCKED;
这里不是很懂  虽然一个是用内核虚拟地址访问 一个是用户空间的地址 但因为对应的都是同样的若干个物理页面 感觉只要锁一次就可以确保物理页面不会被swapout了  为什么要锁两次呢  
我想一定是哪里的概念没理解或者混淆了  希望诸位指出



您对本贴的看法:鲜花[0] 臭蛋[0]
4月书评获奖名单公布 | CU社区建设有奖大调查 | CU-2008奥运之春摄影比赛
motalelf
精灵王



UID:384785
注册:2006-3-11
最后登录: 2008-05-16
帖子:361
精华:0

可用积分:187
信誉积分:105
专家积分:0 (本版)

状态:...离线...

[资料] [站内短信] [Blog]


顶部
2楼 发表于 2008-5-7 00:03 
我觉得都不用锁哈。

alloc_pages时就多出来一个引用。kswapd再怎么折腾,也不可能搞的page->copunt==0,怎么可能swapout这个page?



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

三个代表,吾党所宗。
以杜八耻,以进八荣。
咨尔多士,为民先锋。
夙夜匪懈,和谐是从。
   
4月书评获奖名单公布 | CU社区建设有奖大调查 | CU-2008奥运之春摄影比赛
dragchan
侠客




UID:423115
注册:2006-5-28
最后登录: 2008-05-15
帖子:21
精华:0

可用积分:52
信誉积分:100
专家积分:62 (本版)

状态:...离线...

[资料] [站内短信] [Blog]


顶部
3楼 发表于 2008-5-7 09:55 
两个都不需要。

内存回收时,只会从加入LRU list的page中选取。而alloc_page函数并不将page加入LRU list。

另外SetPageReserved也不是LZ所理解的那样,用了锁定page,阻止swapout。



您对本贴的看法:鲜花[0] 臭蛋[0]
4月书评获奖名单公布 | CU社区建设有奖大调查 | CU-2008奥运之春摄影比赛
duanius
精灵王



UID:471810
注册:2006-10-1
最后登录: 2008-05-16
帖子:294
精华:1

可用积分:294
信誉积分:100
专家积分:0 (本版)

状态:...保密...

[资料] [站内短信] [Blog]


顶部
4楼 发表于 2008-5-7 10:14 
get_free_pages 印象中调用的就是alloc_pages   那样说前者分配的内存岂不是都不要锁就可以避免swapout了么    但事实上很多代码对get_free_pages分配出来的都有额外的加锁阿



您对本贴的看法:鲜花[0] 臭蛋[0]
4月书评获奖名单公布 | CU社区建设有奖大调查 | CU-2008奥运之春摄影比赛
duanius
精灵王



UID:471810
注册:2006-10-1
最后登录: 2008-05-16
帖子:294
精华:1

可用积分:294
信誉积分:100
专家积分:0 (本版)

状态:...保密...

[资料] [站内短信] [Blog]


顶部
5楼 发表于 2008-5-7 10:28 


QUOTE:
原帖由 dragchan 于 2008-5-7 09:55 发表
两个都不需要。

内存回收时,只会从加入LRU list的page中选取。而alloc_page函数并不将page加入LRU list。

另外SetPageReserved也不是LZ所理解的那样,用了锁定page,阻止swapout。

不好意思  对mm这方面我了解的还很不够 所以你讲的有些不是很了解  
内存回收和swapout是同一个概念或者有什么关系么  为什么总是提到内存回收呢。。    还有 我想更确切的了解下swapout过程和lrulist以及alloc_pages 的关系  这方面的资料lkd和ulk中我还没找到。。网上貌似也不是很好找

另外setpagereserved 确实不止是仅仅锁定page的概念  但感觉它确实可以起到pin住内存的作用
引用ieee一篇论文的一段话:                                                                                    
The memory pages were also pinned in the memory by SetPageReserved() Linux kernel API
function call, so that the Linux memory manager do not swap out these pages to the disk.
Pinning the DMA memory is required for successful DMA ring operations.



您对本贴的看法:鲜花[0] 臭蛋[0]
4月书评获奖名单公布 | CU社区建设有奖大调查 | CU-2008奥运之春摄影比赛
duanius
精灵王



UID:471810
注册:2006-10-1
最后登录: 2008-05-16
帖子:294
精华:1

可用积分:294
信誉积分:100
专家积分:0 (本版)

状态:...保密...

[资料] [站内短信] [Blog]


顶部
6楼 发表于 2008-5-7 14:41 
我顶顶             顶



您对本贴的看法:鲜花[0] 臭蛋[0]
4月书评获奖名单公布 | CU社区建设有奖大调查 | CU-2008奥运之春摄影比赛
duanius
精灵王



UID:471810
注册:2006-10-1
最后登录: 2008-05-16
帖子:294
精华:1

可用积分:294
信誉积分:100
专家积分:0 (本版)

状态:...保密...

[资料] [站内短信] [Blog]


顶部
7楼 发表于 2008-5-7 15:02 
根据诸位回复 有2个内核中分配内存不需要担心换出的充分条件
1. alloc_page分配时会给count+1 所以不存在会count=0的情况
2.alloc分配的页不进入lru链表  swapout页都是在lru链表里的页选出  所以也不用担心

呃呃  感觉比较有道理  但还有些疑虑  因为这样好像对内核页而言  锁页就是形同虚设的东西  不知道诸位还有无其他意见



您对本贴的看法:鲜花[0] 臭蛋[0]
4月书评获奖名单公布 | CU社区建设有奖大调查 | CU-2008奥运之春摄影比赛
zx_wing   帅哥 (骑着猪的青蛙)
大天使
学徒



UID:499746
注册:2006-12-4
最后登录: 2008-05-16
帖子:1526
精华:3

可用积分:1681
信誉积分:100
专家积分:1 (本版)

来自:成都
状态:...保密...

[资料] [站内短信] [Blog]


顶部
8楼 发表于 2008-5-7 15:18 


QUOTE:
原帖由 duanius 于 2008-5-7 15:02 发表
根据诸位回复 有2个内核中分配内存不需要担心换出的充分条件
1. alloc_page分配时会给count+1 所以不存在会count=0的情况
2.alloc分配的页不进入lru链表  swapout页都是在lru链表里的页选出  所以也不用担心
...

有!还是没告诉我内核的页面到底会不会被换出去。
kswapd不扫描3G以上那就不会换出去了哦



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________


C调 ---- C语言
都是最喜欢的
4月书评获奖名单公布 | CU社区建设有奖大调查 | CU-2008奥运之春摄影比赛
duanius
精灵王



UID:471810
注册:2006-10-1
最后登录: 2008-05-16
帖子:294
精华:1

可用积分:294
信誉积分:100
专家积分:0 (本版)

状态:...保密...

[资料] [站内短信] [Blog]


顶部
9楼 发表于 2008-5-7 15:39 
按照他们给出的alloc_pages 是不会被换出的2个理由  貌似内核页是不会被换出的
看看内核里分配内存的函数  哪个不是最终要调用alloc _pages呢。。。alloc_pages分配的页不会被换出 那封装它的也不会被换出  如果封装函数没有做额外的处理的话  貌似就是这样(有些不礼貌 但还是希望更多的人能确定一下)

还是顶一下 等回复    主要是搞不懂为啥看过的代码里面会有对内核内存页的加锁。。

ps. 仅仅是一个锁页的bit位  折腾了我好几天  引申这么老远  这内核模块的一行代码写出来浓缩的真tmd全是精华。。。



您对本贴的看法:鲜花[0] 臭蛋[0]
4月书评获奖名单公布 | CU社区建设有奖大调查 | CU-2008奥运之春摄影比赛
duanius
精灵王



UID:471810
注册:2006-10-1
最后登录: 2008-05-16
帖子:294
精华:1

可用积分:294
信誉积分:100
专家积分:0 (本版)

状态:...保密...

[资料] [站内短信] [Blog]


顶部
10楼 发表于 2008-5-7 21:14 
有关换页的问题请参看http://linux.chinaunix.net/bbs/thread-997435-1-1.html
本贴我的回复请自动无视。。。



您对本贴的看法:鲜花[0] 臭蛋[0]
4月书评获奖名单公布 | CU社区建设有奖大调查 | CU-2008奥运之春摄影比赛

首页 » CU论坛 » Linux » 汇总贴列表 » 内核源码 »

 


Copyright © 2001-2008 ChinaUnix.net All Rights Reserved     联系我们:

感谢所有关心和支持过ChinaUnix的朋友们    转载本站内容请注明原作者名及出处

京ICP证041476号


清除 Cookies - Linux时代 - Archiver - WAP - TOP

Processed in 0.410813 second(s), 5 queries , Gzip enabled