高速缓存如何在超线程英特尔至强处理器上工作

1 intel cache hyperthreading

我正在使用 c1.xlarge 实例在 EC2 上的研究数据库上运行一些实验。据我所知,c1.xlarge 使用 8 个超线程虚拟 CPU。亚马逊还表示,该实例使用来自“英特尔至强家族”的物理处理器。

同样,该系统有 8 个 CPU、4 个工人和 4 个其他人(锁管理器、通信器、2 个音序器)。因此,我们有一个 1 对 1 的线程与 CPU 的对应关系。正在运行的实验是在检查点上。我们正在创建第 9 个线程来获取检查点并评估其对吞吐量的影响。当将第 9 个线程分配给包含 4 个工作线程或锁管理器之一的 CPU 之一时,结果是可以预测的 - 吞吐量下降。但是,当我们将第 9 个线程放置在剩余的一个 CPU 上时,我们预计不会看到任何影响,因为这些线程不是系统的瓶颈,不应影响工作线程。但是,我看到吞吐量下降,我正在寻找解释。

我开始怀疑,如果在非工作线程上产生的检查点线程以某种方式使工作线程的缓存无效,那么可能会出现问题。我不太了解缓存如何在这个特定的 EC2 实例或英特尔至强处理器上工作,因此我正在寻找有关缓存如何工作的解释,特别是它如何在超线程系统中工作。超线程处理器上的两个 CPU 是否共享缓存?线程是否跨处理器共享缓存?

我找到了一份英特尔手册,其中说英特尔至强处理器 3000 和 5000 系列使用“智能二级缓存,可以在两个内核之间共享数据以减少内存流量”。这是实例可能正在使用的,如果是,这是否意味着所有 8 个 vCPU 的共享缓存?

MDM*_*rra 5

由于您的服务器操作系统和 EC2 硬件之间存在虚拟化层,因此甚至不能保证来自您的 vCPU 的所有 8 个线程都在同一个物理 CPU 上执行。试图从访客内部衡量缓存命中或模式等内容是徒劳的。您无法了解实际的硬件。

一个 vCPU 不代表一个物理 CPU 内核,8 个 vCPU 不代表一个具有 8 个逻辑内核的物理 CPU。当然,大多数虚拟机管理程序的 CPU 调度程序会尝试调度来自同一客户的线程在多进程系统中的同一内核上执行,但不能保证。

  • 你好像有点糊涂了。c1.xlarge 的当前 Amazon 实例描述为`c1.xlarge:7 GiB 内存,20 个 EC2 计算单元(8 个虚拟内核,每个虚拟内核 2.5 个 EC2 计算单元),1690 GB 本地实例存储,64 位平台`所以你有 8 个虚拟内核。这些不映射到物理或逻辑核心,它们只是使您的 VM 能够调度那么多并发线程。这些线程在物理 CPU 上执行的物理或逻辑核心取决于管理程序的 CPU 调度程序。 (2认同)
  • 简而言之,您无法确定所有 8 个线程都在同一个物理 CPU 上执行,并且您无法从来宾看到物理主机的 CPU 缓存。 (2认同)