Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
存储缓冲区在现代x86上保存物理地址还是虚拟地址?_X86_Intel_Cpu Architecture_Amd Processor_Micro Architecture - Fatal编程技术网

存储缓冲区在现代x86上保存物理地址还是虚拟地址?

存储缓冲区在现代x86上保存物理地址还是虚拟地址?,x86,intel,cpu-architecture,amd-processor,micro-architecture,X86,Intel,Cpu Architecture,Amd Processor,Micro Architecture,现代Intel和AMD芯片在提交到一级缓存之前必须对存储进行缓冲。从概念上讲,这些条目保存存储数据和存储地址 对于地址部分,这些缓冲区条目是否包含虚拟地址或物理地址,或者两者都包含?我认为存储uop必须在执行期间检查合法地址;这意味着阅读TLB。放弃这一点并强制存储缓冲区在提交到L1d缓存时重做virt->phys似乎有些疯狂。因此,我认为我们可以排除只存储虚拟地址的可能性。而且,对于通过两个virt地址访问同一phys页面的情况,这也会使存储转发的正确性变得困难。我认为x86保证了即使在这种情

现代Intel和AMD芯片在提交到一级缓存之前必须对存储进行缓冲。从概念上讲,这些条目保存存储数据和存储地址


对于地址部分,这些缓冲区条目是否包含虚拟地址或物理地址,或者两者都包含?

我认为存储uop必须在执行期间检查合法地址;这意味着阅读TLB。放弃这一点并强制存储缓冲区在提交到L1d缓存时重做virt->phys似乎有些疯狂。因此,我认为我们可以排除只存储虚拟地址的可能性。而且,对于通过两个virt地址访问同一phys页面的情况,这也会使存储转发的正确性变得困难。我认为x86保证了即使在这种情况下,您也能看到自己的重新加载和自己最近的商店。我不知道为什么一旦你有了物理模型,保持虚拟会有用;我不认为存储转发只能在虚拟地址上进行探测,尽管先在虚拟地址上进行探测,然后再在物理地址上进行探测以节省延迟是合理的。@PeterCordes我认为你是对的:PA和VA都存储在SB中。似乎证实了这一点。在TLB查找之后填充PA,该查找与地址低12位上的存储转发查找(松散网络检查)并行完成。这就是为什么我们有4K别名。我刚刚想起我关于放射性尘埃的问题,有这些细节。@PeterCordes-玛格丽特联系到的证据很清楚,整个VA都被存储了,但不清楚为什么。其中提到的一件事是,VA可用并且比PA早存储2个周期,因此可能是为了启用快速存储转发(即,如果VAs匹配,则存储肯定会转发),然后返回到较慢的路径以处理异常VA别名情况。还有另外一项专利,他们讨论了细网和粗网的内容(也是存储转发spectre文件),这可能会澄清。该专利还提到了一种分割线存储机制:此外,如果存储指令涉及将数据存储到跨越两条缓存线的内存位置,MEU会向数据缓存发出信号,STD和STA操作被驱动到数据高速缓存存储器两次,第二次相应地调整数据大小和物理地址。FWIW这项专利非常古老(1997年),它涉及一个旧的32位uarch,具有12个存储缓冲区条目,因此在此期间情况可能发生了很大变化。