_nosay 发表于 2016-05-23 15:17

高端内存疑问?

高端内存(3G+896M ~ 4G),又分为vmalloc区、持久映射区、固定映射区,其中哪些场合会用持久映射区、固定映射区与物理地址建立映射呀{:qq25:} ?

nswcfd 发表于 2016-05-23 17:22

kmap_atmoic就用到了fix map

nswcfd 发表于 2016-05-23 17:32

非原子的kmap使用的是永久映射?

_nosay 发表于 2016-05-23 20:32

回复 2# nswcfd

我查了一些资料,自己总结了一下,不知道准不准确:
vmalloc()总是用vmalloc区的虚拟地址与分配到的物理地址建立映射,不管物理地址是从哪个zone分配到的;
内核如果直接调alloc_page(),得到的是一个物理页面,要“自己”建立映射,如果物理页面地址<896M,则用3G+896M那个地址与它线性映射,否则就得通过kmap()用永久映射区的虚拟地址跟它映射;
固定映射区总共4M,也就是1024个页面,据说这1024个页面按13个为一组划成多组,每个cpu有自己的一组,13个页面每个又被指定为特殊的用途。

_nosay 发表于 2016-05-23 20:34

回复 2# nswcfd

我改头像了{:qq23:} 。

nswcfd 发表于 2016-05-24 12:03

回复 4# _nosay


    查不多吧,还真不知道FixMap有13个呢。现在估计不止这些了吧?

_nosay 发表于 2016-05-24 15:31

回复 6# nswcfd

哦,我看资料是这么说的,我只是总结了一下,但并不懂。
每个CPU有13个,那如果系统中只有1个CPU,这4M虚拟空间是不是大部分就“浪费”了?
还有就是什么情况会用到这13个页面?

nswcfd 发表于 2016-05-27 10:26

NR_CPU是可以配置的,不过如果在up机器上跑一个SMP内核,那就真的是浪费了。

nswcfd 发表于 2016-05-27 10:36

是指KM_XXX枚举吗?从名字上看基本上能推测出每一种使用的上下文。

比如KM_SKB_DATA_SOFTIRQ,一看就是跟skb相关的,自然也就用network driver相关的代码里。

再比如KM_PTEX,肯定就是跟页表操作相关的。

_nosay 发表于 2016-05-27 11:04

回复 9# nswcfd


哦,那等遇到相关的具体问题了,我在详细了解。
页: [1] 2
查看完整版本: 高端内存疑问?