Ark*_*rka 4 x86 memory-management x86-64 mmu
x86/x86-64公开了MTRR(存储器类型范围寄存器),它可用于为不同的用途指定物理地址空间的不同部分(例如,可Cacheable,Unchangeable,Writecombining等).
我的问题是,是否有人知道这些受MTRR定义的物理地址空间的限制是如何在硬件中实施的?在每次内存访问时,硬件检查物理地址是否落在给定范围内,然后进程决定是查找缓存还是查找writecombining缓冲区或直接将其发送到内存控制器?
谢谢
维基百科在MTRR文章中说:
较新的(主要是64位)x86 CPU支持称为页面属性表的更高级技术,允许对这些模式进行每表设置,而不是使用有限数量的低粒度寄存器
因此,对于较新的x86/x86_64 CPU,可以说MTRR可以作为PAT(页面属性表)的附加技术实现.PAT存储在内存中的位置是Page Table(Page Table Entry中的一些位,或PTE),在CPU中它们存储(缓存)在TLB表中(它是MMU的一部分).TLB(和MMU)已经是每次访问内存所访问的地方.我认为,即使使用MTRR(?),它也可能是控制内存类型的好地方
但是如果我停止猜测并打开RTFM书呢?有一本关于x86世界的非常好的书:Unabridged Pentium 4:IA32 Processor Genealogy(ISBN-13:978-0321246561).第7部分,第24章"Pentium Pro软件增强",部分"MTRR添加".
第582-584页的每个mtrr内存类型都有长规则,但所有5种类型的规则(Uncacheable = UC,Write-Combining = WC,Write-Through = WT,Write-Protect = WP,Write-Back = WB)开头:"执行缓存查找".
在第9部分"奔腾III"第32章"奔腾III至强"中,该书清楚地说:
当必须执行存储器访问时,处理器咨询MTRR和所选择的PTE或PDE以确定存储器类型(以及因此遵循的行为规则).
但是从另一方面...... WRMSR进入MTRR regs会使TLB失效(根据英特尔指令手册"instruct32.chm"):
当WRMSR指令用于写入MTRR时,TLB无效,包括全局条目(参见IA-32英特尔(R)体系结构软件开发人员手册第3卷第3章中的"转换旁视缓冲区(TLB)") ).
在"Intel 64和IA-32架构软件开发人员手册,第3a卷","10.11.9大页面注意事项"部分中还有一个更直接的提示:
MTRR为有限数量的区域提供内存类型,这些区域具有4 KB的粒度(与4 KB页面相同的粒度).给定页面的内存类型缓存在处理器的TLB中.
您询问:
在每次存储器访问时,硬件检查物理地址是否落在给定范围内
不可以.每次内存访问都不与所有MTRR进行比较.当PTE加载到TLB时,所有MTRR范围都与PTE内存位预组合.那么唯一检查内存类型的地方就是TLB线.而TLB IS检查每一个内存访问.
是否应该查找缓存或查找writecombining缓冲区或直接将其发送到内存控制器
不,有些事我们不清楚.缓存查找每个访问,即使对于UC(例如,如果区域刚刚更改为UC,则可以存储应该被逐出的缓存副本).
从第24章(它是关于奔腾4):
来自可缓存存储器 的负载允许处理器缓存的存储器类型是WP,WT和WB存储器(由MTRR和PTE或PDE定义).
当核心调度加载拖把时,拖把被放置在分配器阶段为其保留的加载缓冲区中.然后将内存数据读取请求发送到L1数据高速缓存以实现:
允许处理器核心推测性地执行从WC,WP,WT或WB存储空间读取数据的负载
来自Uncacheable Memory 的加载不可缓存的内存类型是UC和WC(由MTRR和PTE或PDE定义).
当核心调度加载拖把时,读取请求将放置在分配器阶段为其保留的加载缓冲区中.内存数据读取请求也会提交给处理器的缓存.在高速缓存命中的情况下,高速缓存行被从高速缓存中逐出.该请求发送给FSB接口单元.在FSB上执行存储器数据读取事务以从存储器中仅获取所请求的字节.从内存返回数据时,读取的数据会立即放入加载缓冲区.
不允许处理器内核推测性地执行从UC存储空间读取数据的负载
UC存储器UC的存储 是两种不可缓存的存储器类型之一(另一种是WC存储器类型).当执行存储到UC存储器时,它将发布在Allocator阶段为其保留的存储缓冲区中.UC内存的存储也会提交给L1数据高速缓存,L2高速缓存或L3高速缓存(如果有).在高速缓存命中的情况下,该行被从高速缓存中逐出.
当包含存储到UC存储器的存储缓冲区转发到FSB接口单元时,在FSB上执行存储器数据写入事务...
存储器到WC存储器 WC存储器类型非常适合具有以下特征的存储器区域(例如,视频帧缓冲器):
存储到WT存储器
当存储器可执行可缓存的Write-Through内存时.商店发布在Store Buffer中,该缓存是为在Allocator阶段使用而保留的.此外,存储被提交到L1数据高速缓存以进行查找.有几种可能性:*如果存储在数据高速缓存上命中,则高速缓存中的行会更新,但它仍处于S状态(这意味着该行有效).*如果商店错过了数据缓存,它将转发到L2缓存并执行查找:* - 如果它在L2缓存中的某一行上命中,则更新该行,但它仍处于S状态(这意味着该行有效).* - 如果它在L2缓存上未命中且没有L3缓存,则不采取进一步操作.
归档时间: |
|
查看次数: |
5403 次 |
最近记录: |