K10stat

----------------------------------------------------------
概要
----------------------------------------------------------
K10 Family プロセッサの動作周波数や動作電圧等に関連する
CPU内部レジスタの状態を表示・変更するソフトウェアです。

----------------------------------------------------------
注意
----------------------------------------------------------
このソフトウェアは、使い方を誤るとCPU/メモリ/マザーボード
等を破損する危険があります。
作者はこのソフトウェアが正常に動作することを一切保証せず、
直接間接を問わず使用によって発生するいかなる損害に対しても
責任は負いません。
危険性を十分認識した上で自己責任で使用してください。

----------------------------------------------------------
動作環境
----------------------------------------------------------
Family 10h-14h processorを搭載したシングルノード、シングル
プロセッサマシンでのみ動作します。
WindowsVistaでは管理者権限で実行する必要があります。
ネットワークドライブからの実行では必要なドライバファイルを
読み込めない場合があるため、ローカルドライブ上で実行してく
ださい。

----------------------------------------------------------
使用方法
----------------------------------------------------------
[P-State]タブの P-State0〜P-State7各レジスタ編集することで
CPUの動作電圧や周波数を変更。
P0に最も高いパフォーマンス、P4に最も低いパフォーマンスを指定。
ブースト機能があるCPUではPb0(B0)にブースト状態を指定。
(ex. P0 1.3500/3000MHz, P4 0.800V/1000MHz等)
利用できるP-Stateの数は使用しているCPUやBIOSによって異なる。
[P-State]タブで設定した値は[適用]ボタンクリック時に反映される。

[P-State]タブで設定した値はK10statを終了した後もPC再起動や
サスペンドによってMSRがリセットされるまで有効。
設定周波数と電圧はCnQの動作にも反映される。

コマンドラインオプションで"-ClkCtrl:1"等を指定するとK10statは
CPU負荷に応じたP-State制御を行う。
※ユーザーが明示的にCnQを停止しない限り,CnQも並行して稼動
----------------------------------------------------------
ウィンドウ概略
----------------------------------------------------------
[Info]タブ
  --Family10h
　　MaxCoreFreq:CPUコアクロックの最大周波数
　　　(Boost機能付CPUではboost時|non-boost時の各最大周波数)
　　MaxNB:NB周波数の最大周波数
　--Family11h,12h,14h
　　MaxMainPll:プロセッサがサポートする最大PLL周波数

　Voltage:電圧の設定可能範囲
　PowerPlane:CPUコアとNBの電源系統種別
　　　　Single:CPUコアとNBは共通の電圧で駆動
　　　　　　　 NBの設定電圧がCPUコアにも適用される
	  Dual:CPUコアとNBは別々の電圧で駆動
	Triple:CPUコアとNBは別々の電圧で駆動
　　　　　　　 二つのCPUコア(VDD0/VDD1)も独立(for Fam11h)
　VID Interface:電圧制御インターフェイスの種別
	   SVI:シリアルインターフェイスによる電圧制御
　　　　　　　　　(1.5500V〜0.0125V)
　　　　　　　 インターフェイスの動作周波数は400KHz
　　　　　 SVI-H:同上。ただし動作周波数はは3.4MHz
	   PVI:パラレルインターフェイスによる電圧制御
　　　　　　　　　(1.550V〜0.3750V)
　*Frequency:各コアとNBの動作周波数
　*Voltage:各コアとNBの駆動電圧
　*CPU load:各コアの負荷
　*TSCfreq:タイムスタンプカウンターの周波数
　*TctlTmp:温度制御機能用の温度(物理的な温度ではない)
　ListBox:各種CPU内部レジスタの状態

　(*:表示内容が更新される項目)

[P-State]タブ
　Profile：編集・適用するprofileを選択
  Renameボタン:プロファイル名変更エディットボックス表示
　　　　　　　変更後にそのプロファイルを[適用]すると保存
　Defaultボタン:アプリケーション起動時のP-State
　　　　　　　　レジスタ内容をprofileに反映
  P0(B0)-P7ラジオボタン:編集するP-Stateレジスタを選択
　　　　　　　　B0はBoostState
　周波数表示ボタン:各コアのP-Stateを選択
　　　　　　　　B0はP-State0扱い(BoostStateへは遷移しない)
　　　　　　　　(この項目はProfileに保存されない)
  Autoボタン:K10statがクロックコントロールを行っている場合,
　　　　　　このボタンが押されているコアのみ,P-Stateが負荷
　　　　　　に応じて変動
　Boostチェックボックス:Boost機能の有効・無効切り替え
　 NumCore:Boostするコア数
　 NumState:BoostStateの数
　up%/down%:P-Stateを遷移させる負荷閾値を指定
　up(ms)/down(ms):P-Stateを遷移させる間隔を指定
　　※負荷閾値と遷移間隔はK10statがクロックコントロールを行う
　　　場合の設定値であり, CnQの動作を変更するものではない

[NB]タブ
  DownCore:不使用にするコアの数を指定(F3x190)

通知領域アイコン
  クロックコンロール機能の有効・無効やコアの設定電圧等を表示
　　クロックコントロール有効時は明色, 無効時は暗色アイコン
　　　　　　Blue　 ｜ Cyan ｜ Green｜Yellow｜Orange｜ Red　｜ Magenta
　　Voltage <=0.85V｜<=0.95｜<=1.05｜<=1.15｜<=1.25｜<=1.35｜>1.35
　　P-State Pmin　 ｜Pmin-1｜Pmin-2｜...
　　Clock　 <=1GHz ｜<=1.5G｜<=2.0G｜<=2.5G｜<=3.0G｜<=3.5G｜>3.5G
　　Tctl　　<=20　 ｜<= 30　｜<=40 ｜<=50　｜<=60　｜<=70　｜>70
 　※P-Stateが7つある場合P0,P1は共にMagenta

　PopupTipでは各コアの動作周波数や電圧等を表示
　アイコンクリック時の動作は以下の通り
　・左クリック：ダイアログ表示
　・右クリック：メニュー表示
　・中クリック：クロックコンロールの有効・無効切り替え
 
----------------------------------------------------------
各種略語/用語
----------------------------------------------------------
MSR:Model Specific Register(Processor internal register)
NB:NorthBridge(Processor internal Block,L3Cache/XBAR/MCT/etc.)
MCT:Memory Controller
CnQ:Cool'n'Quiet
ID:IDentifier
FID:Frequecy ID
DID:Devisor ID
VID:Voltage ID
COF:Current Operating Frequency
HT:Hyper Transport
HTCLK: HT Clock
SCLK: internal GPU clock
CLMC:Centralized Link Management Controller
MEMCLK: Memory Clock
TLB:Tlansration Lookaside Buffer
VS:Voltage Stabilization
BKDG:BIOS and Kernel Developer Guide
PVI:Parallel VID Interface
SVI:Serial VID Interface
TSC:TimeStamp Counter
M/B:Mother Board
XBAR:Crossbar(Processor internal command packet switch)
VRM:Voltage Regulator Module
TctlTmp:Thermal control temperature
　　　  (#TctlTmp is non-physical temerature)
PSI:Power Status Indicator
AltVid:Altanate VID
P-State:Performance State
Pmin:Lowest 'P-State' (ex.P3)
Pmax:Highest 'P-State' (ex.P0)
P0-P7:P-State0 〜 P-State7
Pb0:Performance boost state0
ms:milli second
us:micro second
ns:nano second
mV:milli volt
----------------------------------------------------------
コマンドラインオプション
----------------------------------------------------------
 -LoadPState　　　profile1のP-State設定をMSRに書き込む
 -LoadProfile:[1-5]
 -lp:[1-5]　　　　profile[1-5]のP-State設定をMSRに書き込む
　　　　　　　　　(ex. -loadprofile:5)
 -NoWindow
 -nw　　　　　　　ダイアログを表示しない
　　　　　　　　  StayOnTrayが指定されていない場合は,コマン
                  ドラインオプションの指定内容のみ実行して
　　　　　　　　　終了する

 -ClkCtrl:[0-4]　 クロックコントロールの方法を指定
　　　　　　　　　0:コントロールしない
　　　　　　　　　1:各コアを独立して制御
　　　　　　　　　2:各コアをまとめて制御(最大負荷のコア基準)
　　　　　　　　　3:各コアをまとめて制御(各コアの負荷平均値基準)
　　　　　　　　　4:各コアをまとめて制御(最小負荷のコア基準)
　　　　　　　　　デフォルト値は0
 -UpPercent:[0-100][,0-100]...
 -up:[0-100][,0-100]...
　　　　　　　　　P-State変更のCPU負荷閾値をP0-P1間,
　　　　　　　　　P1-P2間,...の順に指定
　　　　　　　　　同じ値が続く場合は数値を省略可能
　　　　　　　　　(ex. -UpPercent:60,,20)
　　　　　　　　　UpTimeで指定する間隔の平均負荷が
　　　　　　　　　閾値より高いとP0方向へ遷移
　　　　　　　　　デフォルト値は60
 -DownPercent:[0-100][,0-100]...
 -dp:[0-100][,0-100]...
　　　　　　　　　P-State変更のCPU負荷閾値をP0-P1間,
　　　　　　　　　P1-P2間,...の順に指定
　　　　　　　　　同じ値が続く場合は数値を省略可能
　　　　　　　　　(ex. -DownPercent:30)
　　　　　　　　　DownTimeで指定する間隔の平均負荷が
　　　　　　　　　閾値より低いとPmin方向へ遷移
　　　　　　　　　デフォルト値は20
 -UpTime:[0-100]
 -ut:[0-10]
　　　　　　　　　P0方向へのP-State遷移間隔を指定
　　　　　　　　　(ex. -UpTime:5)
　　　　　　　　　0を指定するとP0方向へ遷移は行わない
　　　　　　　　　デフォルト値は5
 -DownTime:[0-100]
 -dt:[0-100]
　　　　　　　　　Pmin方向への遷移間隔を指定
　　　　　　　　　(ex. -DownTime:50)
　　　　　　　　　0を指定するとPmin方向への遷移は行わない
　　　　　　　　　デフォルト値は20
 -TimerMultiplier:[1-200],[1-200]
 -tm:[1-200],[1-200]
　　　　　　　　　up/down遷移間隔の基準単位をmsで順に指定
　　　　　　　　　(ex. -tm:10,200)　　※up10ms,down200ms
　　　　　　　　　デフォルト値は100,100

 -MaxPState:[1-7]
 -mp:[1-7]
　　　　　　　　  P-Stateの数を変更(BoostState数を含む)
　　　　　　　　　現在設定されている値より小さい値は無効
　　　　　　　　　増加分のP-StateはCnQでは使われない
　　　　　　　　　(Family10h/11hは[1-4])

 -RefreshTime:[1-60]
 -rt:[1-60]
　　　　　　　　　Info画面と通知領域を自動更新する間隔を秒で指定
　　　　　　　　　数値が範囲外の場合自動更新しない
　　　　　　　　　デフォルト値は5

 -VSTime:[0-1000]
　　　　　　　　　P-State設定変更時のVSSlamTimeをusで指定
　　　　　　　　　0:変更しない
　　　　　　　　　1-999:指定値以上で設定可能な値
　　　　　　　　　1000:BKDG推奨値を自動設定(P0-Pmin電圧幅で計算)
　　　　　　　　　デフォルト値は1000
　　　　　　　　　see also BKDG[F3xD8:VSSlamTime]
　　　　　　　　　(Family10h/11hのみ)

 -Pctrl:[0-10][,0-10]...
　　　　　　　　　起動時のP-StateをCore0,Core1,...の順に指定
　　　　　　　　　Pminより大きい数値はAuto扱い

 -StayOnTray　　　ダイアログを閉じた後もK10statを終了しない
　　　　　　　　　通知領域のアイコンからExitを選択することで終了

 -Icon:[0-5]　　　通知領域のアイコン色が指し示す状態を指定
　　　　　　　　　0:通知領域アイコンを表示しない
　　　　　　　　　　(-StayOnTray指定時は常に明青色アイコン表示)
　　　　　　　　　1:クロックコントロールの有無のみ
　　　　　　　　　2:コア電圧
　　　　　　　　　3:P-State
　　　　　　　　　4:コア周波数
　　　　　　　　　5:Tctl
　　　　　　　　　※最も高いクロックで動作しているコアの状態を標示
　　　　　　　　　デフォルト値は2

 -TrayTip:[0-3]　 通知領域に表示するtip内容を指定
　　　　　　　　　0:アプリケーション名のみ
　　　　　　　　　1:各コアのP-State/動作周波数/電圧
　　　　　　　　　2:Tctl温度
　　　　　　　　　3:Up/Down負荷閾値
　　　　　　　　　デフォルト値は1

 -HtRefClk:[100-500]
　　　　　　　　　表示クロックの算出に使用するHtRefClkを指定
　　　　　　　　　デフォルト値は200
　　　　　　　　　※表示値が変わるだけ
　　　　　　　　　(Family12h/14hではRefClk*2を-htrefclkに指定)

 -EnableTLBCache  TLBキャッシュを有効にする
 -disableTLBCache TLBキャッシュを無効にする

 -CstPminEn　　　 Auto-Pmin/PopdownP-stateを有効にする
 -CstPminDis　　　Auto-Pmin/PopdownP-stateを無効にする
　　　　　　　　　(Family10hRev.E, 12h, 14hのみ)

 -NbPstate　　　　NbPstate機能を強制的に有効にする
　　　　　　　　　(MSRC001001F[62:62]を0に)
　　　　　　　　　(Family10h Rev.C3 Rev.DA-C2のみ)

 -PsiVid:[0-1050] PsiVidをmVで指定
　　　　　　　　　0: PSI_Lを無効にする
　　　　　　　　　1-1050:指定の電圧でPSI_Lを有効にする

 -AltVid:[0-1500] AltVidをmVで指定
　　　　　　　　　0: AltVidを無効にする
　　　　　　　　　1-1500:指定の電圧でAltVidを有効にする
　　　　　　　　　(Family10hのみ)

 -MemHotReg:[0-7] F2xA4[2:0]に書き込む値を指定
　　　　　　　　　see BKDG F2xA4(ThrottleEn,DoubleTrefRateEn)
　　　　　　　　　(Family10h以外)

 -HTC:[0-7],[0-127],[0-15]
　　　　　　　　　F3x64 HtcPstateLmt, HtcTmpLmt, HtcHystLmt
　　　　　　　　　に書き込む値をそれぞれ指定
　　　　　　　　　See BKDG F3x64

 -LHTC:[0-7],[0-127],[0-15]
　　　　　　　　　F3x138 LHtcPstateLmt, LHtcTmpLmt, LHtcHystLmt
　　　　　　　　　に書き込む値をそれぞれ指定
　　　　　　　　　See BKDG F3x138
　　　　　　　　　(Family12hのみ)

 -NbVid:[450-1500],[450-1500]
　　　　　　　　　NBPs0Vid,NbPs1Vidを順に指定
　　　　　　　　　単位はmV
　　　　　　　　　(Family12h,14hのみ)

 -SclkVid:[450-1500],[450-1500],[450-1500],[450-1500]
　　　　　　　　　SclkVidLevel4〜SclkVidLevel0を順に指定
　　　　　　　　　単位はmV
　　　　　　　　　(Family12h,14hのみ)

 -RestrictIocf8　 PCIE-ExtendedConfigSpaceアクセス失敗時に
　　　　　　　　　IOCF8/CFC経由の再試行処理を使わない
 -UseIocf8　　　　PCIConfigSpaceへのアクセスを常にIOCF8/CFC
　　　　　　　　　経由で行う※DANGER

　※大文字小文字は区別しない. 文法エラーの警告表示はしない.
　※負荷閾値と遷移間隔はK10statがクロックコントロールを行う
　　場合の設定値であり, CnQの動作を変更するものではない.

----------------------------------------------------------
コマンドラインの呪文例
----------------------------------------------------------
P0-P4までの値が設定されているprofile1を利用する例

　.profile1を読み込みクロックコントロールはCnQ任せ
   設定後K10statは終了
     -loadprofile:1 -nowindow
  .Info画面の自動更新を行わない
　 サスペンド復帰時にP-Stateレジスタを再設定するために
   K10statを終了させない
     -lp:1 -rt:0
  .通知領域のアイコンを表示しない
     -lp:1 -icon:0
  .ダイアログを表示せずにK10statは常駐させる
     -lp:1 -nw -StayOnTray

  .K10statにクロックコントロールを行わせる.各コア独立に制御
   MaxPstateを4に増加
   　 -lp:1 -mp:4 -clkctrl:1
  .負荷閾値をUp70% Down20%に
      -lp:1 -mp:4 -up:70 -dp:20 -clkctrl:1
  .各コアのクロックをそろえる(負荷閾値は最大負荷のコア基準)
   　 -lp:1 -mp:4 -up:70 -dp:20 -clkctrl:2
  .各コアのクロックをそろえる(負荷閾値は各コアの平均値基準)
   　 -lp:1 -mp:4 -up:70 -dp:20 -clkctrl:3
  .遷移間隔をUp 200ms, Down 1000msに
   　 -lp:1 -mp:4 -dt:2 -dt:10 -up:70 -dp:20 -clkctrl:3
  .遷移間隔をUp 20ms, Down 40000msに
   　 -lp:1 -mp:4 -tm:10,200 -dt:2 -dt:200 -up:70 -dp:20 -clkctrl:3

　.P0-P3までの遷移はCnQ任せP3->P4への遷移のみK10statが行う
    -lp:1 -mp:4 -ut:0 -dt:50 -dp:0,,,30 -clkctrl:1
  .Core2をP0,Core3をP1に設定しCore0,1は負荷に応じて遷移
    -lp:1 -mp:4 -Pctrl:9,9,0,3 -ut:5 -dt:20 -clkctrl:1
　.P0<-P1<-P2は負荷70%を超えると, P2<-P3<-P4は負荷20%で上昇
   P0->P1->P2は負荷25%未満で,P2->P3とP3->P4は各20%,10%で下降
    -lp:1 -mp:4 -up:70,,20 -dp:25,,20,10 -ut:2 -dt:10 -clkctrl:1
　.P1-P3間はUp60%(500ms)Down20%(2000ms)で遷移.P0,P4は不使用
    -lp:1 -mp:4 -up:100,60,,0 -dp:100,20,20,0 -ut:5 -dt:20 -clkctrl:1

----------------------------------------------------------
その他
----------------------------------------------------------
- 起動時にControlキーが押されていると,何も設定せずに終了
- BKDGやM/Bの制限事項をほとんどチェックしていないため, 
　設定を変更する際は細心の注意が必要
- BKDGによると動作周波数(COF)やFIDには次の制約がある
　(Family10h/11hのみ)
  .CoreCOF>=400MHz,(CoreCOF/NB COF)<=2,(NB COF/CoreCOF)<=32
　.NB COF>=600MHz
　.NB COF >= 2* MEMCLK
　.NB COF >= HTCLK   (if HTLinkWidth==8bit)
　.NB COF >= HTCLK/2 (if HTLinkWidth==16bit)
  .SVIプラットフォームでは「NB DIDが同じ値のP-State」は
　 NB VIDも同じ値でなければならない
  .Family 11h processorでは(MAXFreq/100-8)>=FID>(MAXFreq/200-8).
   ただしFIDは実質変更できない
   (see RevisionGuide for Fam11h. 311)
- 電圧設定に関する色々
　.M/Bによっては電圧を0.8V以下に設定すると駆動電圧が
　 1.5Vに跳ね上がることもある
　 特にPowerPlane Single, PVIと表示されるM/Bは要注意
  .K10statで表示・設定する電圧は,CPUがVRMに指示する値
　 一般的なVRMはCPUの指示値に独自のオフセットを加えた
　 電圧を生成する. BIOSの電圧設定で[+-0.xxxV]と表示される
　 項目はオフセット値を指し示す場合が多い
　.SuperI/O等のセンサーチップはVRMが生成した電圧を計測
　 している. 計測値とK10stat設定値が同一になることは稀
- FID,DID,Frequencyの関係式
　Family10h：100*(FID+16)/(2^DID)=Frequency
　Family11h：100*(FID+8)/(2^DID)=Frequency
　Family12h：100*(FID+16)/TABLE[DID]=Frequency
　　　　　　TABLE={1, 1.5, 2, 3, 4, 6, 8, 12, 16}
　Family14h：100*(MainPllFreqId+16)/(fid+did*0.25+1)=Freq
- K10statが表示する各周波数は,TSCfreqを除き,HTrefクロック
　が200MHzで動作している前提で算出した値
　表示に使用するHTrefクロック値はコマンドラインで変更可能
　※TSCfreqはタイマーを利用した計測値
　※Family12h/14hではHTrefクロック/2をRefクロック扱い
- DownCoreについて
　.DownCoreはWarmReset(ソフトウェア的な再起動)後に適用
　.DownするコアはCore3→Core2→Core1の順序で固定
　 Core0は常に稼動
　.一度DownさせたコアはColdResetするまで復活しない
　.DownCore設定後は速やかに再起動を推奨
　.コア数変更後はColdResetするまでスリープ(S1/S3)厳禁
　.特定コアが生きていないとWarmReset後再起動しないBIOSもある
- K10stat稼働中にサスペンド・休止状態からの復帰すると,
　[P-State]タブもしくはコマンドラインの指定で
　最後に適用したプロファイルを自動的に再適用
- 単体では動作可能なクロックがP-Stateに設定すると
  動作しない場合,"-VSTime:500"で改善するかもしれない
- BKDGによるVSSlamTimeの推奨時間
　Desktop processor：0.4us/mV
　Mobile processor：0.2us/mV
- コマンドラインで指定された負荷閾値と遷移間隔は,
　"-loadprofile:"で読み込むプロファイルより優先される
　その後ユーザーが明示的にプロファイルを変更した場合は,
　プロファイルの閾値・遷移間隔を適用
- プロファイル名は最大30文字(30bytes)
　名称が空白の場合,もしくは編集中にプロファイルが切り替わった
　場合, 変更はキャンセル
- プロファイル名を変更しても"-loadprofile:"で指定する値は
　[1-5]の数値であり, プロファイル名での指定はできない

- NB P-state(Family 10h Rev.C3及びRev.DA-C2のみ)
　.P-State遷移と同期してNBの動作クロックを動的に変更する機能
  .機能が有効になっている場合, [P-State]タブにNB DIDドロップ
　 ダウンリストを表示
  .HTがGen3モード(リンク速度がHTrefClkの6倍以上)でない場合
　 NB P-stateは正常に動作しない
　.チップセットやBIOS,ドライバがCLMCをサポートしている場合,
　 NB P-state変動にあわせてHT Link Widthが動的に変わる
  .コマンドラインで"-nbpstate"を指定する場合,
 　NB DIDが0,1どちらの値でも前記NB COFに関する条件を満たすように,
　 NBCLKやHTCLK, HTLinkWidthをBIOS等で調整する必要がある
　.コマンドラインで"-nbpstate"を指定した場合, K10statは
　 次のタイミングでMSR C001001F[62](GfxNbPstateDis)を書き換える
 　　- Profile適用直前, 及びS3・S4前に1(NB P-state無効化)
 　　- Profile適用直後, 及びS3・S4復帰後に0(NB P-state有効化)
  .NB P-stateをサポートしないリビジョンのプロセッサで
　 NB DID値を変更すると, 以後PCをリセットするまでCPUの
　 動作周波数を変更できなくなる
- AltVid
　.全コアがHalt状態になったとき(C1E state), 特定の条件を
　 満たしているとAltVidまでコア/NB電圧を下げる機能(C5 state)
　 BKDGによるとAltVidが使われる条件は以下の通り
　 - CacheFlushOnHaltが有効(Rev.C2以降)
　 - HardwareC1Eが有効(Rev.DA-C2とRev.C3以降)
　 - EnStpGntOnFlushMaskWakeupが有効(Rev.DA-C2とRev.C3以降)
　 - SlamTimeModeに有効な値が設定されている(Rev.C3以降)
　 - SVI-HighFreqが有効(Rev.C3以降. VRMのサポート必須)
　.コマンドラインでAltVidを指定した場合,
 　 F3xDC[6:0](AltVid)に指定電圧に対応するVidを,
 　 F3xD8[22,16](AltVidStart)にPminのVidを,
 　 F3xDC[31:29](AltVidVSSlamTime)にBKDG推奨値を,
 　 F3x80[12:12](C1E-AltVidEn)に1を,それぞれ書き込む
　.コマンドラインでAltVidを無効にした場合,
    F3x80[12:12](C1E-AltVidEn)に0を書き込む
　.VID InterfaceがPVIだと機能しない
- PsiVid(PSI_L)
　.低消費電力域のVRM変換効率を改善する機能
　.コア電圧がPsiVid電圧以下になるとVRMにPSI_L信号を通知
　.PSI_Lに対応したVRMならば, 動作モードが省電力モードに切り替わる
   (通常時4+1Phase, PSI_L時2+1Phaseなど)
  .不適切な値が設定されているとマザーボードが破損・焼損する
　 危険が高くなる
　.VID InterfaceがPVIだと機能しない

- CorePerformanceBoost(CPB)
  .一部のコアだけパフォーマンスを上昇させる機能
  .TurboCoreとも称されるがBKDGではCPBと表記
　.P0より高いパフォーマンス状態としてPb0追加
   (P-StateタブおよびTrayTipでは"B0"と表記)
　.NumStateが1のとき, P-STATEはPb0-P0-P1-P2-P3となり,
　 Pb0を含めて最大5ステートとなる
　 Pb0への直接遷移はできないため, LockP-stateメニュー等で
　 ユーザーが明示的に遷移を指定できる状態はP0-P3に限定される
　.P0<->Pb0間の遷移はハードウェアで自動的に行われる
　 Halt(&CacheFlushed)コア数がある閾値以上なると
　 P0で稼働中のコアがPb0へ,　閾値未満になるとPb0->P0へ遷移
  .BlackEditionCPUではPb0遷移条件となるHaltコア数を変更可能
　　Haltコア数 = 全コア数 - Boostコア数
   ※P-StateタブのBoost(NumCore)でBoostコア数を指定
　.Boostを無効もしくはBoostコア数を0にするとPb0は使用されない
　.Boost対応CPUは, Pb0, P0それぞれに最大周波数が決められていて,
　 各最大周波数を超える値は無効となる
   - 例えばPb0最大3.3GHz(FID17), P0最大2.8GHz(FID12)のCPUでは,
　　 P0に3.3GHz(FID17)を設定しても効果はない
　.制限事項
　 - DebugタブのP-State表記はHardware/Software P-State混記
　　  current(c0010070)はHardware P-State
   　 P-Control(c0010063)はSoftware P-State
　　　P-State0-4(c00100064-c0010068)はHardware P-State
　　　(BKDG Software P-state Numbering参照)
　 - Boost-NumState変更はいまのところ不完全なのでグレーアウト
　.Family12hではBoost有効/無効のみ設定可能(Boost対応モデル)

- Auto-Pmin/PopDownPstate
　.CPU Halt時, 自動的にP-Stateを低パフォーマンス状態に下げる機能
　.BIOSによってAuto-Pmin/PopDownPstate関連レジスタが適切に設定
　 されている場合に限り, その有効無効をコマンドラインで変更可能
　. Family10h RevEではF3xA8[27], Family12h,14hではF4x1AC[30]に
　 それぞれ1(CstPminEn)もしくは0(CstPminDis)を書き込む

- HTC(HardwareThermalControl)
　.CPUパッケージの過熱保護機能
　.Tctlが52+HtcTmpLmt*0.5以上になるとHTC activate
　　P-State上限をHtcPstateLmtに下げ, PROCHOT_L pin assert
　 Tctlが52+HtcTmpLmt*0.5-HtcHystLmt*0.5未満になるとHTC deactivate
　　P-State制限解除, PROCHOT_L pin deassert
　.コマンドライン"-htc:","-lhtc:"でHTCレジスタを書き換える場合
　　<HtcPstateLmt>,<HtcTmpLmt>,<HtcHystLmt>の順に指定
　　ex. -htc:4,10,6
　      (HtcPstateLmt=4,HtcTmpLmt=10,HtcHystLmt=6)
　.HtcPstateLmtはhardware P-stateで指定
　.TmpLmt=0もしくはPstateLmtがMaxPstateより大きい場合
　　HTC機能を無効化(F4x64[0:0]に0を書き込む)
　.通常用途ではHTCレジスタを書き換える必要はない
　　BIOS指定のHTCTmpLmtが大きすぎる場合に, その数値を下げる
　　目的でのみ使用することを推奨
　　むやみにHTCを無効にしたり,不適切な値に書き換えると
　　過熱保護護機能が働かなくなりCPUやMB焼損の危険が高くなる
　.LHTC(LocalHardwareThermalControl)はFamily12hに存在
　　HTCと同様の仕組みでP-Stateのみ制限する
　　HTCとは独立して動作
　.Family11hにおいてはRevisionGuide for Fam11h. 311参照
　.HTC関連レジスタへの書き込みは制限されていることがある
　　see BKDG HtcLock, LhtcLock

- SclkVidとNbVidコマンドラインオプション(Family12h,14h)
　.NbVidはCoreNB電圧を指定
　　-NbPs0Vidが最大パフォーマンス、NbPs1Vidが最小状態
　.SclkVidはGPUとPCIeRootComplexの動作電圧を指定
　　-Level4が最大パフォーマンス、Level0が最小状態
　　-すべてのLevelが使われているとは限らない
　.NbVidとSclkVidは独立した値を指定できるが、実際にVDDNB
　　として適用されるのはNB,GPU,PCIeRootComplexで要求される
　　電圧のうち最も高い値
　.NbVidの書き換えは制限されていることがある
　　see BKDG D18F6x90[NbPsLock]

- 各レジスタ内容詳細については各CPU FamilyのBKDGを参照

----------------------------------------------------------
謝辞
----------------------------------------------------------
OpenLibSys.orgのWinRing0ライブラリを利用させていただきました。
WinRing0.dll, WinRing0.sys, WinRing0x64.sysの扱いに関しては
WinRing0_Copyrightディレクトリ内のファイルに記載された著作権
表示に従ってください。

----------------------------------------------------------
History
----------------------------------------------------------
0.01 テスト版
0.02 環境調査版
0.03 VID更新制限を解除
0.05 P-Control追加、StepModeでのVID変動幅を+-1に制限、SVIのP-StateNBVID変更を制限、1.35V制限解除
0.06 SVI時のP-state NbVID制限を解除、1.35制限復活
0.07 P-stateの保存・読み込み機能追加、1.35制限廃止、COFVIDレジスタの「P-State」値を自動更新に変更
0.08 P-state読み込み時の処理を変更、Vista UAC用manifest追加
0.10 P-state読み込み時の処理をさらに変更、Pcurrent→P0→load→Pmin→Pcurrentと遷移
0.11 TLBCache有効・無効(MSRC0010015[3], MSRC0011023[1]変更)オプション追加、コマンドラインのみ
0.20 PropertySheet化、P-State設定用のタブ追加、Load/Saveボタンを廃止しProfileに変更
　　ReadOnlyモード廃止、StepModeのVID変動幅制限を実質廃止(+-64に変更)、CoreDID値を0-2に制限
0.21 効果なし＆P-StateマシンがスタックするためNbDid変更ボタン削除
0.22 TLBCache有効・無効化がcore3に適用されていなかったバグ修正、309対策も追加
0.23 currentタブのCore/NB Voltageに、現在適用されている電圧を表示するよう変更
0.24 COFVIDレジスタでFID/DIDを変更時、P-StateStatusレジスタへの影響が出ないよう修正
　　 -loadprofile:の指定値をP-Stateタブのprofileに反映
0.25 298/309ボタン追加
0.30 PciConfigSpaceのアクセス方法をI/OPort(IOCF8/CFC)経由に変更、DownCoreテスト
0.31 いずれかのコンボボックスを操作しないとP-StateタブでFID/DIDが設定されないバグを修正
　　 DowncoreUI変更、CoreDID値の0-2制限廃止、PowerStateControlRegister(F3x[84:80])テスト
0.32 Windows2000でdowncoreを正常に扱えなかったバグ修正、CoreDID値(0-2)制限を廃止
　　298/309ボタン表示をRevisionB2,BA使用時のみに変更
...
...
0.70 P-Stateレジスタ変更時にHWCR[TscFreqSel]をリセット(TSCがP0周波数と同期)
     P-Stateレジスタ変更時にBKDG推奨値に従ってVSSlamTime(F3xD8)設定
     FID最大値を0x2F(47)から設定ビット幅上限の0x3F(63)に変更
　　サスペンドからの復帰時、K10statが稼動していればP-stateレジスタを復帰
　　起動時Controlキー押下で何も設定せずに終了
　　(startup等に登録して起動できなくなった場合の回避用)
　　負荷に応じてP-Stateを遷移する機能追加
    (今のところUI皆無なのでコマンドライン呪文必須)
　　コマンドラインオプションに省略形追加
　　[Info]タブ追加, 従来の[current]タブは[debug]タブに変更
    Family11h対応？
　　[NB]タブのPowerStateControl削除
　　フォント変更
    IOCF8/CFCを極力使わないように変更
0.71 [Info]タブのRegName各ラベルクリック時にVistaで警告音が鳴らないように
　　　AdHocな対策(キーボード使ったりすると音は鳴る)
    各コアをまとめて制御するモード追加(各コアが同クロックを維持)
    コマンドラインオプションClkCtrl追加
0.72 X2/X3使用時に一部存在しないコアのボタンが表示されていたのを修正
     MaxNBMul/MaxCoreMulの表示バグ修正.倍率表記を周波数表記に変更
     Family11hで起動しないように変更
0.73 CPU負荷を取得できないことがあったバグを修正
     11h用に色々修正...F3x8C->MSRC001001F,etc.
0.80 通知領域アイコンとメニュー追加
0.81 P-Stateレジスタ変更時のHWCR[TscFreqSel]リセットを取り止め
0.90 [P-State]タブに閾値と遷移間隔の設定項目追加
0.91 profile適用時に[auto]が選択されているコアのp-stateが変わっていたバグを修正
     profile名変更ボタン追加
...
...
1.31 WinRing0を1.3.1に変更
　　 PowerPlane Tripleの判別を間違えていたバグ修正
　　 暗紫アイコン表示が表示されていなかったバグを修正
　　 F3xA0[SVIHighFreqSel]判別追加(3.4MHz対応の場合VID Interfaceに"SVI-H"表示)
　　 全コアのP-Stateを一斉に変更するトレイメニュー"Lock P-state"追加
　　 "-TrayTip:","-icon:","-HtRefClk:"等追加
　　 3コア以上のCPU使用時はTrayTipに表示する電圧を一つだけに変更
　　 Family11hProcessorの最大P-Stateを4に制限,　P5-P7ボタン削除
　　 "-nbpstate"追加, NB DID表示条件を変更
　　 MobileK10に対応したつもり
　　 6コア対応したつもり(P-stateタブ"core0"-"core3"のテキストクリックでcore4-5表示)
1.32 "-altvid:","-psivid:"追加

1.40 Boost関連の設定項目追加
　　 BoostState分ずれたP-Stateを補正する処理追加
　　 DebugタブのEditRegister部分にアドレスを表示
　　　　　　　　　(選択項目のP-STATE値は従来通り)
　　 PciConfigSpaceアクセスに失敗した場合に限りIOCF8を使う処理を暫定復帰
　　 AltVid最大値を1500(1.5V)に変更
　　 NB DID表示をRev.C3とRev.DA-C2のみに制限
1.41 Boost機能有無の判別方法を変更
　　　(CPUIDFn8000_0007[CPB]のみチェック→
　　　　RevisionとF4x15C,F4x16Cレジスタ内容で判別)
     Boost無効への切り替え時にF4x15C[BoostSrc]も書き換え
　　 TraytipのP-State表記をBoostState(B0)に対応
　　 Boostチェックボックスのみ変更したとき適用ボタンを押せなかったバグを修正
　　 P-StateタブでBoost関連項目のみ変更したとき設定がレジスタに書き込まれなかったバグを修正
　　 Debugタブ[P-Control]で[適用]ボタンを押したときCore4,5が設定されないバグを修正
　　 CnQ範囲枠の推測方法を変更(RevEのみ)
1.50 Family12h,14h(model00-0fh)に対応したつもり
　　　- 12h/14hではNB/Debugタブ非表示,P-StateタブのNB電圧/周波数非表示
　　　- PowerPlaneはDual扱い(ただし実際にDualかは不明)
　　 異なるCPU(Family/model)で作成された設定ファイル(k10stat.dat)を読み込まないように変更
　　 Trayメニューからprofileを変更したとき稼働中のタイマー間隔が変更されていなかったバグを修正
　　 P-StateタブのCnQ枠削除
　　 Family10h/11hにおけるFID最大値を47に変更
1.51 Family10hでNB VIDに意図しない値が設定されるバグを修正
　　 12h/14hで周波数計算時にプログラムが異常終了するバグを修正
　　 Trayメニュー[Lock P-state]からP5-P7に遷移できないバグを修正
1.52 P-Stateが7になるとプログラムが異常終了するバグを修正
1.53 Family10h以外のデフォルトP-state数検出方法変更
　　　(F3xDC[PstateMaxVal]→Core0の各P-StateレジスタPstateEnフラグチェック)
　　 Famly10h以外はInfoタブMaxCoreFreq表記をMaxMainPllに変更,MaxNB非表示
　　 DebugタブのLogウィンドウをinfoタブに移動(バージョン番号クリックで表示)
　　 "-HTC:","-LHTC:"追加,Tctlの"C"表記削除
　　 "-CstPminEn","-CstPminDis"追加
1.54 1.53で変更したP-State数検出部分のバグを修正
　　 表示周波数の端数処理を切り捨てから四捨五入に変更
　　 "-NbVid:","-SclkVid:"追加
　　 PCIE-ExtendedConfigSpaceアクセス失敗時にIOCF8で再試行する処理と
　　 その動作を制御するコマンドラインオプションを追加