glthread は Mesa で OpenGL 処理をスレッド化して高速化するオプション機能ですが、このオプションを有効化すると効果が出たり逆に性能が悪化したりと、いろんな噂が飛び交う状況でした。
それがついに解消されたようです。
Mesa Fixes A Large Performance Regression For Systems Using HPET
結論としては Linux の clocksource として HPET(High Precision Event Timer) が選択されていると性能が悪化し、TSC(Timestamp Counter) が選択されていると性能が向上するということらしいです。
HPET はマザーボード上に搭載されている古いタイマー機構?で今となってはちょっとタイマーの精度が低く、TSC は CPU に内蔵されているタイマー機構のようで、HPET よりもタイマー精度が高い、ということらしいです。知りませんでした。
Mesa の人は HPET な環境でも性能が悪化しないようにロジックの修正をしているようです。
ということで、ワタシの LMDE 5 はどっちのタイマー機構を使っているのかを確認してみました。
$ cat /sys/devices/system/clocksource/clocksource0/current_clocksource tsc
お、TSC を使っていますね。
$ cat /sys/devices/system/clocksource/clocksource0/available_clocksource tsc hpet acpi_pm
ちなみこちらは選択可能なタイマー機構たちです。
また、こちらは過去に glthread の効果を確認した時の記事です。
Linux Mint で Smart Access Memory が有効になっていなかった
journalctl でシステムログを確認してみると、何段階かの判定を経て、最終的に clocksource に TSC を選択しているようでした。
$ journalctl -b 0 | grep -in clocksource: 191: kernel: clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns 229: kernel: clocksource: hpet: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 133484873504 ns 235: kernel: clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x7036c0a7264, max_idle_ns: 881590942555 ns 290: kernel: clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns 477: kernel: clocksource: Switched to clocksource tsc-early 510: kernel: clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns 774: kernel: clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x7038b2b5521, max_idle_ns: 881590892899 ns 775: kernel: clocksource: Switched to clocksource tsc
ということで、TSC が選ばれるんであれば BIOS/UEFI で HPET を無効にしてしまっても良いのではと思い立ち、変更してみました。
デフォルトでは HPET は有効化されている |
HPET の設定項目自体は目にしたことがあり「高精度タイマー」ということであれば有効化したままで良いのだろうと思っていたのですが、実はそんなに高精度ではなかったようです。
試しに無効化してみました。
GRUB メニューに縦縞が入った・・・ |
なんと、BIOS/UEFI の設定変更後に PC を再起動したところ、GRUB メニューに縦縞が入るようになってしまいました。ディスプレイ出力が iGPU だからでしょうか。
LMDE 起動後はちゃんと TSC が選択されていたし、BIOS/UEFI で無効化したはずの HPET もなんか生きてる感じでしたが、GRUB メニューが乱れてしまうので BIOS/UEFI の設定は元に戻してしまいました。