カスタム検索
表示順:
Relevance
Relevance
Date
ウェブ
 
 
 

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

2018年6月21日


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

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

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

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

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

バイナリの動作を直接観察し、その結果をもってバイナリを直接操作するため、ソースコードも不要です。つまり、既存のアプリケーションやバイナリだけが提供される商用アプリケーションにさえ適用可能です。

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パーセント程度の性能向上が見られたとのことです。

参考

follow us in feedly


≪前の記事
機械学習を高速処理するGoogleの「Cloud TPU」サービス、7割引きの利用料で使えるプリエンプティブに対応


カテゴリ



Blogger in Chief

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

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

人気記事ランキング

  1. 「WebDriver」がW3Cの勧告に到達。Webブラウザのテスト自動化などを実現
  2. マイクロソフトの実験的プロダクト「Blazor」、WebAssemblyで.NETランタイムを実装。WebブラウザでC#など.NETアセンブリをそのまま実行可能に
  3. [速報]次期Docker for Win/Mac、GUIの数クリックで簡単にアプリケーションのコンテナ化と実行が可能に。DockerCon 2018
  4. [速報]Docker EEでAWS、Azure、GCEのKubernetesを一元管理。クラウド間でアプリケーションの移動や複製、ロードバランスなど実現。DockerCon 2018
  5. Google CloudのHTTPSロードバランサーがQUICプロトコルに対応
  6. Visual StudioがKubernetes対応。DockerfileとHelmチャートを自動生成し、Kubernetes環境へデプロイ可能に
  7. AWSとAzureのKubernetesマネージドサービスが相次いで正式サービス化。GKEを加え、大手クラウドベンダのKubernetesマネージドサービスがすべて本番利用可能に
  8. Google App Engineがスタンダード環境でNode.jsをサポート。パッチ適用は自動、カスタムドメインでのHTTPSも利用可能
  9. 来月にはJava 10が登場し、9月にはJava 11が登場予定。新しいリリースモデルを採用した今後のJava、入手方法やサポート期間はこう変わる(OpenJDKに関する追記あり)
  10. [速報]Kubernetes on Windows ServerをDocker EEでサポート。LinuxとWindows Serverのコンテナオーケストレーションを統一的に管理。DockerCon 2018


新着記事 10本


PR - Books


fig

fig

fig