HACK#44 虚拟环境下的省电
本节介绍在使用KVM/Xen时虚拟环境下的省电方法。
怎样才能在虚拟环境下省电?掌握了基本思想就可以理解虚拟环境下的省电方法。
虚拟环境下的省电思想
例如,某个客户端进入S3状态,但其他客户端可能仍在运行,因此不能将主机操作系统更改为S状态。因此需要将客户端操作系统内的电力管理和主机操作系统内的电力管理分开考虑。
客户端操作系统内的电力管理
客户端操作系统不对其他客户端、主机操作系统或管理程序造成影响,不进行实际的电力管理,但有时会成为主机操作系统或管理程序的电力管理的触发器(trigger)(例如,也可以当所有客户端操作系统都进入S3状态时对主机操作系统进入S3等的配置)。
·关于客户端操作系统内的S状态
从客户端操作系统内可以进行待机等,因此客户端操作系统管理者不使用客户端操作系统时可以通过使用S状态来省电。
·关于客户端操作系统内的C状态
虚拟CPU变为空闲时就会发出hlt命令,被排除在管理程序的调度对象之外。因此,即使在客户端操作系统的各C状态下进行不同的运行也没有意义,于是多数管理程序中没有配置客户端操作系统的C状态。
·关于客户端操作系统内的P状态
与C状态基本相同,即使配置也没有意义,因此多数管理程序中没有配置客户端P状态。
主机操作系统内的电力管理
主机操作系统或管理程序内的电力管理是通过控制实际的硬件来进行电力控制的。
·关于主机操作系统的S状态
如图6-5所示,从管理程序来看,所有客户端操作系统的虚拟CPU都被操作系统看做进程同样处理。因此,保存客户端的虚拟CPU上下文等的方法,与操作系统变为S状态时保存进程状态的方法相同。像Xen管理程序一样不进行磁盘I/O的管理程序,不将内存内容写入磁盘,因此有时不支持S4状态。
·主机操作系统上的C状态
与非虚拟环境的普通操作系统一样,根据主机操作系统或管理程序中设置的策略选择C状态。虚拟环境下需要注意的是客户端操作系统的中断频率。C状态是通过中断来恢复的,因此需要尽量减小中断的频率才能产生省电的效果。虚拟环境下有多个操作系统是中断的发生源,因此如果某一个客户端操作系统内频繁中断,则该客户端操作系统使用的CPU就无法进入深层C状态。也就是说,想要通过C状态来省电,就必须努力减小所有客户端操作系统上的中断次数。
·主机操作系统上的P状态
主机操作系统上的P状态导致的性能变化直接反映客户端操作系统的性能。有时即使认为客户端操作系统的CPU以3GHz的频率运行,实际却是设置为600MHz的。可能有人会担心这一点,但客户端操作系统并不是原本就占用了CPU所有时间的。即使物理CPU原来具有3GHz的性能,实际也可能只使用其一半的时间,因此客户端操作系统降低运行中的CPU频率本身是没问题的。在主机操作系统中改变P状态时,根据CPU使用率决定进入哪个P状态,但管理程序的种类或设置不同,运行情况有时也有所不同,这将在后面介绍。
图 6-5 管理程序的虚拟CPU和操作系统的进程