2025-07-20

【LMDE】Full LTO を試してみた

三連休パワーによって 4 時間かかると思われる Full LTO を試してみましたが、なぜか 60 分を切って終了してしまいました。

三連休だしね

前回のお話はこちらです。

【LMDE】ThinLTO を試してみた 

思っていたほど ThinLTO の効果が出なかったので、ならばと時間のある三連休ということもあって試してみることにしたのです。

 

やってみた

どうせ長時間コースなんだしと思い、CPU 使用率が 50% くらいで推移するように -j 6 を指定して make を実行してみました。あ、この CPU は 6 コア 12 スレッドです。LTO もデフォルトでは物理コア数で並列実行されるということもあり。

time KCFLAGS="-O3 -march=native -pipe" KCPPFLAGS=$KCFLAGS make -j 6 LLVM=1 bindeb-pkg LOCALVERSION=-flto

そうしたらなんと、60 分もかからないでビルドが終わってしまったんです。

real    57m1.889s
user    294m20.935s
sys     27m48.380s

なんで? 

 

測ってみた

これは LTO の指示が正しく伝わっていなんじゃないかと疑われるレベルですね。LTO が指示されているかは .config を確認するとよいそうです。

CONFIG_LTO=y
CONFIG_LTO_CLANG=y
CONFIG_ARCH_SUPPORTS_LTO_CLANG=y
CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y
CONFIG_HAS_LTO_CLANG=y
# CONFIG_LTO_NONE is not set
CONFIG_LTO_CLANG_FULL=y
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_ARCH_SUPPORTS_CFI_CLANG=y
# CONFIG_CFI_CLANG is not set

う〜ん、Full LTO でビルドされたっぽく見えますね。

項目ビルド時間イメージサイズ
None LTO(-O2)46min70MB
ThinLTO(-O2)48min72.9MB
ThinLTO(-O3)49min73.8MB
Full LTO(-O3)57min77.8MB

そしてなぜかまた出来上がったカーネルのイメージサイズが増えているんですよね。これも謎です。

ThinLTO(-O3) の結果

Full LTO(-O3) の結果

ThinLTO(-O3) の結果

Full LTO(-O3) の結果

ベンチマーク結果は若干向上しているようです。 

そして気になる体感での変化なのですが、なんかサクサク感が向上した気がします。

 

正しく LTO が適用されているのかだいぶ疑問が残りますが、ワタシの環境ではこれが正しい姿なのかもしれません。次にまた Linux kernel のアップデートが配信された時は Full LTO でカスタムビルドしてみようかと思います。