レコーディング&リプレイ
デバッグツール rr
Yoichi Yuasa
OSAKA NDS Embedded LinuxCross Online Forum #13

自己紹介
●

湯浅陽一

●

1999年よりよりLinux kernel開発に参加に参加参加●

MIPSアーキテクチャのいくつかののいくつかのCPUに参加kernelを移植移植

OSAKA NDS Embedded Linux Cross Online Forum #13

2

本日の内容の内容
●

rr概要

●

rrを移植利用する上でのポイントする上でのポイント上でのポイントでのポイント●

rrの実装(一部)

OSAKA NDS Embedded Linux Cross Online Forum #13

3

アプリケーションデバッグ手法●

printf●gdb– ブレークポイント設定– ステップ実行– core解析●

trace– strace– ltrace

OSAKA NDS Embedded Linux Cross Online Forum #13

4

rr
●

アプリケーション実行レコーディング(記録)/リプレイ(再生)ツール●

C/C++アプリケーションに参加対応●

IDEからの利用する上でのポイントも可能可能– Visual Studio Codeなど●

Intel Nehalem(初代Core iシリーズ)以降ととAMD Zen以降とを移植サポート●

AArch64(Arm 64bit)を移植実験的にサポートに参加サポート

OSAKA NDS Embedded Linux Cross Online Forum #13

5

rrの特徴●●実行記録/再生型のデバッグツールで一度実行のデバッグツールで一度実行を移植記録する上でのポイントと同じ現象を繰り返し調査可能じ現象を繰り返し調査可能現象を繰り返し調査可能を移植繰り返し調査可能り返し調査可能し調査可能調査可能
同じ現象を繰り返し調査可能等のマシンであれば記録と再生を別のマシンのマシンであれば記録と再生を別のマシン記録と再生を移植別のマシンのマシンで行うことも可能可能

OSAKA NDS Embedded Linux Cross Online Forum #13

6

rrが記録するデータ記録する上でのポイントデータ●

メモリに参加マップされたデータデータ– 実行ファイル– ライブラリ●

アクセスし調査可能たデータファイルデータ●

実行トレースデータ(イベント、システムコールの結果)OSAKA NDS Embedded Linux Cross Online Forum #13

7

デバッグに参加おける上でのポイントrr利用する上でのポイント方法
1.調査し調査可能たデータい現象を繰り返し調査可能を移植発に参加生させ記録する記録する上でのポイント2.記録し調査可能たデータ動作を再生して現象を再現を移植再生し調査可能て現象を再現現象を繰り返し調査可能を移植再現
3.gdbを移植利用する上でのポイントし調査可能て現象を再現調査

OSAKA NDS Embedded Linux Cross Online Forum #13

8

rrメイン機能●

rr record <app> <app args>– <app>の実行を移植記録●

rr replay– 記録されたデータ<app>の実行を移植再生●

rr pack– 記録を移植移動できる上でのポイント形式にまとめるに参加まとめる上でのポイント
OSAKA NDS Embedded Linux Cross Online Forum #13

9

rr record$ rr record ./testapp
rr: Saving execution to trace directory `/home/foo/.local/share/rr/testapp-0'.
$ ls ~/.local/share/rr/testapp-0/
cloned_data_791_1

dataevents

mmap_hardlink_3_testapp

mmaps

OSAKA NDS Embedded Linux Cross Online Forum #13

tasks

version10

rr replay$ rr replay
GNU gdb (Ubuntu 8.1.1-0ubuntu1) 8.1.1…
0x00007f2ee5441090 in _start () from /lib64/ld-linux-x86-64.so.2(rr) break main
Breakpoint 1 at 0x5604c9bc579e: file testapp.c, line 30.
(rr) cContinuing.
Breakpoint 1, main (argc=1, argv=0x7ffec227b978) at testapp.c:30
30 {(rr)

OSAKA NDS Embedded Linux Cross Online Forum #13

11

rr pack$ rr packrr: Packed trace directory `/home/foo/.local/share/rr/testapp-0'.
$ ls ~/.local/share/rr/testapp-0
cloned_data_791_1 mmap_pack_0_libdl-2.27.so mmap_pack_3_libpthread-2.27.so mmaps
data

mmap_pack_1_libc-2.27.so

mmap_pack_4_ld-2.27.sotasks

eventsmmap_pack_2_testapp

mmap_pack_5_librrpreload.soversion

OSAKA NDS Embedded Linux Cross Online Forum #1312

rrの欠点●

複数スレッド同時実行の記録はできないスレッド同時実行の記録はできない同じ現象を繰り返し調査可能時実行の記録はできない– 同じ現象を繰り返し調査可能時実行の状況まで記録まで記録/再生する上でのポイントのは難しいためし調査可能いたデータめ– 複数スレッド同時実行の記録はできないスレッド同時実行の記録はできないのアプリケーションも可能すべて現象を再現実行を移植1CPUに参加制限して記録し調査可能て現象を再現記録(2スレッド同時実行の記録はできない同じ現象を繰り返し調査可能時動作を再生して現象を再現はできない)●

記録し調査可能て現象を再現いないプロセス(別のマシンのアプリケーション)との共有メモリなどによる競合は回避する必要があるメモリなどに参加よる上でのポイント競合は回避する必要があるは回避する必要があるする上でのポイント必要が記録するデータある上でのポイント– PulseAudio(socket転送に切り替えて対応に参加切り替えて対応り替えて対応えて現象を再現対応)– X(socket転送に切り替えて対応に参加切り替えて対応り替えて対応えて現象を再現対応)– vDSO(virtual dynamic shared object)(無効にして対応に参加し調査可能て現象を再現対応)●

記録する上でのポイントことで実行に参加時間がかかるが記録するデータかかる上でのポイント– 2倍弱〜(アプリケーションの動作を再生して現象を再現やファイルシステムの状況によるファイルシステムの状況まで記録に参加よる上でのポイント)– 再生は記録より実行時間がかかるはずっと短いい(システムコールを移植実行し調査可能ないので普通の実行より早いこともあるの実行より早いこともあるいことも可能ある上でのポイント)OSAKA NDS Embedded Linux Cross Online Forum #13

13

rrの実装(システムコール部分)●

システムコールを移植記録する上でのポイントたデータめに参加主にに参加kernelの3つの機能を移植利用する上でのポイント– ptrace– seccomp-bpf– perf event

OSAKA NDS Embedded Linux Cross Online Forum #13

14

ptraceの利用する上でのポイント方法●

補助的にサポートなシステムコールの検出– 始めてのアドレスからのシステムコールの検出めて現象を再現のアド同時実行の記録はできないレスからのシステムコールの検出– 静的にサポート解析では見つけられないシステムコールを検出するつけられないシステムコールを移植検出する上でのポイント

たデータめに参加利用する上でのポイント(動的にサポートな実行コード同時実行の記録はできない変更などなど)– ptraceを移植利用する上でのポイントする上でのポイントことに参加よる上でのポイントコンテキストスイッチのコストが記録するデータ大きいため利用は最小限に留めるきいたデータめ利用する上でのポイントは最小限して記録に参加留めるめる上でのポイント
OSAKA NDS Embedded Linux Cross Online Forum #13

15

ptraceの代替えて対応え●独自インターセプションライブラリの利用する上でのポイント– システムコール命令を置き換えて独自ライブラリにジャンプを移植置き換えて独自ライブラリにジャンプき換えて独自ライブラリにジャンプえて現象を再現独自ライブラリに参加ジャのいくつかのンプ– システムコール呼び出し前のデータを保存してからシステムび出し前のデータを保存してからシステム出し調査可能前のデータを保存してからシステムのデータを移植保存してからシステムし調査可能て現象を再現からシステムコールを移植呼び出し前のデータを保存してからシステムび出し前のデータを保存してからシステム出し調査可能– システムコールから戻ってきたら結果データを保存して元のって現象を再現きたデータら結果データを移植保存してからシステムし調査可能て現象を再現元ののコード同時実行の記録はできないに参加戻ってきたら結果データを保存して元のる上でのポイント

OSAKA NDS Embedded Linux Cross Online Forum #13

16

アプリケーション
インターセプションライブラリ

system calljump

system call datasystem callkernelOSAKA NDS Embedded Linux Cross Online Forum #13

17

seccomp-bpf●

Secure Computing Berkeley Packet Filter– システムコールの実行を移植選択的にサポートに参加制御●

インターセプションライブラリとそれ以外ででptraceの制御を移植切り替えて対応り替えて対応え– インターセプションライブラリのシステムコールはトラップせ記録するずスルー– それ以外でのシステムコールはトラップ– トラップし調査可能たデータシステムコールは内容に参加応じ現象を繰り返し調査可能て現象を再現処理を追加を移植追加

OSAKA NDS Embedded Linux Cross Online Forum #13

18

perf event●●

kernel内で発に参加生し調査可能たデータイベントを移植通の実行より早いこともある知してくれる機能し調査可能て現象を再現くれる上でのポイント機能
rrは記録中のアプリケーションがシステムコールにブロックさのアプリケーションが記録するデータシステムコールに参加ブロックされたデータかを移植知してくれる機能りたデータい– トレースし調査可能て現象を再現いないアプリケーションとのシステムコールを移植介し調査可能たデータやファイルシステムの状況によるり取りでデッドロックを回避するためりでデッド同時実行の記録はできないロックを移植回避する必要があるする上でのポイントたデータめ– システムコールが記録するデータブロックされたデータら必要に参加応じ現象を繰り返し調査可能て現象を再現別のマシンのスレッド同時実行の記録はできないを移植実行する上でのポイント

OSAKA NDS Embedded Linux Cross Online Forum #13

19

まとめ●

●

●

rrの実装は複雑だが利用は簡単だが記録するデータ利用する上でのポイントは簡単
問題の現象を再現させて記録できれば何度でもの現象を繰り返し調査可能を移植再現させ記録するて現象を再現記録できれば記録と再生を別のマシン何度でも可能
再生し調査可能て現象を再現調査できる上でのポイント
AArch64も可能実験的にサポートに参加サポート

OSAKA NDS Embedded Linux Cross Online Forum #13

20

参考
●

●

●

https://rr-project.org/
https://developers.redhat.com/blog/2021/05/03/
instant-replay-debugging-c-and-c-programswith-rr
https://arxiv.org/pdf/1705.05937.pdf
実装の詳細やパフォーマンス測定などやファイルシステムの状況によるパフォーマンス測定など
OSAKA NDS Embedded Linux Cross Online Forum #13

21