Linux Daily Topics

2019年11月14日 Fedora,次バージョンでPython 3のパフォーマンス改善へ

この記事を読むのに必要な時間:およそ 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%向上する見込みだ。

著者プロフィール

階戸アキラ(かいとあきら)

起きてからまず海外ニュースサイトのハシゴをしないと1日を始められない海外ニュースウォッチャー。英語は英検準一級の資格を持ち,日本人と話すより英語圏の人のほうがウマが合う。