5r4ce - The Next Enforcer. presented by pumpCurry.
crrient time: 04 11_08Last modified: 07-02-28 22:47:3207-02-28space22colon47colon32Access count: 018457018457 ←過去 | ☆最新 | →未来 | ▽末尾に進む | ↑トップページへ


pumpCurry's Diary [February 2007.]

2007年2月20日17時01分windows vistaでおきている問題。
おそらく、nvidia geforceなGPUをつんでいる、日本では
あまり多くない数のPCで同時多発している模様。

aeroglassをonにした状態で、動作をさせ、
デュアルモニタで別モニタにウインドウを移動させたり、
複雑なポリゴンを描写させたり負荷をあたえてみたりすると、
10〜15秒ほどハングアップしたのち、画面がブラックアウトし、
「nvlddmkmが応答を停止しましたが、正常に回復しました。」
というエラーがでる。

このとき復旧できないこともあってその場合は
STOP : 0x00000116 (0x116,116)のコードの青画面エラー(いわゆるBSOD)が
発生してリセットされる。


=============================
説明
ビデオ ハードウェアの問題により、Windows は正しく動作しなくなりました。

問題の署名
問題イベント名:LiveKernelEvent
OS バージョン:6.0.6000.2.0.0.256.1
ロケール ID:1041

問題の説明に役立つファイルです (利用できない可能性があるファイルもあります)。
WD-20070219-0608.dmp
sysdata.xml
Version.txt
=============================

解決策がみつからないのでこまっております
2007年2月20日19時01分
ディスプレイ ドライバの応答停止と回復
ディスプレイ ドライバ nvlddmkm が応答を停止しましたが、
正常に回復しました。
2007年2月23日21時54分続報。グラフィックがハングするこの現象、
microsoftのサイトに理由の説明と、仕様がざっくりかいてある
ページがあることをさっき発見しました:

WDDM によるタイムアウトの検出と GPU の回復

ここを見ると、GPU がスケジューラからの回避要求を遅延できるタイマが
存在していて、常に監視ループがはいっているようです。
つまり処理してるからまっててねと宣言してシステムがしびれを
きらすまでの時間(≒ GPUが停止したかどうかのウォッチドッグタイマー)が2秒
そのあと、コード VIDEO_TDR_FAILURE (0x116) を含むシステムのバグ チェックを
するらしく、スレッドがドライバの処理を中断することが許可される秒数分チェックします。
これが5秒
実際にそのあと画面がフラッシュして、映像が帰ってくるのに
ディスプレイの自動画像解像度調整に依存した数秒
かかるため、都合約10秒ハングアップすることになり、
記述がほぼ一致します。

さて、ここの文書をみると、レジストリをみるとしびれを切らすまでの
秒数を変えることができるらしいのです。ちょっといまから
やってみて、のちほどレポートしようとおもいます。
2007年2月23日22時13分1個誤りが。

>オペレーティング システムで、スレッドが
>ドライバの処理を中断することが許可される秒数の部分、
>、オペレーティング システムは、
>コード VIDEO_TDR_FAILURE (0x116) を含むシステムの
>バグ チェックを行います。既定値は 5 です。

とあるため、5秒間応答できない場合その後チェックなので
5秒 + チェックに要する時間 数秒間、つまりすくなくとも
ここで5秒以上ハングアップすることになります。
2007年2月23日22時47分この問題を解決中に違う問題で困っていたのを発見。
特にノートPCで、自動で画面の電源が切れる状態になる
設定をしていて、休止・サスペンドすると画面だけ
もどってこないという問題(vncだと見れたりする)を
抱えてらしてる方に朗報(windows xp)。
特にdynabook satelliteや、thinkpadの古い機種でありがち
なので、おきる方は自己責任で、慎重かつ大胆にtryしてみて。

KB823348:キーを押してもモニタが点灯しない場合がある

1)レジストリエディタを開く (regedit.exe)
2)HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers を
 検索するか、ツリーからさがす
3)ツリーの場所まで行ったら、その下に LidCloseSetPower という名前でキーをつくる。
4)フォルダのようなものがそのツリー直下にぶら下がれば成功。
5)再起動する。

2007年2月24日00時24分つづきですよー。

以下の負荷をかけて、下記のレジストリを調査しました。
 ・(1)IE7でyoutubeにあがっていて比較的高画質高レートの映像をフル画面で
   再生しつつ、ウインドウをつかんで激しく動かしまくる
 ・(2)ntuneに含まれるシステム安全性>診断>システム安全性テストでGPUテストを実行
 ・(3)上記の2つを同時実行


「TdrDebugMode」フラグ
このフラグが存在していなければ規定値「2」が書いてあるものと同義になる。
⇒「0」 にセット(TDR_DEBUG_MODE_OFF)
  ・不具合がおきて、「2」にセットしたときにリセットが起きる条件を満たした瞬間、
    カーネルに割り込みをかけてすべての画像描写動作をストップするみたいです。
    チョークスリーパーがかかって落ちそうになっているのに助けを求められません。
    画面描写に不具合が起きた瞬間画面はかたまったままになります(涙。

⇒「1」 にセット(TDR_DEBUG_MODE_IGNORE_TIMEOUT)
  ・タイムアウト監視をオフにします。監視しないので、ドライバをリセットしません。
    つまり都度起こる10秒ハングしません
    ハングしませんが、リセットされないので不具合がたまると突然青画面で死にます。

⇒「2」 にセット(TDR_DEBUG_MODE_RECOVER_UNCONDITIONAL)
  ・規定値。機械的に回復処理を行うようで、回復が復旧に確保された時間までに
    まにあわなくても強制復旧するらしい。この場合は元の画面が生成できず、
    画面がまっくろでマウスだけ帰ってきてしまい、再度ドライバリセットが発生する。
    画面が固まってから成否に関係なく復旧時間がほぼ同じ時間らしい。

⇒「3」 にセット(TDR_DEBUG_MODE_RECOVER_UNCONDITIONAL)
  ・2にセットしたときに起こる、とにかく制御を返す姿勢を改め、
    きちんと画面が描写できる状態まで回復を待つ。このため真っ黒画面で
    帰ってくることはないが、若干復旧までの時間が遅くなる。
    動画やポリゴンが激しいと画面を1こつくったあとすぐ次の応答ができず
    息切れを起こし、連鎖してまたドライバリセットが起きやすい模様?


この実験中わかったことは、システムに負荷がかかり画面描写が重くなることに
厳格な処罰を下す仕組みがあるようです。コマ落ちしないとまにあわないとき、
標準では2秒以内にコマ落ちします!と宣言できないと、ドライバがリセットされる
ようでした。動画を再生してうごかしまくるとコマが落ちるのですが、落ちた状態
しかも音声が先行して動画が遅れてくる状態になるとき、「2」と「3」ではリセット
されますが、「1」ではその状態でもそのまま動作し続けました。「0」にすると
続行不能になります。
2007年2月28日22時23分いろいろ実験した結果、
tdrLevel 3
TdrDelay 1
TdrDdiDelay 2
TdrDebugMode 3

上から
tdrLevel => TdrLevelRecover(3) 規定値のまま
・タイムアウト時の回復。
 このフラグは設定がいりません。これ以外にすると
 画面が戻ってこなくなります。

TdrDelay => 1にする
・GPU がスケジューラからの回避要求を遅延できる秒数。
 これは、事実上のタイムアウトのしきい値です。
 既定値は 2 です。

 …とありますが、GPUがハングしてから2秒は復活猶予を
 あたえ、その間画面はかたまるがマウスは動く状態、
 になります。長くしてもたいてい一度固まると戻ってこない上、
 その分待ってしまうためにいらいらが募ります。
 ボクシングでダウンして意識がなくなってるのにカウントを60ぐらい
 とるのと等しい状態
に陥るので、思い切って短くします。

TdrDdiDelay => 2にする
 オペレーティング システムで、スレッドがドライバの処理を
 中断することが許可される秒数。指定時間以降、OSは、
 コード VIDEO_TDR_FAILURE (0x116) を含むシステムの
 バグ チェックを行います。既定値は 5 です。

 …ですが、これに遷移するとマウスが固まり、OSに
 メディカルチェックが走ります。5を指定すると5秒間
 メディカルチェックが走るのですが、どうせGPUは
 リセットしないと元に戻らない状態
に陥っているので、
 短くします。長くしてもすでにTdrDelayでダウン判定
 くらってるので、画面が固まってる時間が長くなるだけで
 改善しませんでした。

TdrDebugMode => 3にする
 TDR プロセスのデバッグ関連動作。
 TDR_DEBUG_MODE_RECOVER_UNCONDITIONAL (3) は、
 一部の回復条件が満たされていない場合 (連続して
 タイムアウトが発生した場合の回復など) も、回復処理を
 実行します。

 …ということですが、一部の回復条件が満たされてない状態を
 待っても連続して即死することが多いのか、条件が満たされない
 のか、デフォルトだと一度はまると激しく回復処理ループに
 陥ってなかなかかえってきません。まるで、愛の思い出を
 つかわずにオリビアの岬に突入している勇者様ご一行
のようです。

 3にすると無理やりでも立ち直らせようとするので、多少緩和されます。

…となりました。

レジストリ操作はリスクが伴います。ぱんかれは責任とれませんので、
at own liskでやってみてください...

△先頭に戻る | ↑トップページへ | ←過去 | ☆最新 | →未来
By pumpCurry[ぱんかれ] / Group D.B.P.'s 2000-2003#免責事項