私の環境では 16.04 LTS の頃から不安定だった Ubuntu 開発環境 #5 が 20.04 LTS へのアップグレード以降、コーディング中にフリーズしたり、突然リブートしたり、あげくにはGUIファイルマネージャ(Nautilus)が繰り返しクラッシュするようになりました。
1 2 3 4 |
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 の組み合わせは、わりと頻繁に問題を起こします。
CPU
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
$ 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 をあまり理解していないらしく、存在を忘れた頃にプロプライエタリなドライバの中にエラーの原因を入れてくることがあります。
1 2 3 |
$ lspci|grep VGA 0b:00.0 VGA compatible controller: NVIDIA Corporation GP102 [GeForce GTX 1080 Ti] (rev a1) |
まあ Jetson Nano のおかげで以前よりは大分 Linux に注力するようになった印象ですが。
Motherboard
そして最後にボードです。ここはあまり問題を起こした記憶はありませんが、もしかしたら解決の糸口になるかもしれませんので一応は掲載しておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$ 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 に戻しました。
1 2 3 4 5 6 7 |
$ 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 がブートしませんので。
1 2 |
$ 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に設定しました。
1 2 |
$ sudo vim /etc/default/grub GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset processor.max_cstate=1" |
その結果、フリーズの回数は劇的に低下しましたし、なぜかファイルマネージャのクラッシュ回数も 1/3 ぐらいに減少しました。しかし、まだクラッシュするので作業効率が芳しくありません。
Nautilus
そこでクラッシュしたタイミングでログを確認してみます。
1 2 3 4 5 |
$ 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 がでてます。これは困ったねとバージョンを確認してみると、こっちは最初からダメでした。
1 2 3 |
$ 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 に戻ってきたんですかね。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ 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 も使えます。
完全には解決していないのですが、しばらくはこれで様子を見ようかと。