(追記 2017-10-02 01:28:42 +0900) Xcode 9 からは以下のように計測に失敗するようです。解決策が見つかるまでは Xcode 8.3 を使うか、Instruments.app で直接計測する必要がありそうです。
$ iprofiler -timeprofiler ./a.out iprofiler error: DTPerformanceSession: Authorization failure.
macOS では、ターミナルから iprofiler を経由してコマンドを実行することでパフォーマンスを計測することができる。
$ iprofiler -timeprofiler ./a.out iprofiler: Preparing recording resources iprofiler: Profiling process 66908 (a) for 10 seconds iprofiler: Target pid has died. Ending recording. iprofiler: Saving session... iprofiler: Session saved at /Users/watson/tmp/a.dtps
実行すると a.dtps というファイルができるので、ターミナルで open a.dtps と実行するか Instruments.app で開く。
Ruby のパフォーマンスを計測する場合には以下のように実行する。最初にテスト用のコードを用意しておく。
$hash1 = {}
1000.times { |i| $hash1[i.to_s] = i }
$hash2 = {}
1000.times { |i| $hash2[(i*2).to_s] = i*2 }
5000000.times do
$hash1 == $hash2
end
$ iprofiler -timeprofiler /usr/bin/ruby bench.rb iprofiler: Preparing recording resources iprofiler: Profiling process 67727 (ruby) for 10 seconds iprofiler: Target pid has died. Ending recording. iprofiler: Saving session... iprofiler: Session saved at /Users/watson/tmp/ruby.dtps
どうやら実行ファイルを /usr/bin/ruby のように絶対パスで指定しないとエラーになるようだ。
$ iprofiler -timeprofiler ruby bench.rb iprofiler error: 'ruby' cannot be launched
計測結果は以下のような感じで表示されるが、シンボルが見つからないものはアドレス番地が表示されるだけ。

Ruby のソースコードをダウンロードして自前でビルドするとずいぶん見栄えが良くなる。
$ iprofiler -timeprofiler ./miniruby ~/tmp/bench.rb

関数名部分をクリックすると、ソースコードを見ながらどの部分が実行に時間がかかっているかわかる。

以下のアイコンをクリックすると表示を切り替えることができる。

アセンブリも表示すると以下のようになる。
