CentOS 5.2 + Xen で powernow-k8

CentOS 5.2のカーネルXen対応にしてXenを使っていたら、powernowが効かないことに気付く。
どうやらXen 3.0の仕様のようだ。

いろいろ調べてみると、出たばかりのXen 3.3で対応した様子*1。さっそくいれてみる。
オフィシャルのバイナリリリースはないようですが、http://www.ruslansivak.com/index.cfm/2008/7/7/Xen-32-on-CentOS-52--x8664--RHEL-52-x8664http://www.gitco.de/repo/xen3.3.0/rpmを作ってる方がいたので試してみた。
xenlibvirt関連のパッケージをインストールして、/etc/grub.confにcpufreqの設定を書き込む。

title CentOS (2.6.18-92.1.10.el5xen)
        root (hd0,0)
        kernel /boot/xen.gz-3.3.0 cpufreq=xen
        module /boot/vmlinuz-2.6.18-92.1.10.el5xen ro root=/dev/md0
        module /boot/initrd-2.6.18-92.1.10.el5xen.img

して、reboot*2
結果。Dom-0でみると、一応周波数は落ちてる模様。

# cat /proc/cpuinfo
--
vendor_id       : AuthenticAMD
cpu family      : 15
model           : 63
model name      : AMD Athlon(tm) 64 Processor 3500+
stepping        : 2
cpu MHz         : 800.000

ただしDom-Uでは

# cat /proc/cpuinfo
--
vendor_id       : AuthenticAMD
cpu family      : 15
model           : 63
model name      : AMD Athlon(tm) 64 Processor 3500+
stepping        : 2
cpu MHz         : 2200.076

さて、正しいのだろう・・・。

xen-develのメーリングリストにあった記述では

It will only work for AMD processors that support the architectural P-state driver, such as 3rd generation Opterons, Phenoms, and Turion Ultras.

らしいので、Venice coreのこのAthlon 64では動かないのかもしれない。(TSCの問題で切ってある?)

ちなみに、このcpufreqはhyperviser (すなわち、xen本体)で動作していて、Dom-0からは制御できない。
このcpufreq driverは、xenに組み込まれたものでLinux kernelとは関係ないものである。
grub.confでの起動オプションをcpufreq=xenからcpufreq=dom0-kernelにすれば制御がDom-0に移り、Xenなしの時のようにcpufreqdが使えるようである。また今度試してみよう。

*1:[Xen-devel][PATCH 1/5] Add cpufreq pwr mgmt to Xen - Xen Source[Xen-devel] [PATCH][1/2] AMD PowerNow! in the Hypervisor (dom0 c - Xen Sourceより

*2:ここではDom-UのOSはそのまま使えましたが、動かなくなっても知りません。