試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

k10railgunによるK10/K10.5世代のAMD製CPUの電圧下げに関するメモ(バージョン0.801.8a時点・ページ2/3)

k10railgunによるK10/K10.5世代のAMD製CPUの電圧下げに関するメモ(バージョン0.801.8a時点・ページ1/3)」の続き。

実行

実行の際にはヘルプの表示を除いて管理者権限が必要。
k10railgunPythonスクリプトなので、Pythonが入っている環境であればスクリプトを端末の中で実行すれば動作する*1。バージョン0.801.8aの時点ではPythonのバージョンは2系を対象としている。

$ sudo [k10railgun.pyの場所] ([オプション...])

カーネルモジュールについてはcpufreq関係の他に

  • cpuid
  • msr

といったものが必要となるが、モジュールがシステム(ディストリのカーネル)内に存在すれば読み込み処理は自動的に行われる。
以下、出力は

のハードウェア環境におけるものとなる。

情報の表示

管理者権限で引数を付けずに実行すると

(定格電圧での動作時に実行)
$ sudo [k10railgun.pyの場所]
---- CPU/System Information --------------------------------------------------
M/B(BIOS) / BaseClk :A785GMH/128M(P1.30) / 200.00MHz
CPU Name / Cores/S  :AMD Athlon(tm) II X3 445 Processor /  3Cores/Socket
CPUID _ExFM_BaseFM-S:00100F53 Revision BL-C3
Flags               :HwC1EDi/SmiC1EDi//C5Di/AVimp/SVI
---- Freq./Pstate Management --------- ---- Power Management ----------------
MaxFreq./Pstates:3100MHz/ 3            VDD Renge mV    :max 1325-min    0
CPB Src/Count   :Di/0                  PSI_L           :Di / 1550mV>=VDD ON
VSSlamTime/P0-Pm:200us/tns / 500mV     AltVid vss      :Di    0us
                                       AltVid Start/VDD: 975mV /  975mV
  [Default]F4x1[F3:E0] Register          |[CurrentB]MSRC00100[68:64] Register
    Freq Ratio FIDh VDD  VIDh  Nb   NbVh | Freq Ratio FIDh VDD  VIDh  Nb   NbVh
PS   MHz       /DID   mV /IddA  VDD /DID |  MHz       /DID   mV /IddA  VDD /DID
 0: 3100 15.50 0f/0 1325 12/57 1150 20/0 | 3100 15.50 0f/0 1325 12/57 1150 20/0
 1: 2400 12.00 08/0 1225 1a/39 1150 20/0 | 2400 12.00 08/0 1225 1a/39 1150 20/0
 2: 1900  9.50 03/0 1125 22/36 1150 20/0 | 1900  9.50 03/0 1125 22/36 1150 20/0
 3:  800  4.00 00/1  975 2e/15 1150 20/0 |  800  4.00 00/1  975 2e/15 1150 20/0
             CPU0 CPU1 CPU2
[CoFreq MHz]  800  800  800
[CoVDD  mV ]  975  975  975

のように、マザーボードやCPUの情報とともに、設定可能な各P-State(上の場合は「0」から「3」の4つ)とそれに対応するクロックや電圧などが表示される。0番が最大クロック,3番が最小クロックでの動作状態。
マザーボードによってはBIOSで(OS起動前から有効な)コア電圧を設定できる場合があるが、その設定は0番のP-StateとしてOS起動後にも有効となる(1番からは定格のときと同じ)・つまり定格/最大のクロックのときだけ電圧が下がる状態となっている。

(BIOSでコア電圧を1.2375Vに指定した状態で実行)
$ sudo [k10railgun.pyの場所]
---- CPU/System Information --------------------------------------------------
M/B(BIOS) / BaseClk :A785GMH/128M(P1.30) / 200.00MHz                          
CPU Name / Cores/S  :AMD Athlon(tm) II X3 445 Processor /  3Cores/Socket      
CPUID _ExFM_BaseFM-S:00100F53 Revision BL-C3                                  
Flags               :HwC1EDi/SmiC1EDi//C5Di/AVimp/SVI                         
---- Freq./Pstate Management --------- ---- Power Management ----------------
MaxFreq./Pstates:3100MHz/ 3            VDD Renge mV    :max 1325-min    0    
CPB Src/Count   :Di/0                  PSI_L           :Di / 1550mV>=VDD ON  
VSSlamTime/P0-Pm:200us/tns / 500mV     AltVid vss      :Di    0us            
                                       AltVid Start/VDD: 975mV /  975mV      
  [Default]F4x1[F3:E0] Register          |[CurrentB]MSRC00100[68:64] Register 
    Freq Ratio FIDh VDD  VIDh  Nb   NbVh | Freq Ratio FIDh VDD  VIDh  Nb   NbVh
PS   MHz       /DID   mV /IddA  VDD /DID |  MHz       /DID   mV /IddA  VDD /DID
 0: 3100 15.50 0f/0 1325 12/57 1150 20/0 | 3100 15.50 0f/0 1238 19/57 1150 20/0
 1: 2400 12.00 08/0 1225 1a/39 1150 20/0 | 2400 12.00 08/0 1225 1a/39 1150 20/0
 2: 1900  9.50 03/0 1125 22/36 1150 20/0 | 1900  9.50 03/0 1125 22/36 1150 20/0
 3:  800  4.00 00/1  975 2e/15 1150 20/0 |  800  4.00 00/1  975 2e/15 1150 20/0
             CPU0 CPU1 CPU2
[CoFreq MHz]  800  800  800
[CoVDD  mV ]  975  975  975

BIOSで「1.2375V」に指定した場合は0番のP-Stateだけ「1238」表示で他は定格電圧の設定のときと同じになっているのが分かる。

ヘルプの表示

ヘルプは一般ユーザでも参照でき、--help(-h)オプションを付けて実行すると表示される。

$ [k10railgun.pyの場所] -h
Usage: k10railgun.py options:--reset --fq=V0,V1,,V4 --vdd=V0,V1,,V4 --write -p Px --load --save --list


k10railgun.py [options] Options Priority: -r > --fq/--vdd > --cofvid Px      =
PState Number. Vx      = Value is XXX:abs,+-XXX:relative, none:noset and
xXXX:ratio(Only Freq)           0xXXX: VID in hexadecimal(Only VDD)
example:--fq=,2000,-100,x8.5 --vdd=,1300,-50,+50

Options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit
(中略)
  -g governor number, --governor=governor number
                        A value of "-" is the Governors list.The setting can
                        be displayed numerically.
電圧の変更

--vdd=[P-State 0の電圧],[P-State 1の電圧],(以下続く)(-v [P-State 0の電圧],[P-State 1の電圧],(以下続く))と--write(-w)オプションを付けて実行すると、各P-Stateの電圧を変更することができる。--write(-w)オプションを付けないとCPUへの変更が反映されない。

(定格電圧での動作時に実行・1238mV,1138mV,1038mV,888mV指定)
$ sudo [k10railgun.pyの場所] -v 1238,1138,1038,888 -w
---- CPU/System Information --------------------------------------------------
M/B(BIOS) / BaseClk :A785GMH/128M(P1.30) / 200.00MHz                          
CPU Name / Cores/S  :AMD Athlon(tm) II X3 445 Processor /  3Cores/Socket      
CPUID _ExFM_BaseFM-S:00100F53 Revision BL-C3                                  
Flags               :HwC1EDi/SmiC1EDi//C5Di/AVimp/SVI                         
[VDD] changed.
[MSR] Pstate Registar Change.
[KernelModule] Reload Powenow-k8
---- Freq./Pstate Management --------- ---- Power Management ----------------
MaxFreq./Pstates:3100MHz/ 3            VDD Renge mV    :max 1325-min    0    
CPB Src/Count   :Di/0                  PSI_L           :Di / 1550mV>=VDD ON  
VSSlamTime/P0-Pm:200us/tns / 500mV     AltVid vss      :Di    0us            
                                       AltVid Start/VDD: 975mV /  975mV      
  [CurrentB]MSRC00100[68:64] Register    |[CurrentA]MSRC00100[68:64] After    
    Freq Ratio FIDh VDD  VIDh  Nb   NbVh | Freq Ratio FIDh VDD  VIDh  Nb   NbVh
PS   MHz       /DID   mV /IddA  VDD /DID |  MHz       /DID   mV /IddA  VDD /DID
 0: 3100 15.50 0f/0 1325 12/57 1150 20/0 | 3100 15.50 0f/0 1238 19/57 1150 20/0
 1: 2400 12.00 08/0 1225 1a/39 1150 20/0 | 2400 12.00 08/0 1138 21/39 1150 20/0
 2: 1900  9.50 03/0 1125 22/36 1150 20/0 | 1900  9.50 03/0 1038 29/36 1150 20/0
 3:  800  4.00 00/1  975 2e/15 1150 20/0 |  800  4.00 00/1  888 35/15 1150 20/0
             CPU0 CPU1 CPU2
[CoFreq MHz]  800  800  800
[CoVDD  mV ]  975  975  975
AutoSave: __autosave.conf

変更後のクロック/電圧の対応一覧は右側に表示される。

実行の自動化(OS起動/休止状態復帰時に自動実行する)

ディストリごとにOS起動時に実行されるスクリプトが用意されているので、それに下のようなスクリプト実行の行を書き込む(例:/etc/rc.local)。

[k10railgun.pyの場所] -v [P-State 0の電圧],[P-State 1の電圧],(以下続く) -w

ここに記述した設定内容に問題があった場合(電圧の値が低すぎてフリーズしてしまうような設定が書かれた場合など)、それを直すのには復旧用のモードや別のOS(ライブCD/DVDやマルチブート時の他のOS)で起動するなどして復旧しなくてはならないこともありうるため、設定値の試行錯誤段階でOS起動時の自動実行の記述をするのはおすすめしない。ある程度テストをして安定して動作するようになってから記述する。
OS起動のかなり初期の段階で実行したい場合は/etc/以下にある起動時のスクリプト(ディストリによって異なる)の中に記述することもできるが、上にも書いたようにBIOS設定で(OS起動前から有効な)コア電圧を設定できる場合もあるので、無理して早い段階で実行するようにしても省電力の効果はあまり期待できない。
TuxOnIceやuswsuspで休止状態を用いる場合、復帰後に電圧が戻ってしまうので復帰後に再実行する必要がある。hibernate-scriptを用いる場合は
[追記]ファイル名: /etc/hibernate/common.conf

OnResume 01 [k10railgun.pyの場所] -v [P-State 0の電圧],[P-State 1の電圧],(以下続く) -w

のようにすると復帰時に自動的に実行されるようになる(hibernate-scriptのラッパースクリプトを用いて自動実行する方法もある)。上の「OnResume 01」は復帰後の一連の処理の中の最後の段階で実行するための記述。

(「k10railgunによるK10/K10.5世代のAMD製CPUの電圧下げに関するメモ(バージョン0.801.8a時点・ページ3/3)」に続く)

関連記事:

使用したバージョン:

関連URL:

*1:ビルドする作業は必要なく、x86_64とx86_32のいずれのアーキテクチャのOSでも動作する