加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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字节是值得的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读