三連休パワーによって 4 時間かかると思われる Full LTO を試してみましたが、なぜか 60 分を切って終了してしまいました。
三連休だしね
前回のお話はこちらです。
思っていたほど 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) | 46min | 70MB |
ThinLTO(-O2) | 48min | 72.9MB |
ThinLTO(-O3) | 49min | 73.8MB |
Full LTO(-O3) | 57min | 77.8MB |
そしてなぜかまた出来上がったカーネルのイメージサイズが増えているんですよね。これも謎です。
![]() |
ThinLTO(-O3) の結果 |
![]() |
Full LTO(-O3) の結果 |
![]() |
ThinLTO(-O3) の結果 |
![]() |
Full LTO(-O3) の結果 |
ベンチマーク結果は若干向上しているようです。
そして気になる体感での変化なのですが、なんかサクサク感が向上した気がします。
正しく LTO が適用されているのかだいぶ疑問が残りますが、ワタシの環境ではこれが正しい姿なのかもしれません。次にまた Linux kernel のアップデートが配信された時は Full LTO でカスタムビルドしてみようかと思います。