link もっと前
   2008年 5月 7日 -
      2008年 5月 7日  
link もっと後

link 未来から過去へ表示(*)
link 過去から未来へ表示

日々

link permalink

やめて!VAIO の HP はもう 0 よ!

いつからか我が家の VAIO type G のファンがぶんぶん回りっぱなしになっています。冬の間は「うるせえなあ…」と思う程度で済んだのですが、改めて本体を触るとかなり熱い。

これから夏を迎えるに当たって温度が心配になってきましたので、原因を探ってみました。

負荷を調べる(2008年 5月18日改訂)

さて負荷をどうやって調べるかが問題です。ファンがブンブンしている状態でタスクマネージャを見ても 0% のままで、負荷がかかっているのかすらわかりません。というわけで 1秒おきに rdtsc 命令を発行し、その差分を表示するプログラムを書き(※)ました。

このプログラムが表示する値を理解するには、まず CPU の動作周波数がどうやって決まるか、rdtsc 命令の返す値は何を表すか、を説明しなければなりません。付け焼き刃の知識で頑張って説明します。

(※)本来なら自分で書かなくても、Crystal CPUID の Real Time Clock 表示機能を使うべきです。しかし Crystal CPUID は無駄に表示が凝っており、表示の負荷でシステムクロック周波数が上がる(rdtsc の変化分が 300MHz くらいまで)本末転倒状態だったので、没にしました。

システムクロックと CPU バスクロック(2008年 5月18日追記)

まず CPU バスクロック(CPU <-> ノースブリッジバス)の説明から入ります。CPU バスクロックはシステムバスクロックの半整数倍です。VAIO 君の場合はシステムクロック = 133MHz、CPU バスクロック = システムクロック(133MHz)x 4倍 = 533MHz のようです。

システムクロックはマザーボード上の水晶振動子(安い 10MHz〜30MHz くらい?)を原発振とした PLL(Phase Locked Loop)で供給されます。PLL って何?と聞かれても詳しくは知らんので勘弁して下さい。

CPU バスは Intel の伝統で FSB(Front Side Bus)と呼ばれ(※)ますが、今回は CPU バスで通します。

ノースブリッジにはメモリコントローラが載っていて SDRAM が繋がっています。比較的高速のバス(AGP バス、PCI-e x16 バス)などをノースブリッジに繋げることが多いようです。
ノースブリッジの先にはサウスブリッジが居て、PCI バス、PCI-e x1, x4 バスなど、比較的低速のデバイスを繋ぐことが多いようです。


CPU <- (1) -> ノースブリッジ <- (2) -> サウスブリッジ
                  |                        | (PCI バス)
              DDR SDRAM                PCI デバイス

(1) FSB(Front Side Bus, Intel 系), HyperTransport(AMD 系)
(2) DMI(Direct Media Interface, Intel 系), HyperTransport(AMD 系)

別にこの 2つでなければならないことはないです。
他の方式で接続するシステムも有るはず。

重要な点として、(1)、(2) のクロックと DDR SDRAM や PCI のクロックは全て同期しています。でないとデータのやりとりができないからだと思うんですが…。
そのため CPU バスと同様に、システムクロックから生成したバスクロックを用います。PCI バスだと 33MHz を欲しがるので、システムクロック 133MHz x 1/4 = 33MHz とします。

  • CPU の動作周波数 = システムクロック x CPU 内部動作周波数倍率
  • CPU バスの動作周波数 = システムクロック x 倍率
  • 周辺バスの動作周波数(例: PCI バス)= システムクロック x 倍率

(※)"Front" Side Bus に対して "Back" Side Bus もあるのか?
BSB もあります、いや…ありました。BSB は CPU <-> 2次キャッシュのバスです。しかし最近は CPU に 2次キャッシュも混載されているので BSB は不要です。ですから「最近のシステムにはありません」という方が正しそう。

rdtsc と CPU の動作周波数(2008年 5月18日追記)

rdtsc 命令とは CPU 内部のタイムスタンプカウンタを読み出す命令です。Core 系以前の CPU では rdtsc のカウントアップ周波数 = CPU 動作周波数でしたので、SpeedStep などで倍率を変化させると rdtsc の増分も変化していました。しかし Core 系では常に一定の周波数(Core Solo 1500U の場合は最大動作周波数 1330MHz)でカウントアップされます。
(hdk 氏、ご指摘&情報提供ありがとうございます)

つまり、
過去の CPU: システムクロック x 動作倍率(可変)
Core 系: システムクロック x 一定値
です。

じゃあ最初に書いた rdtsc を見るプログラムって意味無くね?と思うのはまだ早いんだ、これが。

VAIO 上で先ほどのプログラムを使って rdtsc の増分を見ると、システムの負荷によって変化します。rdtsc の増分はシステムクロック x 一定値、のはずですから、変化しているのはシステムクロック側と予想されます。

システムクロックを上げれば茨の道のオーバークロック(※)ですが、下げる方向に使えば省エネです。VAIO では CPU の省エネ機能(Enhanced SpeedStep)に飽きたらず、システムクロックも下げさらに省エネしようという設計なのでしょう。

(※)規定値よりシステムクロックを上げることをオーバークロックといいます。今までの説明からも類推できるように、システムクロックをメチャクチャ上げると CPU バスクロック、さらには PCI バス(1/4 倍 = 33MHz)や AGP バス(1/2倍 = 66MHz)まで上がり、いずれバスに繋がっているデバイスの許容値を超えて異常動作したり動作しなくなります。
この問題の解決にはシステムクロックと周辺バスクロックの比率を変える必要があります。オーバークロックを売りにしているマザーボードだと比較的柔軟みたいです。

VAIO の現状(2008年 5月18日追記)

システムに負荷をかけると、システムクロックが最大値に張り付いて rdtsc の増分も最大値である 1330MHz に張り付きます。負荷が低いと 50MHz 程度(※)まで落ちます。

さて、今の VAIO を見ると 1330MHz に張り付きっぱなしです。ファンがずっとブンブンしているのはこのせいでしょう。

ファンのスピードはシステム負荷に連動しているようなので、rdtsc 値の増分を下げる方向 = システムクロックを下げる方向へ改善することで「ファンがブンブン言う問題」は解決すると思われます。VAIO がシステム負荷をどうやって測定しているのかまではわかりませんでした。

(※)負荷が低いときは CPU 内部動作周波数倍率は 6.0倍まで落ちますので、rdtsc カウンタの増分 x 6/10 が本来のシステムクロックです。まあ、その辺の細かい値は今回どうでもいいので、高い、中間、低い、くらいが見えれば OK です。

犯人は USB HDD だ

というわけで犯人捜しです。片っ端からケーブルを引っこ抜いてみると、USB HDD を引っこ抜いた段階で 50MHz くらいまで下がりました。犯人はこれかあ。手始めに、デバイスの取り外しで無効化してみたものの全く負荷が下がりません。

USB 2.0 コントローラが有効な状態で一度 USB HDD を認識させてから、USB 2.0 コントローラ(Intel USB2 EHCI)を無効にすることで、USB 1.1 の機器として再認識させると、負荷が下がりました。

これで解決ですね……って、こんなん毎回やってられんよ。面倒くさくて死にそう。

もしかして

ひょっとすると HDD ケース(センチュリーのやつだった気がする)がおかしいのかもしれません。こやつは Windows XP の起動時に電源 ON だと 100% BoD するという、怪しさ爆発デバイスです。

というわけで別の USB HDD を繋いで、再度実験。やはり負荷が上がってダメです。さらに手持ちのデバイスで実験。

  • USB Flush メモリ -> 負荷高
  • USB DVD ドライブ -> 負荷高
  • USB 2.0 ハブ -> 負荷低
  • USB モデム(NEC N902iS、USB 2.0 デバイス) -> 負荷低
  • USB マウス(USB 1.1 デバイス) -> 負荷低

うーむ、どうも USB Mass Strage が NG っぽいですね。Windows の USB EHCI ドライバか、USB Mass Strage ドライバのどちらかが常に負荷をかける作りになっているんでしょうか?これはノート PC の設計者に優しくない作りだなあ…。

まとめ

  • USB Mass Storage(USB HDD、USB 2.0 デバイス) -> 負荷高、速い
  • USB Mass Storage(USB 2.0 デバイス)を「デバイスの取り外し」で無効化 -> 使えないくせに、負荷高
  • USB Mass Storage(USB DVD、USB 2.0 デバイス) -> 負荷高
  • USB Mass Storage(Flush メモリ、USB 2.0 デバイス) -> 負荷高
  • USB Mass Storage(USB 1.1 デバイス) -> 負荷低、ただし遅い
  • USB モデム、シリアルポート(NEC N902iS、USB 2.0 デバイス?) -> 負荷低
  • USB ハブ(ARVEL、USB 2.0 デバイス) -> 負荷低
  • USB マウス(Logicool、USB 1.1 デバイス) -> 負荷低
  • USB ゲームパッド(MS SideWinder、USB 1.1 デバイス) -> 負荷低

まとめといた。

[編集者: すずき]
[更新: 2008年 5月 18日 10:35]
link 編集する

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
   2008年 5月 7日 -
      2008年 5月 7日  
link もっと後

管理用メニュー

link 記事を新規作成

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDF ファイル RSS 1.0
QR コード QR コード

最終更新: 9/17 20:03

カレンダー

<2008>
<<<05>>>
----123
45678910
11121314151617
18192021222324
25262728293031

最近のコメント 5件

  • link 18年09月07日
    すずき 「ありがとう!\nこちらこそ、楽しみにして...」
    (更新:09/11 19:30)
  • link 18年09月07日
    よしだあ 「おつかれさまでした!\nまた仕事できるの...」
    (更新:09/11 19:17)
  • link 18年08月15日
    すずき 「うーん、なんか暴走したり、動かなかったり...」
    (更新:08/15 10:52)
  • link 18年08月15日
    すずき 「実行できた。あと実行ファイルパスについて...」
    (更新:08/15 10:42)
  • link 18年08月15日
    すずき 「さすがに x86_64 と arm のク...」
    (更新:08/15 10:35)

最近の記事 3件

link もっとみる
  • link 18年09月13日
    すずき 「[府民から都民へ] 家が決まりました。今月末から東京都民です。さよ...」
    (更新:09/17 20:03)
  • link 18年09月11日
    すずき 「[エアコン浄化] 今年の 7月に(2018年 7月 17日の日記参...」
    (更新:09/17 19:38)
  • link 18年09月10日
    すずき 「[引っ越し準備] 引っ越し用の新品の段ボールが 50箱以上届き、家...」
    (更新:09/17 19:32)

こんてんつ

open/close wiki
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報