我目前的工作需要在Intel Core系列的CPU上生成指定数量的TLB未命中,尽管进展不顺利。我尝试了很多方法,但是所有方法都具有很高的TLB命中率。有谁知道关于x86 TLB如何工作的有用信息,或在用户进程中生成大量TLB未命中的某些方法?
在具有highmem的x86机器上,当内核想要查询物理帧的内核虚拟地址时,它将使用page_address.它是如何工作的取决于是否定义了宏WANT_PAGE_VIRTUAL,它决定是否void *virtual添加宏struct page.如果没有void *virtual,内核将使用哈希表page_address_htable进行转换,这似乎是x86应用的方法.相反,mips和m68k只是采取void *virtual(我不是很确定).
所以我的问题是,为什么x86更喜欢哈希表改进struct page?它带来了哪些好处?
当我反汇编Chromium二进制文件时,我注意到有这个模式中命名的函数:
_ZN6webrtc15DecoderDatabase11DecoderInfoD2Ev.part.1
如果我将此字符串赋予c ++ filt,则输出为
webrtc::DecoderDatabase::DecoderInfo::~DecoderInfo() [clone .part.1]
那么.part.1后缀究竟是什么意思呢?如果它表明有相同功能的多个副本,为什么需要它?是否由于要求与职位无关?我使用g ++作为编译器.