具有锁定前缀的指令是否可以使其余的CPU(虚拟机)在虚拟化环境中占用内存带宽?
例如,请考虑以下代码
loop:
lock inc dword [rax]
jmp loop
Run Code Online (Sandbox Code Playgroud)
现在假设rax包含一个不可缓存的内存位置的地址.(使用PAT或MTRR将内存类型设置为UC).
这将迫使CPU锁定内存总线并减慢其余CPU的内存访问速度,这使其成为拒绝服务的潜在工具.
现代处理器是否具有在虚拟机之间划分内存带宽的机制,以防止此类攻击?
英特尔手册称本地APIC寄存器的存储器映射到4KB区域,默认地址为FEE00000H.可以使用IA32_APIC_BASE MSR 修改此地址.
引用SDM第3卷,第10.4.5节
Pentium 4,Intel Xeon和P6系列处理器允许通过修改IA32_APIC_BASE MSR的24位基址字段中的值,将APIC寄存器的起始地址从FEE00000H重定位到另一个物理地址.提供APIC架构的这种扩展以帮助解决与现有系统的存储器映射的冲突,并允许MP系统中的各个处理器将其APIC寄存器映射到物理存储器中的不同位置.
是否有可能同一台机器上的不同CPU可以为本地APIC提供不同的基址?比如说,CPU 0决定保持在FEE00000H,但CPU1移动到FEF00000H
如果满足以上条件,PCI MSI中断如何工作?如果不同的CPU可以具有不同的本地APIC地址,则MSI消息地址对于不同的CPU意味着不同.
由于存储负载转发,某些负载指令能否在全局范围内不可见?换句话说,如果加载指令从存储缓冲区中获取其值,则它永远不必从高速缓存中读取。
通常说来,当从L1D缓存读取负载时,该负载在全局范围内可见,因此,未从L1D读取的负载应使其在全局上不可见。