情報科学屋さんを目指す人のメモ

方法・手順・解説を書き残すブログ。私と同じことを繰り返さずに済むように。

【dwm.exe】マルチディスプレイでdwm.exe が落ちる場合の安定化対策メモ

dwm.exe (3) dwm.exe-不安定問題 (5) Windows (248) Windows 8.1 (58)

dwm.exeは、メモリリーク問題やCPU使い過ぎ問題、dwm.exeは動作を停止しました問題など、いろいろ問題を起こしやすいのですが、今回は突然描画が乱れて真っ黒な画面になったり、ウィンドウの部品が描画できず壊れてしまったりする描画崩壊問題の対策を扱います。この問題含め、dwm.exeはマルチディスプレイ環境で問題が発生しやすく、同様の症状を探してみると、マルチディスプレイユーザーで描画が乱れる現象が頻発している傾向がありそうです。完全な解消には至っていませんが、最後に紹介するレジストリ編集は、だいぶ効果が大きいのでオススメです。

以下、自分が最近試した対策をメモしておきます。

マシン

自作PCの構成は ASUS Z87-PRO + Intel Core i7-4770K C0 で、OSはWindows 8.1 Update 1 です。

ディスプレイは現在9面ですが、もっと少ない状態でも問題が発生します。

構成詳細:9面ディスプレイ環境の構築方法

問題の内容

簡単にいえば、dwm.exeが勝手に落ちてしまう現象が問題です。これが発生すると、全ディスプレイが一度暗転してから再描画され、その再描画に失敗し、表示が欠けたり、アプリケーションが落ちたりといった、厄介な問題が多発するようになります。

ディスプレイが一瞬真っ黒になって戻る現象の原因

この記事でも紹介していますが、描画が不安定になるいろいろな問題が、このdwm.exeが落ちる現象と関連しています。

方針

今までは、現状の使い方を維持したまま、不安定になる原因を探る方針でした。原因となるアプリの特定を行ったり、安定するバージョンのグラフィックドライバを探したり、ボトルネックになっているハードウェアリソースを特定しようとしたり。だいたいグラフィック周りの問題は、この辺りが主戦場になるのですが、今回はなかなか改善できませんでした。

というわけで、方針を変更して、不安定を引き起こしにくいPCの利用を行う、つまり、設定を変更したりして、不安定になる原因を踏まないようにすることにしました。

システムのプロパティ>詳細設定>パフォーマンス>視覚効果

まずは「Windows 内のアニメーションコントロールと要素」「ウィンドウを最大化や最小化するときにアニメーションで表示する」という、マルチディスプレイで重くなりがちな動作を無効化しました。その後、視覚効果をすべてオフにすることも試しました。

しかし、全く改善が見られません

続いて、ShellExViewで、Microsoft以外が提供しているShell拡張をすべて停止しました

しかし、普通に描画が欠ける現象が再発して、失敗です。

Chromeの設定

Chromeの起動オプションに「--disable-gpu」を追加しました。

これで、GPU使用率激減、GPUのメモリ使用量は500MBくらい減少しました。

少し安定した用でしたが、根本的な、大幅な改善には至りませんでした。

BIOSの設定変更

ASUS Z87-PRO の設定を変更してみました。その実行内容は以下のとおり。

  • Enhanced Intel SpeedStep Technology [Enabled]->[Disabled]
  • Turbo Mode [Enabled]->[Disabled]
  • Hardware Prefetcher [Enabled]->[Disabled]
  • Adjacent Cache Line Prefetch [Enabled]->[Disabled]
  • EIST [Enabled]->[Disabled]
  • Ai Overclock Tuner [Auto]->[Manual]
  • CPU Strap [Auto]->[100MHz]
  • ASUS MultiCore Enhancement [Auto]->[Disabled]
  • CPU Core Ratio [Auto]->[Sync All Cores]
  • 1-Core Ratio Limit [Auto]->[35]
  • 2-Core Ratio Limit [Auto]->[35]
  • 3-Core Ratio Limit [Auto]->[35]
  • 4-Core Ratio Limit [Auto]->[35]
  • DRAM Frequency [Auto]->[DDR3-1333MHz]
  • Bluetoothコントローラー無効化
  • ワイヤレスネットワークコントローラー無効化

いずれも効果なしでした。

BIOSアップデート

マニュアル:http://www.asus.com/Motherboards/Z87PRO/HelpDesk_Manual/

現在のBIOSバージョンは、イニシャルリリースの 1007 でした。

UEFI BIOSアップデートに伴う不具合、動作不良、破損等に関しましては保証の対象外となります。

「ASUS EZ Update V2.01.11 for Windows 8.1 32bit & 64bit.」をダウンロードしてインストールしました(AI_Suite3_EZ_Update_Win8-1_VER20111.zipを展開し、Setup.exeを起動してインストール)。

インストール後、なぜかスタート画面からアプリが見つからなかったので、「"C:\Program Files (x86)\ASUS\AI Suite III\EZ Update\EzUpdt.exe"」から直接起動しました。

「接続」ボタンをクリックすると、「Z87-PRO BIOS 1504」が発見されました。チェックを入れて「更新」をクリックします。

少しトラブルもありましたが、無事BIOSバージョンが1504になりました。

しかし、効果なし

さらにそこから最新の1802にアップデートするも再発しました

有力な設定(HPET無効化など)が増えることもなく、BIOSアップデートは効果がありませんでした。

PepperFlash無効

「chrome://plugins」で、Adobe Flash PlayerのPepperflashplayer.dll(Chrome内臓のFlash Player)を無効化しました。フラッシュプレイヤーは描画に関していろいろな問題の原因になるので。

しかし、あっさり再発しました。

Janetterを使わない

Janetterで画像を開いたときに発生しやすいので、とりあえずJanetterを起動しないようにしてみました。

Janetterで画像を開こうとすると画面全体の描画が乱れる

Jantterが内部でChromium Embedded Framework (CEF)を使っているので、Chromeとともに同じ原因を踏んでいるのかもしれませんでした。

Jantterに同梱されているd3dcompiler_43.dll, d3dx9_43.dll, icudt.dll, libcef.dll, libEGL.dll, libGLESv2.dll これらは、CEF由来のDLLです。

しかし、さっぱり効果はありませんでした。

bcdeditでHPETを無効化する

既に有力な対策だと他のPCでわかっていたHPET無効化ですが、Z87-PRO では、BIOSを最新版にしても、BIOSにHigh Precision Event Timer (HPET) の有効化・無効化を設定する項目が現れなかったのは先ほど書いたとおりです。そこで、Windows上で無効化することも試みました。

Windows上でHPETを無効化するために、bcdeditコマンドを使いました。

bcdedit引数なし実行の結果がこちら。

>bcdedit

Windows ブート マネージャー
--------------------------------
identifier              {bootmgr}
device                  partition=\Device\HarddiskVolume4
description             Windows Boot Manager
locale                  ja-JP
inherit                 {globalsettings}
default                 {current}
resumeobject            {b821833e-37c8-11e3-9f22-fd4d46ae4496}
displayorder            {current}
toolsdisplayorder       {memdiag}
timeout                 30

Windows ブート ローダー
--------------------------------
identifier              {current}
device                  partition=C:
path                    \WINDOWS\system32\winload.exe
description             Windows 8.1
locale                  ja-JP
inherit                 {bootloadersettings}
recoverysequence        {0fbe75c7-37c9-11e3-9f22-fd4d46ae4496}
recoveryenabled         Yes
allowedinmemorysettings 0x15000075
osdevice                partition=C:
systemroot              \WINDOWS
resumeobject            {b821833e-37c8-11e3-9f22-fd4d46ae4496}
nx                      OptIn
bootmenupolicy          Standard

ここで「bcdedit /set useplatformclock true」を実行して「この操作を正しく終了しました」と表示されたのを確認して、再起動しました。

しかし、これも再発したので、「bcdedit /deletevalue useplatformclock」で元に戻しました

ASMedia USB 3.0 Controller Firmware アップデート

「ASMedia_U3_FW_update」をダウンロードした形跡がなかったので、インストールしました。案外、USBのドライバで直る例は多いです。Update Vrsion: 130319033715。再起動。改善しません。

Wi-Fi・Bluetoothドライバーインストール→やめた

BIOSアップデートで有効化された2つのデバイスについて、ドライバをインストールしようとしました。

「Wi-Fi Driver V10.0.0.263 for Windows 8.1 32bit & 64bit.(WHQL)」と「Bluetooth Driver V8.0.1.305 for Windows 8.1 32bit & 64bit.(WHQL)」をインストール。

しかし、Wi-Fiドライバインストール時に、「No Such File Found. Can't find AsusSetup.ini : D:\WIFI_Win7-8_8-1_VER1000216_251_263\Bluetooth\AsusSetup.ini」と表示されてしまいました。Wi-Fiドライバをインストールしているのに、「Bluetooth」フォルダの中を探していました。

どうせ使わないので、BIOSで両者を無効化して無視することにしました

PCI Express X16_3 slot (black) bandwidth を手動設定

過去の経験上、BIOS設定の「Auto」は敵なので、グラフィックに直接関係する「PCI Express X16_3 slot (black) bandwidth」を「Auto」から「X1 mode」に変更しました。

30インチモニタ4枚を1枚のグラボ上で安定動作させるまでのメモ

結局Janetterを操作しているうちに描画崩壊が再発しました。画像を開いたときに、急激にSystem GPU Memoryが増えます。261MBから急に771MBまで増加し、画像を閉じても減らず、もう一度開いてみたら落ちました。同じ画像を開き直したときにメモリが増加しているのだとしたら、メモリリークだと思われます。

もう一度実行してみると、1回開いたときに300MBから710MBに増加し、もう一度開き直すと830MBに増加し、それからしばらくするとまた300MB程度まで戻りました。この戻るまでの時間に使いすぎると、メモリの消費が増えすぎるのかもしれません。

Catalyst Software Suite

Catalyst Software Suite 14.4 がリリースされていたので、アップデートしました。AMDディスプレイドライバは14.100.0.0000に。

改善せず。むしろ不安定になった気すらします。

PCI Express X16_3 slot (black) bandwidth を「Auto」に戻す

HDDが利用不能になったので、PCI Express X16_3 slot (black) bandwidth を元に戻しました。

HDDが突然認識されなくなった原因とBIOS設定メモ(PCI Express設定の帯域幅設定)

レジストリ編集でdwm.exeの設定を変更する

これが唯一強力に改善された対策です

regeditを起動して、レジストリを次のように編集します。

  • 「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\DWM\Schedule」にキーが「FrameRateMin」、DWARD値が16進数で「3c」のエントリを追加
  • 「HKEY_CURRENT_USER\Software\Microsoft\Avalon.Graphics」にキーが「Force10Level9」、DWARD値が「1」のエントリを追加

これらのエントリはデフォルトでは存在しないため、自分で追加します(DWMディレクトリから自分で追加、Windows 7・8・8.1共通)。

.regファイルでは、次のようにします。

Windows Registry Editor Version 5.00
 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\DWM]
 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\DWM\Schedule]
"FrameRateMin"=dword:0000003c
 
[HKEY_CURRENT_USER\Software\Microsoft\Avalon.Graphics]
"Force10Level9"=dword:00000001 引用元

設定後再起動します。

これで、GPUメモリの急上昇を繰り返す操作をしてもなかなか落ちないようになりました。それでも、全く落ちないわけではありません。

参考

コメント(1)

  1. 同じような現象で困っている人
    2016年1月6日(水) 19:24

    自分も同じ現象に悩まされています
    ただ自分の場合一瞬暗転はするのですがマウスカーソルは残っています。
    他はここの記事に書いてあるとおりすぐに画面が復活します。
    何回か繰り返すと酷すぎるときはフリーズします。
    結局のところ解決策はないのでしょうか?

新しいコメントを投稿