linux-kernel – 关于page_address()实现的问题
发布时间:2020-12-14 00:51:24 所属栏目:Linux 来源:网络整理
导读:在具有highmem的x86机器上,当内核想要查询物理帧的内核虚拟地址时,它将使用page_address.它的工作原理取决于是否定义了宏WANT_PAGE_VIRTUAL,它决定了struct page中是否添加了void * virtual.如果没有void * virtual,内核将使用散列表page_address_htable进行
在具有highmem的x86机器上,当内核想要查询物理帧的内核虚拟地址时,它将使用page_address.它的工作原理取决于是否定义了宏WANT_PAGE_VIRTUAL,它决定了struct page中是否添加了void * virtual.如果没有void * virtual,内核将使用散列表page_address_htable进行转换,这似乎是x86应用的方法.相反,mips和m68k只取虚拟*虚拟(我对此不太确定).
所以我的问题是,为什么x86更喜欢哈希表到改进的结构页面?它带来了哪些好处? 解决方法
由于需要很多结构页面(每个页面都有一个页面!),在结构中添加更多单词是非常昂贵的(或者相反,即使用一个单词缩小结构也会带来很多好处).在32位体系结构上,WANT_PAGE_VIRTUAL特别昂贵 – 没有它,struct page正好是32个字节,这意味着它很好地包含在缓存行等中.
在x86上,哈希查找足够快(因为乘法在x86上很快),权衡强烈支持使结构页面变小.我想在m68k乘法是足够昂贵,膨胀的结构页面到36字节是值得的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |