CPU模型

来源:互联网 发布:怎么学习云计算 编辑:程序博客网 时间:2024/06/06 04:18

每一种虚拟机管理程序(Virtual Machine Monitor,VMM或Hypervisor)都会定义自己的策略,让客户机看起来有一个默认的CPU类型。有的Hypervisor会简单地将宿主机中CPU的类型和特性直接传递给客户机使用,而QEMU/KVM在默认情况下会向客户机提供一个名为qemu64或qemu32的基本CPU模型。QEMU/KVM的这种策略会带来一些好处,如可以对CPU特性提供提供一些高级的过滤功能,还可以将物理平台根据提供的基本CPU模型进行分组,从而让客户机在同一组硬件平台上的动态迁移更加平滑和安全。

在QEMU命令行中,可以用“-cpu cpu_model”来指定在客户机中的CPU模型。

进程的处理器亲和性和vCPU的绑定
通常在SMP系统中,Linux内核的进程调度器根据自有的调度策略将系统中的一个进程调度到某个CPU上执行。一个进程在前一个执行时间是在cpuM(M为系统中的某CPU的ID)上运行,而在后一个执行时间是在cpuN(N为系统中另一CPU的ID)上运行。这样的情况在Linux中是很可能发生的,因为Linux对进程执行的调度采用时间片法则(即用完自己的时间片立即暂停执行),而在默认情况下,一个普通进程或线程的处理器亲和性体现在所有可用的CPU上,进程或线程有可能在这些CPU之中的任何一个(包括超线程)上执行。

进程的处理器亲和性(Processor Affinity),即CPU的绑定设置,是指将进程绑定到特定的一个或多个CPU上去执行,而不允许将进程调度到其他的CPU上。Linux内核对进程的调度算法也是遵守进程的处理器亲和性设置的。设置进程的处理器亲和性带来的好处是可以减少进程在多个CPU之间交换运行带来的缓存命中失效(cache missing),从该进程运行的角度来看,可能带来一定程序上的性能提升。换个角度来看,对进程亲和性的设置也可能带来一定的问题,如破坏了原有SMP系统中各个CPU的负载均衡(load balance),这可能会导致整个系统的进程调度变得低效。特别是在多处理器、多核、多线程技术使用的情况下,在NUMA(Non-Uniform Memory Access)结构的系统中,如果不能基于对系统的CPU、内存等深入的了解,对进程的处理器亲和性进行设置可能导致系统的整体性能的下降而非提升。

每个vCPU都是宿主机中的一个普通的QEMU线程,可以使用taskset工具对其设置处理器亲和性,使其绑定到某一个或几个固定的CPU上去调度。尽管Linux内核的进程调度算法已经非常高效了,在多数情况下不需要对进程的调度进行干预,不过,在虚拟化环境中有时有必要将客户机的QEMU进程或线程绑定到固定的辑逻CPU上。

taskset -p [mask] pid

mask是一个代表了处理器亲和性的掩码数字,转化为二进制表示后,其值从最低位到最高位分别代表了第一个逻辑CPU到最后一个逻辑CPU,进程调度器可能将该进程调度到所有标志为“1”的位代表的逻辑CPU上去运行。

0 0
原创粉丝点击