デスクトップ Ubuntu 20.04 LTS が不安定なのでやったこと

私の環境では 16.04 LTS の頃から不安定だった Ubuntu 開発環境 #5 が 20.04 LTS へのアップグレード以降、コーディング中にフリーズしたり、突然リブートしたり、あげくにはGUIファイルマネージャ(Nautilus)が繰り返しクラッシュするようになりました。

ubuntu@os0101-Ontario:~$ uname -srvmpio
Linux 5.4.0-65-generic #73-Ubuntu SMP 
Mon Jan 18 17:25:17 UTC 2021 
x86_64 x86_64 x86_64 GNU/Linux

ファイルマネージャを起動して Home からディレクトリを移動しているとクラッシュしてウィンドウが消える。

darktable を開くと警告文が表示される。そして Visual Studio Code でデバッガを動かしていると、何の前触れもなく画面がフリーズして、キーボード入力もマウス入力も受け付けなくなります。

なにが Raising Skinny Elephants だ、一度も役に立ったことねえぞ?

と言えるぐらい Linux と AMD Ryzen の組み合わせは、わりと頻繁に問題を起こします

[toc]

CPU

$ lscpu
Architecture:                    x86_64
CPU op-mode(s):                  32-bit, 64-bit
Byte Order:                      Little Endian
Address sizes:                   43 bits physical, 48 bits virtual
CPU(s):                          16
On-line CPU(s) list:             0-15
Thread(s) per core:              2
Core(s) per socket:              8
Socket(s):                       1
NUMA node(s):                    1
Vendor ID:                       AuthenticAMD
CPU family:                      23
Model:                           1
Model name:                      AMD Ryzen 7 1800X Eight-Core Processor
Stepping:                        1
Frequency boost:                 enabled
CPU MHz:                         1845.354
CPU max MHz:                     3600.0000
CPU min MHz:                     2200.0000
BogoMIPS:                        7185.80
Virtualization:                  AMD-V
L1d cache:                       256 KiB
L1i cache:                       512 KiB
L2 cache:                        4 MiB
L3 cache:                        16 MiB

GPU

加えてこのマシンに搭載されている機械学習デバイス、じゃなかったビデオカードの製造元の NVIDIA も Linux をあまり理解していないらしく、存在を忘れた頃にプロプライエタリなドライバの中にエラーの原因を入れてくることがあります

$ lspci|grep VGA
0b:00.0 VGA compatible controller: NVIDIA Corporation GP102
[GeForce GTX 1080 Ti] (rev a1)

まあ Jetson Nano のおかげで以前よりは大分 Linux に注力するようになった印象ですが。


NVIDIA Jetson Nano 2GB 開発者キット




Motherboard

そして最後にボードです。ここはあまり問題を起こした記憶はありませんが、もしかしたら解決の糸口になるかもしれませんので一応は掲載しておきます。

$ sudo dmidecode -t baseboard
# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 3.0.0 present.

Handle 0x0002, DMI type 2, 15 bytes
Base Board Information
	Manufacturer: ASRock
	Product Name: AB350 Pro4
	Version:                       
	Serial Number: M80-AC000000000
	Asset Tag:                       
	Features:
		Board is a hosting board
		Board is replaceable
	Location In Chassis:                       
	Chassis Handle: 0x0003
	Type: Motherboard
	Contained Object Handles: 0

このスペックでありながら vim の起動でフリーズするので本当に冗談ではないですね。

カーネル更新

そこで、まずカーネルに問題があるのではないかと安易に考えて、更新を行ったものの、あまり意味がなかったので 5.4.0 に戻しました。

$ uname -r
5.4.0-65-generic

$ sudo apt search ^linux-image
$ sudo apt-get install linux-image-5.8.0-43-generic
$ sudo vim /etc/default/grub
$ sudo update-grub

これで解決すれば楽だったんですけどね。

KMS

つぎに見に行ったのはカーネルモード設定(Kernel Mode Setting)です。

じつはここは AMD CPU や NVIDIA GPU 搭載マシンに Linux をインストール時に一度は見に行くところです。ここの設定を変更しないと、おそらくインストールしても OS がブートしませんので。

$ sudo grep GRUB_CMD /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset"

これらは全てブート時におけるカーネルへの指示で quiet はドライバやモジュールのエラーコードなどの出力を排し、 splash はロード画面の表示を排し、nomodeset はシステムが立ち上げ前にビデオドライバを読み込むことを排します。

おそらく Ryzen & GeForce を Linux で動かす時にデフォルトになっているであろう設定です。

ここに新たに nvme_core など疑わしいところを幾つか書き加えたり、消したりしていたら、最終的にここに書いてあった CPU C-states の設定に辿り着きました。

どうも Ryzen CPU は GNU/Linux 系OSの C-statesに対応しているか怪しいらしいです。取り敢えず processor.max_cstate を書き足して C-states の最大数を1に設定しました。

$ sudo vim /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset processor.max_cstate=1"

その結果、フリーズの回数は劇的に低下しましたし、なぜかファイルマネージャのクラッシュ回数も 1/3 ぐらいに減少しました。しかし、まだクラッシュするので作業効率が芳しくありません。

Nautilus

そこでクラッシュしたタイミングでログを確認してみます。

$ grep nautilus /var/log/syslog|tail -n 2
Feb 2 20:00:09 os0101-Ontario kernel: [  433.647400] nautilus[7827]: segfault at 20 ip
 xxxxxxxxxxxxxxxx sp xxxxxxxxxxxxxxxx error 6 in libc-2.31.so[xxxxxxxxxxxx+17800
0]
Feb 2 20:00:13 os0101-Ontario update-notifier-crash[8840]: nautilus

すると見事に segfault がでてます。これは困ったねとバージョンを確認してみると、こっちは最初からダメでした。

$ nautilus --version
GNOME nautilus 3.36.3
Segmentation fault (core dumped)

これはバグレポートにリスト化されているのではないかと考えたところ、どうもありそうな感じです。しかも 2 年も放置されてまだ評価中という点が非常に判断に困ります。

気長に修正されるのを待つか、自分でデバッグするか、あるいは Nautilus を使用するのを辞めるか。

Nemo

良い機会なので私は新しいファイルマネージャを試してみることにしました。Ubuntu 派生の Linux Mint team が作成している Nemo です。個人的に Mint を使用したことがないので評価ができないのですが、むこうのパッケージベースが Ubuntu Focal なので問題ないだろう、と。

Mint は10年ぐらい前に Debian 派生になると言っていた記憶があるのですが、また Ubuntu に戻ってきたんですかね。

$ sudo apt install nemo -y
$ xdg-mime query default inode/directory
org.gnome.Nautilus.desktop

$ xdg-mime default nemo.desktop inode/directory
$ xdg-mime query default inode/directory
nemo.desktop

$ sudo reboot

$ nemo --version
nemo 4.4.2
$ xdg-open $HOME

インストールして設定を買えた後にログインしなおすか、リブートするとファイルマネージャが Nemo に変更されます。もちろん、消去さえしていなければ Nemo をデフォルトで使用しながら Nautilus も使えます。

完全には解決していないのですが、しばらくはこれで様子を見ようかと。

Leave a Reply

Your email address will not be published. Required fields are marked *