Linuxバイナリを最適化して性能を向上させる「BOLT」、Facebookがオープンソースで公開。言語やコンパイラに依存せず高速化

2018年6月21日

Facebookは、Linuxバイナリの内部配置を最適化することによりCPUのキャッシュ効率などを向上させ、実行速度を改善する「BOLT」をオープンソースで公開しました。

BOLTは「Binary optimization and layout tool」の略とされています(もしかしたら、より速く走るという意味でウサイン・ボルト氏にかけているのかもしれません)。

BOLTは言語やコンパイラに依存せず、ソースコードも不要

BOLTのおもな効果は、Linuxバイナリの実行状況をperfコマンドで取得し、高頻度で実行されている部分などを判別した上で、そうした部分がCPUキャッシュにヒットしやすいようにバイナリの内部配置を改善することなどで実行速度を向上させることと説明されています。

そして最大の特徴は、どのようなプログラミング言語やコンパイラ、リンカが使われていても対応できるという点です。従来の最適化ツールはコンパイラレベルで行われるために言語に依存したりしていましたが、BOLTはそうした依存性がありません。

バイナリの動作を直接観察し、その結果をもってバイナリを直接操作するため、ソースコードも不要です。つまり、既存のアプリケーションやバイナリだけが提供される商用アプリケーションにさえ適用可能です。(追記 6/21 11:00 最適化にリンカの操作が求められるので、上記の表現を削除します。お詫びして訂正します)

BOLT fig1

BOLTを紹介したFacebookの記事「Accelerate large-scale applications with BOLT | Engineering Blog | Facebook Code」から、その動作内容の一部を引用します。

In order for BOLT to perform a new code layout for an application, it has to reconstruct the control flow graph for the code. The task is similar to de-compilation, except we only have to find high-level constructs, such as branches with all possible source and destinations, and loops. We don’t have to perform other de-compilation tasks, such as local variables detection.

BOLTがアプリケーションのために新しいコードレイアウトを実現するためには、コードのコントロールフローグラフを再構築しなければならない。この作業はデコンパイルに似ているが、ここでは分岐の開始と行き先やループといった高レベルの構造だけを見つければいい点が異なる。

Internally, the application is represented as a set of functions operating on a set of data. We designed our own internal representation, which uses LLVM’s MCInst format for instructions.

内部的には、アプリケーションは一連のデータ上にある一連の機能操作として表現される。われわれは独自の内部表現を用いており、これはLLVMの命令用MCInstフォーマットとしている。

下記はこの記事中で示されたグラフ。BOLTによって処理されたバイナリは、頻繁に実行される部分が集中していることが分かります。

BOLT fig2

FacebookはBOLTを用いて同社のアプリケーション実行環境であるHHVMを処理したところ、実行状況によって度合いが異なるものの、おおむね2パーセントから15パーセント程度の性能向上が見られたとのことです。

参考

あわせて読みたい

プログラミング言語 Facebook




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本