小编joz*_*joz的帖子

x86在不可缓存内存上的锁定前缀是否会导致内存带宽上的拒绝服务?

具有锁定前缀的指令是否可以使其余的CPU(虚拟机)在虚拟化环境中占用内存带宽?

例如,请考虑以下代码

loop:
    lock inc dword [rax]
    jmp loop
Run Code Online (Sandbox Code Playgroud)

现在假设rax包含一个不可缓存的内存位置的地址.(使用PAT或MTRR将内存类型设置为UC).

这将迫使CPU锁定内存总线并减慢其余CPU的内存访问速度,这使其成为拒绝服务的潜在工具.

现代处理器是否具有在虚拟机之间划分内存带宽的机制,以防止此类攻击?

x86 locking atomic cpu-architecture memory-bandwidth

5
推荐指数
0
解决办法
193
查看次数

x86机器上的不同CPU可以具有不同的本地APIC寄存器MMIO基址吗?

英特尔手册称本地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寄存器映射到物理存储器中的不同位置.

  1. 是否有可能同一台机器上的不同CPU可以为本地APIC提供不同的基址?比如说,CPU 0决定保持在FEE00000H,但CPU1移动到FEF00000H

  2. 如果满足以上条件,PCI MSI中断如何工作?如果不同的CPU可以具有不同的本地APIC地址,则MSI消息地址对于不同的CPU意味着不同.

x86 intel interrupt pci

5
推荐指数
1
解决办法
330
查看次数

全局不可见的加载说明

由于存储负载转发,某些负载指令能否在全局范围内不可见?换句话说,如果加载指令从存储缓冲区中获取其值,则它永远不必从高速缓存中读取。
通常说来,当从L1D缓存读取负载时,该负载在全局范围内可见,因此,未从L1D读取的负载应使其在全局上不可见。

cpu-architecture memory-barriers cpu-cache

3
推荐指数
1
解决办法
297
查看次数