この記事を読むのに必要な時間:およそ 0.5 分
10月29日にリリースされたFedora 31で行われた大きなアップデートのひとつに,Python 2を完全に削除し,PythonコマンドをPython 3にスイッチしたことが挙げられる。そして2020年春のリリースとなる「Fedora 32」では,Pythonのパフォーマンスをさらに向上させるための変更が実施されることになる。
- Changes/PythonStaticSpeedup - Fedora Project Wiki
これまでFedoraではPython 3パッケージをコンパイルする際には共有ライブラリである「libpython3.x.so」を使用しており,最終的なバイナリは/usr/bin/python3.xに動的にリンクさせていた。だが,libpython3.x.soのかわりに静的ライブラリ「libpython3.x.a」を使ってみたところ,ワークロードによって多少差が出るものの,5%~28%もの性能向上が見られたという。またリンク時最適化(LTO)とプロファイルにもとづく最適化(PGO)においても,Python 3に静的にリンクしたほうが良い結果が出たとしている。
Python 3.8以降,C言語による拡張はデフォルトではlibpythonにリンクされなくなっており,Pythonを組み込んだアプリケーションをビルドするにはpython3-configとして用意されている--embededフラグを使う必要がある。DebianやUbuntuでは,すでに静的にリンクされたバイナリを提供しており,それとは別にlibpythonのサブパッケージを用意することで,Pythonが組み込まれたパッケージでも動作するようにしている。
Fedoraプロジェクトでも同様の変更を進めていくとしているが,現状では共有ライブラリから静的ライブラリのリプレースといった急激な変更は実施せず,libpythonのネームスペースをPythonのネームスペースと分離することにフォーカスし,最終的にはPython 3がlibpythonに依存しなくなることを目指していくとしている。この変更により,Fedora 32ではPythonベースのワークロードが最大で27%向上する見込みだ。