关于page_address()的实现的问题

ura*_*raj 4 linux-kernel

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

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

Rol*_*and 6

由于struct page需要很多(每个页面都有一个!),在结构中添加更多的单词是非常昂贵的(或者相反,即使用一个单词缩小结构也会带来很多好处).在32位体系结构WANT_PAGE_VIRTUAL上特别昂贵 - 没有它,struct page正好是32个字节,这意味着它很好地包含在缓存行等中.

在x86上,哈希查找足够快(因为乘法在x86上很快),权衡强烈支持使结构页面变小.我想在m68k乘法是足够昂贵,膨胀的结构页面到36字节是值得的.