gpt4 book ai didi

linux-kernel - 关于page_address()的实现的问题

转载 作者:行者123 更新时间:2023-12-03 01:36:01 25 4
gpt4 key购买 nike

在具有highmem的x86机器上,当内核想要查询物理帧的内核虚拟地址时,它将使用page_address。它的工作原理取决于是否定义了宏WANT_PAGE_VIRTUAL,该宏决定了struct page中是否添加void *virtual。如果没有void *virtual,内核将使用哈希表page_address_htable来进行转换,这似乎是x86适用的方法。相反,mips 和 m68k 只是采用 void *virtual(我对此不太确定)。

所以我的问题是,为什么 x86 更喜欢哈希表而不是改进的struct page?它能带来什么好处?

最佳答案

由于需要大量的struct page(每一页一个!),因此在结构中再添加一个单词是非常昂贵的(或者相反,将结构缩小一个单词)带来很多好处)。在 32 位架构上,WANT_PAGE_VIRTUAL 特别昂贵——没有它,struct page 正好是 32 字节,这意味着它可以很好地打包到缓存行等中。

在 x86 上,散列查找足够快(因为乘法在 x86 上很快),因此权衡非常有利于使结构页更小。我想在 m68k 上乘法已经足够昂贵了,将结构页膨胀到 36 字节是值得的。

关于linux-kernel - 关于page_address()的实现的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6190353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com