この記事は、インテル® デベロッパー・ゾーンに公開されている「Doubling the Performance of OpenStack Swift with No Code Changes」(https://software.intel.com/en-us/blogs/2016/05/06/doubling-the-performance-of-openstack-swift-with-no-code-changes) の日本語参考訳です。
現在、私は主にパフォーマンスに取り組んでいます。さまざまな言語を扱うソフトウェア・エンジニアのグループを指揮していますが、クラウドおよびデータセンター分野において特定の言語の重要性が高まっています。
その 1 つが Python* です。25 年の歴史を持つこのオープンソース言語の採用が、クラウド・インフラストラクチャー・システム分野、特に OpenStack* で進んでいることに驚きを隠せません。
我々は通常、”マイクロ” ベンチマークではなく、実際の顧客のワークロードでパフォーマンスを測定します。マイクロベンチマークは、システムの特定の 1 つの関数、またはいくつかの小さなアルゴリズム (マンデルブロ集合の生成など) を実行します。多くの場合、これは実際の顧客が関心を持っていることとは異なります。これらのマイクロベンチマークは、特定の関数の最適化には適していますが、実際の顧客は、データセンターのスループットや応答時間の向上につながらない最適化には投資しないでしょう。
実際の顧客のワークロードでパフォーマンスを測定する場合、10% の向上をもたらすソフトウェア変更が見つけられたら良いほうでしょう。
100% 以上の向上を達成するには?
2016年春にオースティンで開催された OpenStack* Summit において、パートナーである SwiftStack 社と共同で、我々の最新の Python* の取り組みを紹介しました。OpenStack* コードにおいて、ソースコード変更なしで、スループットを 111% 向上という驚異的な成果を報告しました。(講演の動画はhttps://www.openstack.org/videos/video/doubling-performance-in-swift-with-no-code-changes を参照)
パフォーマンス向上の道のり
まず、OpenStack* のオブジェクト・ストレージ・プロジェクトである Swift (https://www.swiftstack.com/openstack-swift/) から取り掛かりました。Swift は、Wikipedia.org、eBay.com、pac12.com、ancestry.com など、多くの Web サイトで使用されています。例えば、ホスティング会社 ovh.com では、Swift を利用して 75 ペタバイトのストレージを管理しています。
Swift プロジェクトのベンチマークである “ssbench” を実行してみたところ、CPU 使用率が 100% 近いとき、その 70-80% が Python* で使用されていることが分かりました。また、プロセッサー・サイクルの半分が、プロセッサー・パイプラインのフロントエンドでストールに費やされていることも分かりました。
Python* のようなインタープリター言語はコードサイズが非常に大きく、これがほとんどのストールの原因です。例えば、2 つの整数の加算を行ってみたところ、ネイティブコードでは 1 命令で済むのに対し、Python* では平均 76 命令かかりました。
そこで、我々は JIT を使用してみたらどうだろうかと考えました。
いくつかの Python* JIT の中から、10 年の歴史があり、Python* 2 と 3 を幅広くサポートし、非常に高速な PyPy を選択しました。
この選択が適切であったことは、結果がすべてを示しています。スループットが 111% 向上しただけではなく、応答時間も最大 87% 向上しました。応答時間の向上は、Web ページが素早くロードされ、軽快な操作につながるため、多くの顧客にとって非常に重要です。
実際に試してみませんか?
我々は、Swift での PyPy の使用法をまとめたハウツーガイド (https://01.org/lp/documentation/pypy-enabling-guide-openstack-swift) を作成しました。実際にご自身で試してみることをお勧めします。そして、ぜひ結果をお知らせください。
将来の展望
我々は、Swift で PyPy が再度注目されれば良いと思っています。また、OpenStack* のすべてを PyPy で実行することにより概念を証明するため、現在取り組んでいます。 例えば、OpenStack* のユーザー認証プロジェクトである KeyStone では、スループットが 37% 向上しました。このことからも、コード変更なしで、PyPy に切り替えるだけで、OpenStack* 全体のパフォーマンスを向上できると考えています。
最終的には、PyPy が Python* を使用するデフォルトの方法になると信じています。我々は、これからも PyPy の取り組みを進めて行きます。将来、皆さんの役に立つ劇的な変化が見られるかもしれません。
謝辞
- John Dickinson (Swift PTL、SwiftStack、@notmyname)
- Peter Wang (インテル) およびインテルの多くのエンジニア
法務上の注意書き:
性能に関するテストに使用されるソフトウェアとワークロードは、性能がインテル® マイクロプロセッサー用に最適化されていることがあります。
SYSmark* や MobileMark* などの性能テストは、特定のコンピューター・システム、コンポーネント、ソフトウェア、操作、機能に基づいて行ったものです。結果はこれらの要因によって異なります。製品の購入を検討される場合は、他の製品と組み合わせた場合の本製品の性能など、ほかの情報や性能テストも参考にして、パフォーマンスを総合的に評価することをお勧めします。詳細については、http://www.intel.com/performance (英語) を参照してください。
システム構成:
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。
* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。