如何在超线程英特尔至强处理器上使用高速caching

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

系统再次有8位工作人员,4位工作人员和4位其他人员(锁pipe理员,通信者,2位定序器)。 所以我们有1对1的线程来对应CPU。 正在运行的实验在检查点上。 我们正在创build一个第9个线程,以获取检查点并评估其对吞吐量的影响。 如果将第9个线程分配给其中一个包含4个工作人员或lockingpipe理器的CPU之一,则结果是可预测的 – 吞吐量下降。 但是,当我们把这个第9个线程放在其余的cpus中的一个上时,我们期望不会看到任何效果,因为这些线程不是系统的瓶颈,不应该影响工作线程。 但是,我看到吞吐量下降,我正在寻找一个解释。

我已经开始怀疑,如果非工作者线程上产生的检查点线程在某种程度上使工作线程的caching无效,那么可能会有问题。 我没有很好的理解caching如何在这个特定的EC2实例或Intel Xeon处理器上工作,所以我正在寻找一个关于这个caching如何工作的解释,特别是它如何在一个超线程系统中工作。 在超线程处理器共享caching上的两个cpus? 线程在处理器之间共享caching吗?

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

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

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