Apple の脅威の通知と金銭目当てのスパイウェアへの対策について

しばらく返答が寄せられていないようです。 再度ディスカッションを開始するには、新たに質問してください。

MBA2012 Core i7 2.0GHzでCPUクロックがおかしく、ターボブーストが効かない

MBA2012にBootcampでWindows 7を入れ、CPU-ZにてCPUの状態を確認した所、アイドル時で800MHz(x8)、最高で1900MHz(x19)でしかCPUが動作しないのを確認しました。

ユーザがアップロードしたファイル


BootCampアシスタントにて、MBA2012に対応したドライバは入手し、全てのドライバが適用されています。また、ACアダプタは接続し、電源設定もパフォーマンス(最大クロックで動作)にしています。


本来、Core i7-3667Uは負荷がかかった場合、ターボブーストで3.2GHzになるはずですが、ターボブーストが効かないどころか、CPUのクロックもおかしく、2.0GHzでも動作しません。


実際、Windows 7のエクスペリエンスインデックスでMBA2011とCPUスコアを比較してみると、下記の通りスコアが下がっていることも確認しています。


MBA 2012 Core i7-3667U 2.0GHz (TB 3.2GHz) プロセッサ 6.3

ユーザがアップロードしたファイル
MBA 2011 Core i7-2677M 1.8GHz (TB 2.9GHz) プロセッサ 6.9

ユーザがアップロードしたファイル

何か解決策はあるでしょうか?

MacBook Air (11-inch, Mid 2012), Windows 7

投稿日 2012/06/19 17:19

返信
返信: 28

2012/07/04 01:28 ni_ki への返信

MSRDumperは検索すれば色々でてくるかと思いますが、下がオリジナルになります。

http://www.insanelymac.com/forum/index.php?showtopic=258612


kextloadでロードすると、kernel.logにP-Stateの状態が出力されるようになり、以下のようにCPU倍率が何倍に変化しているかがわかります。


Jun 17 18:27:09 macbook-air kernel[0]: CoreCount: 2

Jun 17 18:27:09 macbook-air kernel[0]: ThreadCount: 4

Jun 17 18:27:09 macbook-air kernel[0]: 0xE2: 0x405

Jun 17 18:27:32 macbook-air kernel[0]: MSRDumper CoreMulti(8)

Jun 17 18:27:32 macbook-air kernel[0]: MSRDumper PStatesReached: 8 11 14 16 17 29 30 32

Jun 17 18:27:49 macbook-air kernel[0]: MSRDumper CoreMulti(8)

Jun 17 18:27:49 macbook-air kernel[0]: MSRDumper PStatesReached: 8 14 17 20 30 32

Jun 17 18:27:49 macbook-air kernel[0]: MSRDumper CoreMulti(32)

Jun 17 18:27:49 macbook-air kernel[0]: MSRDumper PStatesReached: 8 14 17 20 30 32


(上記説明で意味がわからないようであれば、使わない方が無難です。)


OS Xでは、ioreg -lw0で、ACPI Tableが取得できるので、中身を確認した所、SSDT-7にProcessorのP-Stateが定義されており、800MHzから100MHz刻みに3200MHzまでの定義があることを確認できます。


SSDTには、きちんとx8(800)からx32(3200)までの定義があるので、EISTで省電力機能が働いてx8~x20まで倍率が変化し、更に負荷をかけた際にTDPに余裕があればTurbo Boostで、最大x32(1core)、x30(2core)まで倍率を上がることでき、OS Xではその通りの動作をしています。


しかしながら、BootCampでWindowsに起動を切り替えると、倍率はx19でほぼ固定(アイドルで一瞬x8に落ちるがすぐにx19に戻る)で、廃熱に余裕がある状態で負荷をかけてもそれ以上倍率が上がらないので、Windowsが起動する前に、EFIでEISTとTurbo Boostの設定が誤っているように思えます。


Cinebenchですが、時間が無いので試せてませんが、OS Xでの結果は、まずは以下を参考にしてみて下さい。

http://arstechnica.com/apple/2012/06/review-the-2012-macbook-air-soars-with-ivy-bridge/2/


最後に、MacBook AirもMid2011では、Turbo Boostの記載は技術仕様にはありませんが、OS X、Windows共に有効になっています。

・MacBook Air (11-inch and 13-inch, Mid 2011) - 技術仕様

http://support.apple.com/kb/SP631?viewlocale=ja_JP

・Core i7+256Gバイト”の11インチMacBook Airは買いなのか (1/3)

http://plusd.itmedia.co.jp/pcuser/articles/1108/03/news048.html


Mid 2012では、Turbo Boostについてもはっきりと記載されていますね。

・MacBook Air (Mid 2012)

http://support.apple.com/kb/SP650?viewlocale=ja_JP

2012/07/04 09:10 tori10love への返信

tori10love さんによる書き込み:


MSRDumperは検索すれば色々でてくるかと思いますが、下がオリジナルになります。

なるほど、確かに「"MSRDumper"」で検索すると出てきました前回検索時は「MSRDumper」で検索したのが不味かったようです。

BootCampでWindowsに起動を切り替えると、倍率はx19でほぼ固定(アイドルで一瞬x8に落ちるがすぐにx19に戻る)で、(中略)

800MHzがアイドル時には常時出ているのかと思っていたのですが、常時1.9GHzなのですね。


CINEBENCHの結果のリンク先、ありがとうございます。OS X側も設定だけで実行力が無いのではないかと疑っていたのですが、それは無かったようです。

同一機のWindows7の結果を探したのですが見つかりませんでした。数値がかなり違うはずなのですが。どなたかお願いいたします^^


なお、Macがよく冷えてからの方がCINEBENCHの結果が良いようです。昨日、今日と朝一での結果が一番数値が良かったです。

MacBook Pro(Late 2011)Windows7CINEBENCHR11.5

CPU

昨日と今日の朝一5.72と5.70

昨日の夜5.5程度。

2012/07/10 21:47 tori10love への返信

現状での回避策になりますが、ThrottleStop 4.0を使うことで、ターボブーストが有効になります。


http://www.techpowerup.com/158795/TechPowerUp-Announces-ThrottleStop-4.0.html


TRL(Turbo Ratio Limits)で、1coreで32倍、2coreで30倍まで倍率を上げるように設定ができます。


Windows 7エクスペリエンスインデックスのプロセッサスコアが6.3から7.1に上がり、Super PIの104万桁の計算も19秒から11秒へ短縮することができ、負荷をかけた際にターボブーストが正常に働くようになるのを確認しました。


ユーザがアップロードしたファイル


ユーザがアップロードしたファイル

2012/07/11 00:20 tori10love への返信

アイドル時と負荷時でターボブーストのオン、オフが切り替わっているの状態が以下になります。

(一画面に収めるために外部ディスクプレイにつないだ状態でのスクリーンショットです)


・アイドル時

ユーザがアップロードしたファイル

・負荷時

ユーザがアップロードしたファイル

2012/07/12 01:36 tori10love への返信

以下、今回の回避策にいたるまで、独学で調べた結果と不具合の考察になります。

(誰かに教えてもらったわけではないので、勘違いや間違いはあると思います。そもそも、Appleは仕様を公開していませんし・・)


Intel CPUには内部制御用レジスタとしてMSR(Model Specfic Register)があり、そこで拡張機能の有効/無効を設定しています。


通常、使用したい機能をONにするには、BIOS(UEFI)から、レジスタの該当するビットを有効に設定します。関連するレジスタは、EISTはIA32_MISC_ENABLE、Tubo BoostはIA32_MISC_ENABLEとIA32_PERF_CTLになります。

(Intel 64 and IA-32 Architectures Software Developer's Manual Volume 3A: System Programming Guide, Part 1 の14.1から14.3.2.2を参照)


Macでは、OS起動前にEFIでその設定をしており、OS Xの起動シーケンスでは正しく設定されていますが、BootCampでWindowsへ起動を切り替える際の処理で、EISTとTurbo Boostを有効にするMSRへの設定を誤っているようです。


そこで回避策として、OS起動後に、ソフトウエア的にMSRを修正し、本来の正しい値に設定をしてあげれば良いと判断し、ツールを色々探したところ、Throttle Stopを使用すれば、該当の項目を再設定できることがわかり、EISTとTurbo Boostが正しく働くようになるのを確認しました。


なお、これはあくまで暫定的な回避策なので、本来はMSRの設定を正しく行うようにAppleがEFIのアップデートデータを提供すべきであると考えます(もちろん、Appleへのフィードバックも再度上げるつもりです)。


<参考>

Intel 64 and IA-32 Architectures Software Developer's Manual Volume 3A: System Programming Guide, Part 1

http://download.intel.com/design/processor/manuals/253668.pdf

2012/07/12 12:43 tori10love への返信

先こされました・・・・(苦笑)。


同じく、ThrottleStopを使用してのターボブースト有効化を確認しました。

tori10loveさまの検証通り、ハード的なものではないのはほぼ確定のようで、

これならがアップルも対応可能でしょうね。。


正式な対応を心待ちにするばかりです。


また、tori10loveさまの手腕、さすがです。

色々と勉強になりました!


※しかし、手元のMacbookair の手前の足が浮く症状に悩まされてます。

一度交換しましたが、また微妙に浮いている・・・。はぁ・・・。

2012/07/12 13:25 APP への返信

APP さんによる書き込み:


※しかし、手元のMacbookair の手前の足が浮く症状に悩まされてます。

一度交換しましたが、また微妙に浮いている・・・。はぁ・・・。

許容できないのであれば再度交換しか無いです。そのうち、浮かない製品に出会えるかもです。

2012/07/13 15:45 tori10love への返信

原因がほぼ特定できました。


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番目)になりそれぞれ値は、10になり、有効になっています。

ただし、負荷をかけた際に、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

2012/07/13 22:51 tori10love への返信

回避策として、MSRのIA32_PERF_CTL(0x00000199)にTarget performance State Valueとして32(0x00002000)を入れれば良いことがわかったので、MSRを直接編集するツールを探した所、CrystalCPUIDのMSR Editorが使えることがわかりました。


Function->MSR Editorから、MSR Editorを起動し、下記の通り入力し、WRMSRでMSRに書き込みを行うことでターボブーストでCPUの倍率が32倍まで上がることが確認できました。


MSR Number 0x00000199

WRMSR EDX-> 0x00000000 EAX-> 0x00002000


ユーザがアップロードしたファイル


・CrystalCPUID

http://crystalmark.info/software/CrystalCPUID/

2012/07/14 00:15 tori10love への返信

補足です。


上記作業は、論理CPUの数分、つまりCPU1/4、CPU2/4、CPU3/4、CPU4/4それぞれへ実行して下さい。デフォルトだと、CPU1のみにしか適用されないので、3.2GHzに上がるのは1スレッドのみです。


また、スリープから復帰すると、本設定はリセットされてしまうので、再度実行する必要があります(Throttle Stopは論理CPU分実行し、かつ常駐していればスリープからの復帰時も適用してくれるので、その意味では楽です)。

2012/08/01 15:40 tori10love への返信

Ivy Bridgeに正式対応したThrottelStop 5.00がリリースされました。

http://www.techinferno.com/downloads/?did=41


私の個人的な見解になりますが、根本原因はEFIでのMSR設定ミスなので、予期せぬ値を変更しないという意味での回避策としては、上記で述べた通りThrottleStopを使用するよりも、MSRの修正を行う方がべストだと思います。


ただし、毎回MSR Editorを立ち上げて、論理CPU分設定するのは面倒なので、修正方法としては、下記にある通りRW-Everythingを使い、各論理CPU毎にMSRのIA32_PERF_CTL(0x00000199)にTarget performance State Valueとして32(0x00002000)を設定するスクリプトを実行するのが良いと思います。

https://discussions.apple.com/thread/4035733?start=29


EFIアップデートデータの提供時期ですが、MacBook Air 2012では、Thuderbolt Display使用時に音声にノイズがのる問題があるようなので、こちらの問題と併せて修正されるのではないかと個人的には期待しています。

https://discussions.apple.com/thread/4051858


最後に、以下にある通り、MBR(MasterBootRecord)には起動用のコードだけでなく、OS起動前に必要となる初期化コードを埋め込むことができるので、MSRを修正するアセンブラのコードを書き、それを埋め込む方法も回避策としては面白いと思います。(アセンブラに詳しい人がいれば挑戦してみて下さい)


・MBR を改造して Mac Pro でも Windows を AHCI で使おう
http://crystaldew.info/2010/12/28/mbr-mac-pro-windows-ahci/

2012/09/20 02:43 tori10love への返信

本来、Core i7-3667Uは負荷がかかった場合、ターボブーストで3.2GHzになるはずですが、ターボブーストが効かないどころか、CPUのクロックもおかしく、2.0GHzでも動作しません。


この問題に対応したMacBook Air EFIファームウェア・アップデート 2.5がリリースされたようです。

説明文に「Boot Camp使用時にターボブーストが機能しない問題が修正され」とあります。

Mac App Storeから10.8.2にアップデートを実行後、再度アップデートを実行するとリストアップされます。

# iOS 6のインストールが終わったと思ったら、OS X 10.8.2とファームウェア・アップデートまで同時リリースで完全予定外・・・。寝るタイミングを失ってしまった・・・とほほ。

MBA2012 Core i7 2.0GHzでCPUクロックがおかしく、ターボブーストが効かない

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple ID を使ってご参加ください。