高端内存疑问?
高端内存(3G+896M ~ 4G),又分为vmalloc区、持久映射区、固定映射区,其中哪些场合会用持久映射区、固定映射区与物理地址建立映射呀{:qq25:} ? kmap_atmoic就用到了fix map 非原子的kmap使用的是永久映射? 回复 2# nswcfd我查了一些资料,自己总结了一下,不知道准不准确:
vmalloc()总是用vmalloc区的虚拟地址与分配到的物理地址建立映射,不管物理地址是从哪个zone分配到的;
内核如果直接调alloc_page(),得到的是一个物理页面,要“自己”建立映射,如果物理页面地址<896M,则用3G+896M那个地址与它线性映射,否则就得通过kmap()用永久映射区的虚拟地址跟它映射;
固定映射区总共4M,也就是1024个页面,据说这1024个页面按13个为一组划成多组,每个cpu有自己的一组,13个页面每个又被指定为特殊的用途。 回复 2# nswcfd
我改头像了{:qq23:} 。 回复 4# _nosay
查不多吧,还真不知道FixMap有13个呢。现在估计不止这些了吧? 回复 6# nswcfd
哦,我看资料是这么说的,我只是总结了一下,但并不懂。
每个CPU有13个,那如果系统中只有1个CPU,这4M虚拟空间是不是大部分就“浪费”了?
还有就是什么情况会用到这13个页面? NR_CPU是可以配置的,不过如果在up机器上跑一个SMP内核,那就真的是浪费了。 是指KM_XXX枚举吗?从名字上看基本上能推测出每一种使用的上下文。
比如KM_SKB_DATA_SOFTIRQ,一看就是跟skb相关的,自然也就用network driver相关的代码里。
再比如KM_PTEX,肯定就是跟页表操作相关的。 回复 9# nswcfd
哦,那等遇到相关的具体问题了,我在详细了解。
页:
[1]
2