Linux上での計算系プログラムの性能計測のための知識とツールまとめ
アプリケーションの性能最適化ツール等のまとめとリンク集です.随時更新していきたいと思っています.
私の専門分野の関係上,計算をガリガリするプログラムを対象としたものが多く,通信やWebサーバーのチューニング系は少なめです.
TL;DR(時間のない人へ)
とりあえずこの2つだけ嫁
Velocity 2015 linux perf tools
Linux Performance Profiling and Monitoring
まとめ・ノウハウ系資料
システムのパフォーマンスを改善する上で,どのコマンド/ツールをどう使えばよいか, どのようなアプローチが有効か,などの説明をしているページや動画等をまとめています.
Brendan Gregg氏の資料
Brendan Gregg氏は,perf-tools,やFlame Graphというツールの開発者であり,Netflixのエンジニアです.性能測定関係の情報を探していると,かならずGregg氏の資料にぶつかります.
- Linux Performance Analysis: New Tools and Old Secrets
- USENIX/LISA'14 というカンファレンスで発表された資料と講演ビデオへのリンク
- The Netflix Tech Blog: Linux Performance Analysis in 60,000 Milliseconds
- いろんなツールのまとめです.Netflix社のブログですが,書いているのはGregg氏
- Velocity 2015 linux perf tools
- どのように性能チューニングを進めていけばいいのか,という方法論が述べられ,その後に各ツールの使い方が述べられていきます.すさまじい数のツールの紹介
- Linux Performance
- Gregg氏自身による資料のまとめとポインタ
4つ目のページには,OS(Linux)の構成要素と対応する計測ツールが図にまとめられています(下図は縮小したもの).これを見ればこのエントリいらないんじゃないかな(提案
その他
- 書籍
- Performance Tuning Guide
- Redhat社のマニュアル.英語だし量が多いので気合が必要
- Performance Tuning Guide
- Redhat社のマニュアル第二弾
- Linux Performance and Tuning Guidelines (PDF, 約150ページ)
- Lenovo(旧IBM)の資料で,Linuxの仕組みの解説からチューニングの方法まで,網羅的に書かれたドキュメントです
- Extreme Linux Performance Monitoring and Tuning
- 性能を阻害する要因にはどのようなものがあるのか,Linuxのプロセス管理の方法の整理.
vmstat
,mpstat
,top
,ps
などのコマンドの出力をどう解釈するか.
- 性能を阻害する要因にはどのようなものがあるのか,Linuxのプロセス管理の方法の整理.
- Measuring Execution Time and Real-time Performance: Part 1 | Dr Dobb's
- 組み込み・リアルタイムシステムを対象とした性能計測.計測に使う関数の正確度(accuracy)解像度(Resolution)の話,何を計測するためにどのツールを使うべきか.
- キーワード:timeコマンド,gprof,clock(),
- 大きなテキストファイルをawkで処理するときにcatで投げ込むと速い理由 - ablog
- 続編→ ”私の環境で”大きなテキストファイルをawkで処理するときにcatで投げ込むと速い理由 - ablog
- 続続編→ プロセスのランキュー待ち時間とI/O待ち時間を調べる - ablog
awk file
に比べてcat file|awk
の方が速いという現象が発生した際の原因追跡をされた記事です.データがパイプによって渡されていることによって,間にバッファが作られ,catのIOとawkの計算の間でオーバーラップが行われるので速くなるのでは?という仮説をもとに検証されています.- 言及されているツール:/proc/sys/vm, strace, perf, Flame Graphs, top, taskset,
- How profilers lie: the cases of gprof and KCachegrind
- プロファイラというものは,常に正しい測定結果を返すわけではありません.gprofなどのプロファイラツールが,どのような時になぜ間違うのかを説明しています.
- キーワード:callgrind, cachegrind, gprof
- Linux Performance Profiling and Monitoring
- 大量のコマンドの使い方が図や用例と主に紹介.おすすめ.
- キーワード: Sysstat, dstat, nistat, /proc, sar, sadc, top, htop, iotop, iftop, perf_events, ftrace, perf-tools, Flame Graphs
- c++ - How to determine CPU and memory consumption from inside a process? - Stack Overflow
- メモリの使用量をCプログラムから取得する方法がWindows, Linux, Macごとにまとめられています.
背景知識・前提知識・お勉強編(用語がわからない人へ)
- Latency Numbers Every Programmer Should Know · GitHub
- What every programmer should know about memory :有名論文.
- 東大の田浦先生のOSの授業資料
- 「オペレーティングシステム論」の講義資料・ノートPDF。OSのプロセス管理やメモリ管理,ファイルシステムを勉強 - 主に言語とシステム開発に関して
- OSの基礎について言及した本が何冊か:
- Help! Linux ate my RAM!
- Linux上で,「used」となっているメモリの意味.続きのページでは,実際にC言語でプログラムを書いて挙動を観察する実験.
- キーワード:free, /proc/sys/vm
個別コマンド・ツール編
上記「ノウハウ編」で登場したコマンドの個別の使い方や結果の解釈の仕方などを説明したページへのリンクを集めました.おおまかに,高レベル(OSレベル)→低レベル(CPU命令レベル)の順に並んでいます.リンクがないところは書いてる途中ですが,個別のツールについてはググればすぐに資料が見つかるので不要かもしれません.
- Broken Linux Performance Tools 2016
- たびたび登場するBrendan Greggさんの資料.各ツールの落とし穴.
- キーワード:load averageの意味,top,free,vmstat,netstat,cachestat,perf,perf_events, tcpdump, valgrind, /proc/stat の解釈の仕方など.
- free
- ps
- Virtual Threads: Understanding memory usage on Linux
- KEditというアプリケーション(KDEのメモ帳)が25MBもメモリを食っている(ように見える)のはなぜか,という話を題材に,psが表示する数値の意味を説明しています.
- Virtual Threads: Understanding memory usage on Linux
- vmstat
- /proc
- pidstat
- top/htop
- TAU, Vampir Trace, Open|Speedshop, scalasca (スパコン向け性能解析ツール)
- oprofile
- google-perftools
- perf_tools
- Flame Graph
- Valgrind / cachegrind
- RDTSC命令
- PAPI