2023-07-19

Mesa OpenGL の glthread の結論が出たみたい

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 の設定は元に戻してしまいました。