HDDでの試用中に気づいたのだが、Manjaro Linuxなんだかおかしい。KDEもXfceもアプリの起動がやけに遅い。もちろんOSの起動ももっさりだ。最初はHDDだからこんなもんかと思っていたのだが、HDDにインストールしたMintと比べても体感できるレベルで遅い。CPU負荷は特に高いという事もなくMintと同じくらい。なぜこんな差が…?

特に酷いのがKDE。Kateとかマウスカーソルのアイコンが5〜6回跳ねないと起動しない。メモリの使用量やCPU使用率から見てもそこまで重いアプリじゃないでしょう…。Kateで開こうとしているファイルはほんの3行しか書いてないのだが。

これがね、初回の起動はまだわかる。問題は2度目の起動もクソ遅いのよ。アイコンの跳ねる回数が半減して3回程度にはなる。でもメモリ上にキャッシュされた状態でなぜこんなに時間がかかる? ミニマップのようないかにも遅くなりそうな設定を切っても全く変わらない。これってSSDにインストールしても遅いって事にならんか?

あまりにも気になったのでMint19の入っていたSSDにManjaro KDEをインストール、/homeはMintと同じようにHDDへ。そしたら本当にSSDでも起動が遅いのですね。予想通りKateの初回起動がアイコン跳ね3回、2回目以降はわずかにそれより速いくらい。

Manjaro XfceはKDEよりはマシなのだが、それでもMint Xfceと比べるとアプリの起動が一拍、LeafPadやMousePadの2回目の起動でもはっきりわかる程度には遅い。なんじゃこりゃ?

原因はI/Oスケジューラ

この時点でメインにしていたのはKDE。
なので検索語句も当然"KDE"を絡めているのだけれど、元々が重いという評判のあるKDE Plasmaだけに見当違いの情報ばかりヒットしてしまった。GPUの性能が足りてない訳じゃないからエフェクトを切るのも意味ないし、KDEのBalooその他を停止も結論からいえば関係なかった。

Mint18や19でHDDに使われているI/OスケジューラはCFQ。Manjaroの場合はSSDでもHDDでも使われるのはmq-deadline、これがアプリの起動が遅い原因なのです。
HDDはmq-deadlineでなくBFQ(CFQのマルチスレッド対応版)を指定してやればMint19と同じ速度が出るようになる。なお、これはManjaro18.04での話でもしかしたら18.1.0では修正されているかもしれない。

パフォーマンスの最大化 - ArchWiki

特定のデバイスで利用できるスケジューラと、現在使われているスケジューラを確認するには:

$ cat /sys/block/sda/queue/scheduler

mq-deadline kyber [bfq] none ←これはBFQが使われている

あるいは全てのデバイスでスケジューラを確認するには:
$ cat /sys/block/sd*/queue/scheduler
mq-deadline kyber [bfq] none
[mq-deadline] kyber bfq none
mq-deadline kyber [bfq] none

sda デバイスで I/O スケジューラを bfq に変更するには、以下のコマンドを使用します:
# echo bfq > /sys/block/sda/queue/scheduler

SSD は多数の IOPS を処理できるため、noop や deadline などのシンプルなアルゴリズムが最適です。逆に HDD には BFQ が適しています。以下のように udev ルールを使うことで、ディスクが HDD か SSD かどうかで I/O スケジューラを自動的に変更して永続的に設定することが可能です:

/etc/udev/rules.d/60-ioschedulers.rules

1
2
3
4
# set scheduler for non-rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]|mmcblk[0-9]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="mq-deadline"
# set scheduler for rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq"

ルールを保存したら、マシンを再起動するか、ルールをリロードしてください。

パフォーマンスの最大化 - ArchWiki

BFQに設定した後ならHDDにKDEをインストールしてもじゅうぶん使い物になる。

追記

Mint19同等は言い過ぎだったかもしれない。が、一応はHDDの反応が速くなるはず。HDD待ちでCPUとか遊んじゃってる状態なのでここを何とかしないとどうにもならない。不要サービス停止してもOSの起動時間が数秒短かくなる以外ほとんど変化なし。

あとKDE限定だがFMにDolphinを使うのを止めてPCManFM-Qtでも何でも別のKDE由来でないFMを使うとアプリ起動時間の短縮になる。やっぱりKDEという統合環境のオーバーヘッドはデカいようだ。

追記2

KDEの場合、homeに.compose-cacheという空のフォルダを作成(~/.compose-cache)するとアプリの起動時間がわずかに短縮するようだ。かなり古くからある小技だがまだ有効らしい。

https://kdemonkey.blogspot.com/2008/04/magic-trick.html
https://wiki.archlinux.org/index.php/Talk:KDE


この程度ならLinuxユーザーはすぐに気づいて自分で調整できるでしょ、という事でこういう設定なのか、単なるManjaro側の見落しなのかよくわからん。でもSSD1ドライブ構成の人が多くて気づいてない可能性は高そうだ。

それにしても,海外のフォーラムで同じようにManjaro KDEでアプリの起動時間が遅いのに疑問を持って質問していた人がいたのだれど、結局解決しないまま厄介払いみたいな対応されてて可哀相だった。日本の掲示板でもよく見る光景ではあるけれど。自分たちの使っているものに謂れのな言い掛かりをつけてくる奴、そう見えちゃうんでしょうね。