免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: platinum

关于 vmalloc 的几点疑惑…… [复制链接]

论坛徽章:
0
发表于 2009-05-21 15:15 |显示全部楼层
原帖由 思一克 于 2009-5-21 14:28 发表


32位的系统,最大固定映射896M物理内存。
64为的,应该就很大了。多大我不知道。如果插入的条不多,应该都是固定映射的。比如你有2G, 应该都固定了(具体数字不详)。

固定映射不代表不换出。这是两回事 ...


恩,换出和固定影射是两回事。

但非固定影射是为了解决什么问题呢?我原来理解是为了解决32位内核空间限制的问题。

所以我以为64位上面不需要非固定影射。而且我听说64位上zone_highmem实际上是空的,是不是就意味着没有非固定映射?

论坛徽章:
0
发表于 2009-05-21 15:41 |显示全部楼层
原帖由 Solaris12 于 2009-5-21 15:15 发表


恩,换出和固定影射是两回事。

但非固定影射是为了解决什么问题呢?我原来理解是为了解决32位内核空间限制的问题。

所以我以为64位上面不需要非固定影射。而且我听说64位上zone_highmem实际上是空的, ...


不是你理解的意思。或说你理解的仅仅是一部分。
你想,假如我机器内存是512M, 是否全部都被内核固定映射了? 是的。因为内核要管理他们。
这其中一部分是内核自己需要的。不换出。
还有一部分是为了给用户程序用的。那就要换出了。换出了的页还是在内核的固定映射中。还是被管理的。
换出是换出的物理页中的内容而不是物理页本身。物理页本身是换不出的。除非将内存用手拔掉才是真正的换出。

非固定映射就是要解决物理地址不连续的问题。比如用户需要的内存,还有vmalloc需要的。
固定映射的物理上是连续的。

vmalloc得到的物理页同时有2个虚拟地址。一个是固定映射地址。一个是非固定映射地址。

[ 本帖最后由 思一克 于 2009-5-21 15:45 编辑 ]

论坛徽章:
0
发表于 2009-05-21 16:26 |显示全部楼层

论坛徽章:
0
发表于 2009-05-21 16:47 |显示全部楼层
原帖由 思一克 于 2009-5-21 15:41 发表


不是你理解的意思。或说你理解的仅仅是一部分。
你想,假如我机器内存是512M, 是否全部都被内核固定映射了? 是的。因为内核要管理他们。
这其中一部分是内核自己需要的。不换出。
还有一部分是为了给用户程序用的。那就要换出了。换出了的页还是在内核的固定映射中。还是被管理的。
换出是换出的物理页中的内容而不是物理页本身。物理页本身是换不出的。除非将内存用手拔掉才是真正的换出。
...


不能换出和固定影射是两回事,这个我理解。


非固定映射就是要解决物理地址不连续的问题。比如用户需要的内存,还有vmalloc需要的。
固定映射的物理上是连续的。

vmalloc得到的物理页同时有2个虚拟地址。一个是固定映射地址。一个是非固定映射地址。


也就是说,64位上没有Zone Highmem,vmalloc分配的内存应该来自与zone_normal, 而且不保证连续,所以这部分内存地址又被影射成一段表面上连续的虚拟地址空间,这个区间专为不连续内核内存区域保留。

在此之前,没听说过固定影射和非固定影射这些名词。现在终于理解你说的非固定影射含义了。   



1. 那用户内存算什么?它也是有两个虚拟地址,一个是内核里映射的固定地址,另一个是用户空间的虚拟地址,它属于非固定影射吗?

2. 还有个疑问,vmalloc既然用的不多,那 Linux怎么有效管理内存碎片?


如果非固定影射内存是指除了内核虚拟地址以外又影射了多次的内存那我就觉得,可不可以换出要取决于它再次被映射入的空间允许不允许换出了。

例如,前面说vmalloc的内存可以page_fault,那就意味着可以换出。如果内核分配的内存使用vmalloc实际上性能也不会太好。

其实作为内核内存,应该可以全部都实现成不可换出的内存,尤其是64位内核地址空间,干嘛要实现换出呢?

论坛徽章:
0
发表于 2009-05-21 16:53 |显示全部楼层
原帖由 Solaris12 于 2009-5-21 16:47 发表


不能换出和固定影射是两回事,这个我理解。




也就是说,64位上没有Zone Highmem,vmalloc分配的内存应该来自与zone_normal, 而且不保证连续,所以这部分内存地址又被影射成一段表面上连续的虚拟地址 ...


vmalloc的好像不是在page_fault分配的物理页,而是直接分配。page_fault是为了同步页表的。

论坛徽章:
0
发表于 2009-05-21 16:59 |显示全部楼层
使得 而且只是单纯的拷贝 不会阻塞进程

论坛徽章:
0
发表于 2009-05-21 17:01 |显示全部楼层
因此可以看到 page fault异常 是唯一可以打断中断操作的异常 , 只是在这种情况下他必须确保不会阻塞进程导致中断不能进行下去

论坛徽章:
0
发表于 2009-05-21 17:10 |显示全部楼层
原帖由 思一克 于 2009-5-21 16:53 发表


vmalloc的好像不是在page_fault分配的物理页,而是直接分配。page_fault是为了同步页表的。


弄半天是我望文生意了。

论坛徽章:
0
发表于 2009-05-21 21:27 |显示全部楼层
原帖由 Solaris12 于 2009-5-21 17:10 发表


弄半天是我望文生意了。

你们讨论的真是热烈啊。关于vmalloc的问题eexplorer在35楼已经讲的很清楚了。
不过你们后来扯出了一堆概念我觉得都不准确,想补充一下。
首先是wired memory,这个东西我还真没找到权威定义。Mac OS中内核占的内存就是wired memory,但FreeBSD里又说malloc也可以分配wired memory,所以我觉得姑且不说它。
后面你和思一克说的“固定映射”肯定是不准确的。在linux中,固定映射指的是通过set_fixmap和kmap_atomic()占用的内存,前者用于对虚拟地址有硬性要求的硬件,比如APIC要求寄存器必须map到预定的虚拟地址,后者用于原子map高端内存。
从你们的意思来看所谓“固定映射”的是kernel memory,即虚拟地址3G+896M所对应的物理内存,这部分内存的映射在建立Master page table的时候就建好了,不会被swap出或产生由于page non-persent引起的page fault(非法访问还是会有的)。而vmalloc所对应的虚拟地址是固定的,它的范围是:VMALLOC_START ~ VMALLOC_END。VMALLOC_START = high_memory + 8M,也就是3G + 904M处。所以:
>>vmalloc得到的物理页同时有2个虚拟地址。一个是固定映射地址。一个是非固定映射地址。
是不准确的。在物理内存大于896M时,vmalloc从高端内存中分配,只有一个虚拟地址,这就有点像临时映射了。

最后“固定映射”的意义在不同的条件下可能不同,比如它有时也指地址条目在TLB中不被换出的映射,例如x86中的global page和某些体系中用固定的TLB寄存器映射的地址。

[ 本帖最后由 zx_wing 于 2009-5-22 08:19 编辑 ]

论坛徽章:
0
发表于 2009-05-21 21:49 |显示全部楼层
原帖由 zx_wing 于 2009-5-21 21:27 发表

你们讨论的真是热烈啊。关于vmalloc的问题eexplorer在35楼已经讲的很清楚了。
不过你们后来扯出了一堆概念我觉得都不准确,想补充一下。
首先是wired memory,这个东西我还真没找到权威定义。Mac OS中内核占 ...



> 不过你们后来扯出了一堆概念我觉得都不准确,想补充一下。

我就是没搞清楚何为wired memory(在linux kernel里从来没有听说过这种说法),所以就没插上什么话

>...
> 从你们的意思来看所谓“固定映射”的是kernel memory,即虚拟地址3G+896M所对应的物理内存,这部分内存的映射在建立Master page
> table的时候就建好了,不会被swap出或产生由于page non-persent引起的page fault(非法访问还是会有的)。

这句话有点不对,kernel作linear mapping的memory是可以被swap out出去的,如果这些page是被分配给user process,并符合被swap out出去的条件的话。kernel作映射是为了在kernel里访问这些memory方便。

否则假设我只有512M内存的话,kernel就没有swap机制了?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP