[linux] Mint Linuxがフリーズする件の対策

どうも動画再生をしつつ作業をするとLinuxがフリーズする場合がある。
後から考えると、どうもLinux KernelではなくXが怪しい。

前提条件

http://d.hatena.ne.jp/longicorn/20121111#p1 で書いたとおりXfce版のMintだ。
ちなみに、Mintは最近リリースしたばかりだが、その前のバージョン。

$ lsb_release -rd
Description:    Linux Mint 13 Maya
Release:        13

現象

動画再生をしていてファイルマネージャーを操作するのが典型的なフリーズするパターン。
その後、突然動画の音がまともに再生されなくなり、一旦マウスもキーボードも操作を受け付けなくなる。
そして、なぜかマウスだけ動くようになるが、画面操作を一切受け付けない。

エラーログ

フリーズするので強制再起動するので、ログすら残らないパターンが多いのだが、フリーズせずに助かるパターンがあってログを確認できた。


こんなログがでる。

Dec  9 16:47:40 Gemini kernel: [20787.595671] [drm] nouveau 0000:02:00.0: PGRAPH - TRAP
Dec  9 16:47:40 Gemini kernel: [20787.595674] [drm] nouveau 0000:02:00.0: PGRAPH - ch 2 (0x0000b37000) subc 5 class 0x8397 mthd 0x15e0 data 0x00000000
Dec  9 16:47:40 Gemini kernel: [20787.595682] [drm] nouveau 0000:02:00.0: VM: trapped write at 0x0022c92000 on ch 2 [0x00000b37] PGRAPH/PROP/RT0 reason: PAGE_NOT_PRESENT
Dec  9 16:47:40 Gemini kernel: [20787.595705] [drm] nouveau 0000:02:00.0: PGRAPH_TRAP_TPDMA_2D - TP 0 - Unknown fault at address 0022c93000
Dec  9 16:47:40 Gemini kernel: [20787.595707] [drm] nouveau 0000:02:00.0: PGRAPH_TRAP_TPDMA_2D - TP 0 - e0c: 00000000, e18: 00000000, e1c: 00000000, e20: 00000037, e24: 0c030000
Dec  9 16:47:40 Gemini kernel: [20787.595716] [drm] nouveau 0000:02:00.0: PGRAPH - TRAP
Dec  9 16:47:40 Gemini kernel: [20787.595718] [drm] nouveau 0000:02:00.0: PGRAPH - ch 2 (0x0000b37000) subc 2 class 0x502d mthd 0x0860 data 0x00000000
Dec  9 16:47:40 Gemini kernel: [20787.595749] [drm] nouveau 0000:02:00.0: PGRAPH_TRAP_TPDMA_RT - TP 0 - Unknown fault at address 0022c93000
Dec  9 16:47:40 Gemini kernel: [20787.595751] [drm] nouveau 0000:02:00.0: PGRAPH_TRAP_TPDMA_RT - TP 0 - e0c: 00000000, e18: 00000000, e1c: 00000000, e20: 00003b00, e24: 00030000
Dec  9 16:47:40 Gemini kernel: [20787.595760] [drm] nouveau 0000:02:00.0: PGRAPH - TRAP
Dec  9 16:47:40 Gemini kernel: [20787.595761] [drm] nouveau 0000:02:00.0: PGRAPH - ch 2 (0x0000b37000) subc 5 class 0x8397 mthd 0x15e0 data 0x00000000
Dec  9 16:47:40 Gemini kernel: [20787.595769] [drm] nouveau 0000:02:00.0: VM: trapped write at 0x0022c93000 on ch 2 [0x00000b37] PGRAPH/PROP/RT0 reason: PAGE_NOT_PRESENT
Dec  9 16:47:40 Gemini kernel: [20787.595785] [drm] nouveau 0000:02:00.0: PGRAPH_TRAP_TPDMA_2D - TP 0 - Unknown fault at address 0022c92000
Dec  9 16:47:40 Gemini kernel: [20787.595786] [drm] nouveau 0000:02:00.0: PGRAPH_TRAP_TPDMA_2D - TP 0 - e0c: 00000000, e18: 00000000, e1c: 00000000, e20: 00000037, e24: 0c030000
Dec  9 16:47:40 Gemini kernel: [20787.595795] [drm] nouveau 0000:02:00.0: PGRAPH - TRAP
Dec  9 16:47:40 Gemini kernel: [20787.595797] [drm] nouveau 0000:02:00.0: PGRAPH - ch 2 (0x0000b37000) subc 2 class 0x502d mthd 0x0860 data 0x00000000
Dec  9 16:50:56 Gemini kernel: [20983.072072] nouveau_ratelimit: 9 callbacks suppressed
Dec  9 16:50:56 Gemini kernel: [20983.072078] [drm] nouveau 0000:02:00.0: PFIFO_DMA_PUSHER - Ch 2 Get 0x002002bea4 Put 0x002002c048 IbGet 0x00000d61 IbPut 0x00000d6e State 0x80000030 (err: INVALID_CMD) Push 0x00400040
Dec  9 17:51:45 Gemini kernel: [24629.482238] [drm] nouveau 0000:02:00.0: PFIFO_DMA_PUSHER - Ch 2 Get 0x0020024640 Put 0x0020026844 IbGet 0x00000693 IbPut 0x00000694 State 0x80004861 (err: INVALID_CMD) Push 0x00502031
Dec  9 17:51:45 Gemini kernel: [24629.496597] [drm] nouveau 0000:02:00.0: PFIFO_DMA_PUSHER - Ch 2 Get 0x0020026844 Put 0x0020026844 IbGet 0x00000693 IbPut 0x00000694 State 0x80000000 (err: INVALID_CMD) Push 0x00400040


ソースを見ずに勘だけで書くが、どうもデータ処理が下手くそでまともに動作できずに、エラーチェックに引っかかっていそうだ。
動画再生はきっかけに過ぎなくて、Xが重い処理をしたらおそらく再現するはず。

解決方法

さてnouveauとはなんぞやと思いぐぐると、どうやらNVIDIA向けの新しいドライバらしい。
"lsmod|grep nouveau"するとたしかに使われている。
http://ja.wikipedia.org/wiki/Nouveau


となれば話は簡単だ。nouveauを使わずに、別のドライバをインストールすればよい。
Ubuntu系の設定が変わりまくっていてよく分からないので、またググって対応した。


まず、modprobeで使わないようにブラックリストに入れて対策する。
/etc/modprobe.d/blacklist.conf

blacklist nouveau
options nouveau modeset=0


ドライバは安定しているのに変更する。

$ apt-get install nvidia-current


あとは、Linuxの再起動をすればよい。
一応"lsmod|grep nouveau"して引っかからなければOK。
ただし、多少問題が発生したのでそれについても書いておく。

問題1:デュアルディスプレイされない

おそらく、前回設定した機能はnouveauが担当していたのだろう。
nvidia-currentをインストールすると、"NVIDIA X Server Settings"というツールもインストールされる。


これでデュアルディスプレイの設定が可能だ。
この画面でできるので、設定する。
特に説明の必要はないはずだが、一応言っておくと"Save to XConfiguration File"をしてからXの再起動を行う必要があります。


ちなみに、副作用として嬉しい誤算があった。
前回とは違い各ディスプレイは独立して使えるようになったので、非常に作業がしやすくなった。

問題2:Firefoxでの動画再生でUbuntuと同じ問題が再現した

詳しい現象と対策はここで。全く同じ対応で解決した。
http://d.hatena.ne.jp/longicorn/20120602#p1