Ubuntu (Desktop) Midnight -- Maximum Tune (in my history)

読了目安:19分

はじめに(ご容赦事項)

今回記す内容は以下を求めている方には 適さない 可能性が多いにある:

  • Linux全般またはDebian, Ubuntuの『Server Edition』などのパフォーマンス改善
  • ハイパーバイザーな仮想環境上でのUbuntu Desktopの挙動改善(あまり期待できないと思う)
  • 他、ホゲフカ特化のLinuxカーネルチューニング(そんな人はこの記事を見ていないで、初めから『カーネルビルド』について調べた方が良い)

タイトルは完全に『湾岸ミッドナイト・マキシマムチューン』を意識したものの、内容は大変薄っぺらい。
そしてしっかりとしたベンチマークを取ってもいないし、後記の事を行っていてもなお sudo journalctl -b-1 -xe と叩けば;

M月 dd hh:mm:ss manzyun-greed gnome-shell[dddddd]: Gnome Shell crashed with signal 11
...
M月 dd hh:mm:ss manzyun-greed gnome-shell[dddddd]: [email protected]: Main process exited, code=killed, status=11/SEGV

と吐かせる様な事をしているのだ。

もちろんながら、同様の方法を試みて読者に何か損失・不利益が生じたとしても、私は何も責任を取らない(相談には乗るかもしれないが)。

概要

  • 可能な限りのファンの分解・グリースの補充・ラジエーターやヒートシンクの清掃、RAMやビデオカードの接点の無水エタノールによる清掃。
  • linux-zen カーネルのPPA追加とインストール。
  • ビデオカードの追加と、できる限り最新の freedesktop.org 製グラフィックドライバのPPAの追加とインストール。

見ての通り、とてつもなく『フリーライド(無賃乗車)』で『スクリプトキディ(コピペスクリプトを組む事しか能の無い小便臭いガキンチョ)』な事しかやってない。

ましてやベータリリースのディストロでやっているのだから、ディストロ開発をしている方々(主に『Canonical Ltd』に所属している方々やそれ以外のDebianパッケージメンテナの皆々様)には迷惑を掛けているかもしれない。

もし以降を実施するのであれば、 ベータリリースでは行わない で頂けると筆者個人は大変有り難い。「まずお前が止めろよ」と言わ……いや、言って良い。石を投げてくれ

筆者のマシン

neofetch の結果より:

            .-/+oossssoo+/-.
        `:+ssssssssssssssssss+:`
      -+ssssssssssssssssssyyssss+-
    .ossssssssssssssssssdMMMNysssso.       manzyun@manzyun-greed 
   /ssssssssssshdmmNNmmyNMMMMhssssss/      --------------------- 
  +ssssssssshmydMMMMMMMNddddyssssssss+     OS: Ubuntu Impish Indri (development branch) x86_64 
 /sssssssshNMMMyhhyyyyhmNMMMNhssssssss/    Host: MS-7693 4.0 
.ssssssssdMMMNhsssssssssshNMMMdssssssss.   Kernel: 5.13.19-xanmod1 
+sssshhhyNMMNyssssssssssssyNMMMysssssss+   Uptime: 1 hour, 15 mins 
ossyNMMMNyMMhsssssssssssssshmmmhssssssso   Packages: 3403 (dpkg), 58 (flatpak), 28 (snap) 
ossyNMMMNyMMhsssssssssssssshmmmhssssssso   Shell: fish 3.1.2 
+sssshhhyNMMNyssssssssssssyNMMMysssssss+   Resolution: 3840x2160 
.ssssssssdMMMNhsssssssssshNMMMdssssssss.   DE: GNOME 
 /sssssssshNMMMyhhyyyyhdNMMMNhssssssss/    WM: Mutter 
  +sssssssssdmydMMMMMMMMddddyssssssss+     WM Theme: Adwaita 
   /ssssssssssshdmNNNNmyNMMMMhssssss/      Theme: Yaru-dark [GTK2/3] 
    .ossssssssssssssssssdMMMNysssso.       Icons: Yaru [GTK2/3] 
      -+sssssssssssssssssyyyssss+-         Terminal: gnome-terminal 
        `:+ssssssssssssssssss+:`           CPU: AMD FX-8320E (8) @ 3.200GHz 
            .-/+oossssoo+/-.               GPU: AMD ATI Radeon R7 370 / R9 270/370 OEM 
                                           GPU: AMD ATI Radeon R7 370 / R9 270/370 OEM 
                                           Memory: 3317MiB / 32056MiB 

察しの良い方なら、
「5年落ちのマシン構成に、4Kディスプレイのモニタを差してる……だと?」
と困惑するだろう。

流石に『Radeon R7 370』が可哀想なので、2880x1620 と控えめにしている。

マシン清掃

これでも分解清掃後のマシンの図

ほぼ盆栽弄りの様なものだ。

パソコンを組み立てた事のある方には常識とは思うが;

  • エアフロー(外気を底面に近い所から吸引、天井へと熱を逃して排気)を意識する
  • メンテナンス容易性の観点から、フルタワーマシンが好ましい

やってる事はその程度である。

以降の工程に入る前に、「せっかくならもっとマシンに本気を出してもらう設定を組むきっかけ作りとして、BIOSやUEFIの内容をまっさらにする」為に、CMOS内のデータ保存用のボタン電池を取り外して作業をしてても良いだろう。

各部ファンの分解・グリース充填・ファンの羽根の清掃

⛔ ::手先の感覚や力加減に自信のある人 だけ ここの章はやれたらやりましょう。


『勝手に修理・気ままに工作』さんの『PCファンの分解、メンテナンス』を参照しながら行った。

### 用意するもの

  • 大きめのマイナスドライバー x 2
  • グリース (オイル ではない , また「CPUとヒートシンクの間」に塗る『放熱グリス』とも 違う )

グリースについてはスプレーで十分とは思うが、ペースト状の物を今回は使用。

やり方

  1. 2本のドライバーをファンの軸部の境目に捻り込む
  2. マイナスドライバーをひねったり傾けたりして ジワジワ と外すつもりでやる
  3. 外れたら楊枝などで羽根部位の支柱が入っていた所にグリースを 少しずつ 継ぎ足す様に入れる
  4. 羽根部位は固く絞った布などで軽く拭き、乾拭きをする。
  5. 羽根部位の支柱と支柱が入っていた穴を合わせて押し込んで、手動で少し回す

2 の過程については、自分も初めてやった割には上手く行ってしまったので『コツ』と言える様なものがほぼ無い。しいて挙げるなら;

  • ドライバーから来る張り・抵抗に注意を払う
  • 視覚も用いて張り・抵抗がどの位置から来ているのか注意を払う
  • 破損・破壊の不安を感じたら、 諦める
  • 羽根を押し込む前に銅線(コイル)があまりにも乱れていたら、ととのえる

    くらいしか無い。

    そんな調子で、簡易水冷クーラーのラジエーターのファンとビデオカードのファンをメンテナンスした。ケース側面のファンについては「破壊する不安」を感じたので諦めた。

2022-04-12T1850 追伸

初めから期待はしていなかったが、
『ビデオカードのシリコングリースの塗り直し』
をやった:

残念な期待通りだったが、そこまで変わらなかった。

上記を機会にと、ビデオカードの設定見直しを、
「常時高火力(演算性能)」
から、
「自動演算能力性能制御」
に切り替えたり、ビデオカードのネジのトルク(締め加減)を高め(強め)にした。

『コンコルドの誤り』もあるだろうが、多少ファンの回転中に生じていた振動音が消えた様ではある。

## ラジエーターやヒートシンクの清掃
⚠ :: 清掃対象に適する洗剤や清掃方法を事前によく確認しましょう。


大抵はエアーダスターで綿ホコリを飛ばすだけで十分かと思う。

うっかり錆が付いていたら丁寧に取り除き、その部位には材質に適した防錆剤を塗布したら良いかもしれないが……今時そういったパーツに鉄を使っている事自体がまれなので、 気にしなくて良い。

## ビデオカードやRAMのマザーボードとの接触端子の清掃

ここまで神経質にならなくても良いが、組み立ててから5年も使ってると、
「ねぎらいの心情」
でやりたくなった。

ごく普通に『無水エタノール』を染み込ませた綿棒で端子部分を拭いただけである。

## BIOS・UEFIの設定
⚠ :: マシンのBIOS・UEFIのドキュメント(説明書)を事前に確認し、調整可能項目を踏まえてから操作しましょう

分解清掃したパーツ群を適切に再装着をしたら、マシン起動直後にBIOS・UEFIの画面に遷移するコマンドキーを5回毎秒程度で連打し、それらの画面に遷移する。

丁寧にCMOSの内容を破棄した方は見慣れないメッセージが出るかもしれないが、冷静に読めば内容の判る英語のはずなので、適切に『セットアップ画面』へ遷移する様に操作する。

特筆する事は無いとは思うが、一応書いておく。

  • IOMMU(Intelだと『VT-x』とかかも)の有効化
  • ファンの回転数は高め(35℃代で1000rpmを基準)に設定

Linux-Zenの導入

おそらくこの記事の一番のお題。

自分が下手に説明するより、『点と接線。』さんの『linux-zenの導入について』を読んだ方が誤解が無い気がする:

一方、linux-zen、俗にZENカーネルと呼ばれるカスタムカーネルにはもっと普遍的な付加価値がありそうに思われた。なんせArch LinuxのWikiでは下記のように説明されている。

ZEN Kernel はカーネルハッカーたちの知恵の結晶です。日常的な利用にうってつけの最高の Linux カーネルになります。詳しい情報は https://liquorix.net を見てください (Debian 向けの ZEN ベースのカーネルバイナリ)。

なるほど、いかにもすごそうだ。しかしこれでは抽象的すぎて説明になっていない。文中のリンク先にもそのものズバリの情報はなかったので、自ら調べたところ下記の解説が得られた。

Well I think the Zen Kernel (or the patches that are applied to it) increases your system’s responsiveness and lowers your latency at the expense of some performance hit (I’d say about 1-3% at best).

簡単に言えばわずかなパフォーマンスの犠牲(1~3%くらい)と引き換えにシステムの応答性を向上させてくれるカーネルということらしい。

Ubuntu含むDebianディストリビューションでは2つの選択肢がある。『Liquorix』と『XanMod』である。

Liquorix

Liquorixをかい摘んで筆者の言葉で述べるなら、
最新のLinuxカーネル に ZEN なカスタムを施したカーネルバイナリパッケージ」
である。

最新のLinuxカーネル というのがやや難儀なもので、テキトーな比較資料として筆者のマシンで ls /boot/ -l | grep -e "^vmlinuz.* を叩いてみる:

~ $ ls /boot/ | grep -e "^vmlinuz.*"                                                                                                                                        
vmlinuz
vmlinuz-5.10.65-rt53-xanmod1
vmlinuz-5.13.0-16-generic
vmlinuz-5.13.19-xanmod1
vmlinuz-5.14.0-6.4-liquorix-amd64
vmlinuz-5.14.0-7.1-liquorix-amd64
vmlinuz.old

注目して頂きたいのは、 vmlinuz-5.13.0-16-genericvmlinuz-5.14.0-6.4-liquorix-amd64, それと vmlinuz-5.14.0-7.1-liquorix-amd64 の行である。マイナーバージョンがガラリと変わっている事がお判り頂けるだろうか。

差し当って「ホームユース」には支障は無いので神経質になる必要は無いものと思う。 「Ubuntuをホームユースしている人が稀」とは言わないでくれ。ここに居るんだ。

筆者も初めはこちら(ただしベータリリース起動後しばらくは除く)を使っていたが、
「UbuntuでDTMを真面目にやるとすると、RealTimeカーネルかねえ……」
と魔が差してしまった為、次に紹介するカスタムカーネルを用いる様になった。

XanMod

Webページが「ゲーマー向け」だったので当初は避けてしまっていたが最近は、
「いや、ゲームを作りたいんだったら、ゲーム向けにカスタムされたカーネルを使うのは必然だったのでは?」
とか、
stable パッケージを作っていて、かつUbuntuのgenericカーネルとの開きはそこまで無い」
「RealTimeカーネルも有り難いなあ」
とつい思い抱いて浮気する形となっている。


とはいえ、そこまでRealTimeを意識する事があるかと問われると……それこそJACKオーディオサーバーもカリッカリにチューニングした上でMixxxArdourで高サンプリング周波数の音声ファイルを扱ったDJ,DAWをする時に必要になるのかもしれない。 つまり直近では無い

マシンの用途に合わせて選んで、PPAを追加し、インストールして頂きたい。

最新の freedesktop.org 製グラフィックドライバ

次に、 oibaf氏がLaunchpadで提供しているPPAを追加してビデオカードのアップグレードを行う。(コマンドは省略)

なんで freedesktop.org 製(フリーソフトウェア)を使うのか

PRIMEを使いたいので。

当初これをしたかった訳では無いが、デスクトップマシンはたまたまビデオカードが2枚になったので、思う存分にビデオカードの演算能力を発揮してもらおうと。
そしてラップトップマシンはNvidiaのビデオカードだが、プロプライエタリなドライバだとあまり応答速度が良くない印象だったので。

カーネルモジュール設定とパラメーター

カーネルモジュールが何なのかについて、雰囲気解釈で良いなら「Linuxカーネルのアドオン」と解釈しておけば良いかと。
Linuxで仮想カメラを実現する v4l2loopback もその一つ。

パッケージをインストールしただけで本領を発揮する事が多いとは思うが、筆者は、
「ビデオチャットのクライアントアプリ(ZoomとかJitsiとかDiscordとか……)と仮想カメラ制御用ソフト(OBS Studio)を起動しても平気」
という状態まで持って来るまで異様に時間が掛ってしまった為、この様に健忘対策で記している。

この辺りの情報は 賞賛するが悔しいものの 『ArchWiki』の『AMDGPU』の項が大変参考になった。

ただしUbuntuの場合(というより筆者の場合)は多少読み換えが必要な箇所があった。

『ArchWiki』に倣い /etc/modprobe.d/radeon.conf の内容は ;

options radeon_si_support=0

/etc/modprobe.d/amdgpu.conf の内容は;

options amdgpu_si_support=1

とし、念の為 /etc/modules ファイルに amdgpu と1行追記した。

ここまで行った後で一度 update-initramfs -u -k 'all' を行なうのは 必須 なので、忘れぬ様。

ビデオカードの冷却コントロールとモニタリングツール

🛈 :: 必須では無いですが、あると便利なツールの紹介です。


  • amdgpu-fan GitHubリポジトリ :: Python製のRadeonビデオカードのファン制御スクリプト。後記するカーネルパラメーターの設定によってはこれが必要になる。 pip3 install amdgpu-fan でインストール。
  • bpytop GitHubリポジトリ :: CPUやRAMの使用率やプロセス一覧と制御を行えるCUIツール。ターミナル上で動かすからと侮る無かれ。 pip3 install bpytop でインストール。
  • radeontop GitHubリポジトリ :: ビデオカードのVRAMやクロック周波数の確認ができるCUIツール。ちゃんとグラフ表示なので安心。 apt install radeontop でインストール。

カーネルパラメーター

カーネルパラメーターとは何かについては、また雰囲気解釈で良いなら「ビルド済みのLinuxカーネルそのものに後から設定できる値」と解釈しておくのが良いかと。

こちらに関しては「Windowsとのデュアルブート」をしている方々にはお馴染みで 嫌悪される事もある? grub2 の設定で、
「全てのカーネルに対してのカーネルパラメーター」
を当てた。以下筆者の、 /etc/default/grub の先頭から数十行抜粋:

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

# [NOTE] This section was enabled auto select kernel from before booted.
GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

# [HACK] I don't know `GRUB_TIMEOUT` values effect too...
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=3
GRUB_HIDDEN_TIMEOUT=3
GRUB_HIDDEN_TIMEOUT_QUIET=true

# [CAUTION] Do NOT remove this section!
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`

# [NOTE]::
# - amd_iommu=on :: Enable IOMMU on Kernel. Of course, Enabled IOMMU on UEFI
# - amdgpu.runpm=0 :: Turn off power management on VGA board, maybe.
# - amdgpu.audio=0 :: Interesting bug. Turn off audio support amdgpu:
#   The kernel was supported HDMI audio. but, If that option was enabled,
#   HDMI display make buggy view.
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amd_iommu=on amdgpu.runpm=0 amdgpu.audio=0"
GRUB_CMDLINE_LINUX=""

最初の4行は元々あるコメントだが、それ以外のコメント部分は「筆者の知性と教養」で書いたテキトー英語なので、頭の悪さが垣間見えるだろう。

一番重要なのは GRUB_CMDLINE_LINUX_DEFAULT=... の中の amd_iommu=on である。

ハイパーバイザー型の仮想環境からのビデオカードへのアクセスの用途で使う記憶ではあるが、筆者の学習不良につき、
「なぜIOMMUがPRIMEの利用可否に影響を与えるのか」
について解説できない現状である。

さて、ここまで来たら再起動…… の前に update-grub2 をしっかり叩いてビルド完了を見送る事。

モニタリング

🛈 :: 必須では無いですが、できると今後のチューニングが捗ります。


サブモニタでCPUとGPU2台の様子を観察している図

Ubuntuの再起動後は、マシンのファンの音やデスクトップ環境の挙動を眺めて調整していくのも一つかと思う。

もし「サブモニタ」を使えるならば、上に載せた画像の様にいくつかのツールを起動しておいて観測しておくと、ファンの適切な回転数やプロセッサの限界値が垣間見えるかもしれない。

それでは、良きLinuxデスクトップライフを……え、嫌?

補足資料

update-initramfsupdate-grub2 についての詳しい話は『Ubuntu Weekly Recipe』の下記をご覧頂けると幸い:
* 第638回 Ubuntuに「普通に」ログインするいろいろな方法
* 第639回 Ubuntuに「トラブル時に」ログインするいろいろな方法

また、Ubuntuでの「Steamで配信されているゲーム」については、下記も非常に参考になった:
* 第626回 UbuntuでもSteamのWindowsゲームを!
* AMD GPUを使用してLinux/Ubuntu 20.04でCyberPunk 2077をプレイする方法 - Qiita

さらに、「『Wayland』上での『GNOMEデスクトップ環境』で『OBS Studio』の画面・ウィンドウキャプチャをする」に当ってはOBS StudioにWaylandのスクリーンキャプチャが入ったので試してみた - チラシの裏とかそういう類のに助けられた。

これらの記事を記して下さった皆々様、もちろんArchWikiのページを編集している皆様には、改めてこの場で感謝申し上げさせて頂く。

この後

以降、この記事を書き終えた後で色々気づいた事を書き留めてる。

2021-09-27T08:12

カーネルのアップグレードが入ると(ベータリリースのディストリビューションを使っているので尚更)高頻度で、
「一部のソフトウェア・アプリケーションが画面表示されない」
事象が発生する。

対処方法は単純に(思考停止だが)「再インストール」で何とかしているので、それについて追記する:

sudo ppa-purge oibaf/graphics-drivers -- # oibafさん提供の最新ドライバを一旦消してダウングレード
sudo apt autoremove && sudo apt autoclean -- # 念の為消せるパッケージや設定は削除する
sudo sed 's/^# deb /deb /' /etc/apt/sources.list.d/oibaf-ubuntu-graphics-drivers-{DistroCodeName}.list -- # ppa-purgeで無効にしたリポジトリを有効化する。不安な人は『ソフトウェアとアップデート』などの他プログラムで編集する事を強く勧める。なお {DistroCodeName} は「PPAを追加した時のUbuntuのコードネーム」になる。
sudo apt update && sudo apt upgrade -- #アップデート(パッケージリストの更新)とアップグレード(パッケージそのものの更新)
sudo systemctl reboot -- # 再起動。古いコマンドではあるが `sudo shutdown -r now` でも良い。

2021-10-16T17:24

カーネルパラメーター を以下の様に変更;

- GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amd_iommu=on amdgpu.runpm=0 amdgpu.audio=0"
+ GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amd_iommu=on"

理由というより、こうなるに至った展開は;

  1. amdgpu-fanYAML ファイルの読み込みで起動しなくなった
  2. カーネルパラメーターを見直して以下を思った:
    2.1. LinuxカーネルにAMD自体もコミットしてなかったっけ?
    2.2. 3年も経っていてかつ、新しめのカスタムカーネルなら、そういう変更(パッチ)も適用されているのでは?
  3. 試しに消す。 ビデオカードのファンが回ってくれた

この後で amdgpu-fan の本体であるPythonスクリプトを少し弄るが問題の根が深そうなので諦め、川音リオ氏にお勧め頂いたCoreCtrl』で、ビデオカードのファンの回転数を高めにするのであった。幸いパッケージの衝突は無かった。

2023-12-09T10:45

その後、数回のディストリビューションアップグレードでパッケージが一旦アンインストールされるという事があったので、今後困る事があるかもしれないので書いておく

Steam Protonで動かしていたゲームが起動しなくなった

sudo apt install dxvk mesa-vulkan で解消した。要は、
「DirectXの役割をVulkanに代替するライブラリと、Vulkanそのものがいつの間にか抜けていた」
という事だ

調査方法はうろ覚えだが、『Steam Lancher』で調査したいゲームの設定からコマンドを次の様に編集し、コンソールログをファイル出力した:
%command% -condebug

出力したログファイルは $HOME/.steam/steam/logの配下にそれっぽいものが出力されたと思う

CoreCtrl がアップグレード後に、また管理者権限を要求される

アップグレード後のお約束なので、mkdir $HOME/.local/etc.bak とディレクトリを作っておいて、設定ファイルの原本をそこに置いておくと後々楽。なお筆者の例:

$ pwd
/home/manzyun/.local/etc.bak

$ ls -l
合計 8
-rw-rw-r-- 1 manzyun manzyun  86 12月 28  2021 90-corectrl.pkla
-rw-rw-r-- 1 manzyun manzyun 310 12月 28  2021 90-corectrl.rules

$ cat 90-corectrl.rules
polkit.addRule(function(action, subject) {
    if ((action.id == "org.corectrl.helper.init" ||
         action.id == "org.corectrl.helperkiller.init") &&
        subject.local == true &&
        subject.active == true &&
        subject.isInGroup("manzyun")) {
            return polkit.Result.YES;
    }
});

$ sudo cp ./90-corectrl.rules /etc/polkit-1/rules.d/

蛇足

  • PRIMEを有効活用するにはビデオカードが2枚必要になる。さらに「 一枚のビデオカードに映像出力を全て任せる 」ケーブル接続を行わないと、「2ヶ月経っても安定してグラフィック編集ソフトを駆動できない」筆者の様になる。
    • しかしPRIMEの有効性から察するに、ビデオカード2枚挿し(特にマザーボードに映像出力端子が備わっていない構成のマシン)はかなり有効な手立てかもしれない。
    • SteamランチャーからのゲームでPRIMEを使う場合は、ゲームの起動オプションで env DRI_PRIME=1 %command% と指定するのが良さそうではある。
    • 実はUbuntuメニューに表示される *.desktop ファイルでも同じく env コマンドで環境変数を指定する事ができる。
  • /etc 配下を弄り倒すのは割と勇気が要る。しかし etckeeperbrzgit を入れておくと、多少心配事が少なくなると思う。
ツイッターでシェア
みんなに共有、忘れないようにメモ

まんじゅ(´ん`)

CoderDojo Sapporo/Sapporo East の駄メンターです。 オープンソースソフトウェア・フリーソフトウェアの布教と、それらを使った創作活動の布教をしています。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント