原因がほぼ特定できました。
CTOモデルではEFIにおけるMSRの初期化において、ターボブースト時のTarget P-Stateを19と設定するのが、不具合の根本的な原因と思われます(本来は32と設定するのが正しい)。
暫定的な回避策として、Throttle Stopの適用で、Turobo Boostが有効に働くことを確認しましたが、その後、Throttle Stopの適用前後でのMSRの状態を調べてみました。 その結果、下記のことがわかりました。
・CTOモデルではEIST、Turbo Boostは有効になっている。
(自分の仮説で、ここが無効になっているというのは誤り)
・ただし、CTOモデルでは、Turbo Boost時のTarget P-Stateが19倍に設定されてしまっている。その為、CPUの倍率(Current P-State)が19倍以上に設定できない。
・Throttel Stopを実行すると、Turbo BoostのTarget P-Stateを32倍に設定できるので、 CPUの倍率(Current P-State)も32倍まで上げることができるようになる。
実際に、Throttle Stopの実行前後で、MSRの状態をみると下記のようになっています。
(MSRの値は、CPU-Zの「About」→「Tools」のSave Report(.TXT)で、確認することができます)
Throttle Stop 実行前) CPU倍率19倍(最大19倍)
MSR 0x000001A0 0x00000000 0x00850089
MSR 0x00000198 0x00001CD2 0x00001300
MSR 0x00000199 0x00000000 0x00001300
⇒EIST有効、TurboBoost有効、カレントP-State 19倍、ターゲットP-State 19倍
Throttle Stop 実行後) CPU倍率30倍(最大32倍)
MSR 0x000001A0 0x00000000 0x00850089
MSR 0x00000198 0x000021A0 0x00001E00
MSR 0x00000199 0x00000000 0x00002000
⇒EIST有効、TurboBoost有効、カレントP-State 30倍、ターゲットP-State 32倍
値の見方ですが、Intelの下記ドキュメントから読み解くことができます。
Intel64 and IA-32 Architectures Software Developer’s Manual Combined Volumes1, 2A, 2B, 2C, 3A, 3B and 3C
・CHAPTER 14 POWER AND THERMAL MANAGEMENT
14.1 ENHANCED INTEL SPEEDSTEPR TECHNOLOGY
14.3.2.2 OS Control of Opportunistic Processor Performance Operation
・CHAPTER 34 MODEL-SPECIFIC REGISTERS (MSRS)
34.7 MSRS IN INTELR PROCESSOR FAMILY (INTELR MICROARCHITECTURE CODE NAME SANDY BRIDGE)
EISTとターボブーストに関連する項目は、下記になります。
1A0H IA32_MISC_ENABLE
16 Enhanced Intel SpeedStep Technology Enable. (R/W)
38 Turbo Mode Disable. (R/W)
198H IA32_PERF_STATUS
15:0 Current performance State Value.
199H IA32_PERF_CTL
15:0 Target performance State Value.
32 IDA Engage. (R/W).
MSRは64bitのレジスタ群から構成されていて、IA32_MISC_ENABLE(1A0H)は、Throttle Stopの実行前後で変化がないことがわかります。
値は、0x00850089ですから、2進数に直すと下記となります(39bit目まで意味があるので、前0をつけています)。
000000000000000100001010000000010001001
0オリジンになるので、EIST、Turbo Boostの設定は、16(右から数えて17番目)、38(右から数えて39番目)になりそれぞれ値は、1と0になり、有効になっています。
ただし、負荷をかけた際に、P-Stateの値(Performance State Value)をみると、Throttle Stopの実行前では変化はなかったのですが、Throttle Stopの実行後、
P-Stateの値に変化が見られるようになりました。
P-Stateの現在の値とターゲットの値(最大値)は、それぞれ、IA32_PERF_STATUS、IA32_PERF_CTLで確認できるので、値をみると下記の通りとなります。
Thrttle Stop実行前)
現在の値19倍(0x1300)最大の値19倍(0x1300)
Thrttle Stop実行後)
現在の値30倍(0x1E00)最大の値32倍(0x2000)
* P-Stateは、15:0 Current Performance State Valueとあるように、0から15bitまでの値が、P-Stateの値となります。エンディアンの関係で、上位バイトと下位バイト
がひっくりかえりますから、0x1300は、0x0013、これを10数に直し、19になります。
以上から、CTOモデルは、BootCampでWindowsへの切り替わり時の初期化の際に、MSRのIA32_PERF_CTLでTarget performance State Valueが0x1E00(19)に設定されてしまうのが不具合の原因であり、0x00002000(32)になっていない為、負荷がかかった際にターボブーストを発動しようとしても倍率を上げられない状態になっていると判断できます。
標準モデルのCore i5では、26倍まであがるので、おそらく下記の値となるはずです。
MSR 0x00000199 0x00000000 0x00001A00
<参考>
http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html/
・Intel64 and IA-32 Architectures Software Developer’s Manual Combined Volumes1, 2A, 2B, 2C, 3A, 3B and 3C
http://download.intel.com/products/processor/manual/325462.pdf