2015-07-08
funcgraph で Linux カーネル内のボトルネックをミクロに追跡する
perf + Flame Graphs で Linux カーネル内のボトルネックを特定する - ablog
で Linux カーネル内のボトルネックをマクロに追跡する方法を紹介しましたが*1、
システムコールインターフェースとカーネルのブロックレイヤーの中間(ファイルシステムレイヤーなど)で詰まっていると考えられます*3。
このようなケースで、1回のシステムコール発行の所要時間の内訳*4をミクロに追跡には Brendan Gregg の funcgraph が便利です*5。
実行結果
# ./funcgraph -Htp 4511 vfs_write Tracing "vfs_write" for PID 4511... Ctrl-C to end. # tracer: function_graph # # TIME CPU DURATION FUNCTION CALLS # | | | | | | | | 935.579600 | 3) | vfs_write() { 935.579602 | 3) | rw_verify_area() { 935.579602 | 3) | security_file_permission() { 935.579602 | 3) 0.085 us | cap_file_permission(); 935.579603 | 3) 0.810 us | } 935.579603 | 3) 1.367 us | } 935.579604 | 3) | do_sync_write() { 935.579604 | 3) | pipe_write() { 935.579604 | 3) | mutex_lock() { 935.579604 | 3) 0.044 us | _cond_resched(); 935.579605 | 3) 0.434 us | } 935.579605 | 3) 0.159 us | pipe_iov_copy_from_user(); 935.579606 | 3) 0.097 us | mutex_unlock(); 935.579606 | 3) | __wake_up_sync_key() { 935.579606 | 3) 0.096 us | _raw_spin_lock_irqsave(); 935.579607 | 3) 0.062 us | __wake_up_common(); 935.579607 | 3) 0.070 us | _raw_spin_unlock_irqrestore(); 935.579608 | 3) 1.441 us | } 935.579608 | 3) 0.133 us | kill_fasync(); 935.579609 | 3) | file_update_time() { 935.579609 | 3) | current_fs_time() { 935.579609 | 3) 0.046 us | current_kernel_time(); 935.579610 | 3) 0.048 us | timespec_trunc(); 935.579610 | 3) 0.881 us | } 935.579610 | 3) | mnt_want_write_file() { 935.579611 | 3) 0.257 us | mnt_want_write(); 935.579611 | 3) 0.764 us | } 935.579611 | 3) 0.225 us | __mark_inode_dirty(); 935.579612 | 3) 0.044 us | mnt_drop_write(); 935.579612 | 3) 3.495 us | } 935.579613 | 3) 8.489 us | } 935.579613 | 3) 9.035 us | } 935.579613 | 3) 0.055 us | __fsnotify_parent(); 935.579613 | 3) | fsnotify() { 935.579614 | 3) 0.164 us | __srcu_read_lock(); 935.579614 | 3) 0.044 us | __srcu_read_unlock(); 935.579615 | 3) 1.253 us | } 935.579615 | 3) + 13.624 us | }
手順
# curl -L -O https://raw.githubusercontent.com/brendangregg/perf-tools/master/kernel/funcgraph # chmod u+x funcgraph # mount -t debugfs debugfs /sys/kernel/debug # ps -ef|grep [c]hrome # ./funcgraph -Htp 4511 vfs_write
参考
- perf-tools/funcgraph at master ? brendangregg/perf-tools ? GitHub
- Ftrace: The hidden light switch [LWN.net]
- Ftrace と Systrace - steps to phantasien
<iframe src="//www.slideshare.net/slideshow/embed_code/key/iHwlnb2xUcp0Tw" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe>
関連
トラックバック - http://d.hatena.ne.jp/yohei-a/20150708/1436312890
リンク元
- 144 https://www.google.co.jp/
- 56 http://www.google.co.jp/url?url=http://d.hatena.ne.jp/yohei-a/20090630/1246326058&rct=j&frm=1&q=&esrc=s&sa=U&ved=0CBQQFjAAahUKEwj02KXCmsrGAhUDXqYKHV5vAOw&usg=AFQjCNGcP7BfWE55m1XRz_1N0qY7s5uX2g
- 44 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CB0QFjAA&url=http://d.hatena.ne.jp/yohei-a/20100329/1269847202&ei=TGacVZKbM9jr8AWUg4LYCQ&usg=AFQjCNHaprxELPhKnSB4H9bTVmqFYNuL_g&bvm=bv.96952980,d.dGc
- 40 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCQQFjAB&url=http://d.hatena.ne.jp/yohei-a/20100327/1269654504&ei=kGacVffOB8an0gTngbSwDQ&usg=AFQjCNEN6aXyLXmtm_qLruG8N67uRsoTqQ&bvm=bv.96952980,d.dGo
- 35 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&frm=1&source=web&cd=2&sqi=2&ved=0CCUQFjAB&url=http://d.hatena.ne.jp/yohei-a/20100310/1268239169&ei=TWecVeDoJ8qr0ASIlofIAg&usg=AFQjCNE-tEYe2CfZEmkXFORh1nB3PecnmQ&bvm=bv.96952980,d.dGo
- 15 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0CCsQFjAC&url=http://d.hatena.ne.jp/yohei-a/20100226/1267163682&ei=gGScVcyXJMOz0ASlk6HYAg&usg=AFQjCNFWEdYTAOBlOAYmm4G3akcR1Pna3g&bvm=bv.96952980,d.dGo
- 13 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&ved=0CC4QFjAD&url=http://d.hatena.ne.jp/yohei-a/20150706/1436208007&ei=-mWcVb-kIYOJ8QWh4YjYCQ&usg=AFQjCNERUnbCMT5MrYFPQUjp6QQ4ByUI6Q&bvm=bv.96952980,d.dGc
- 11 http://t.co/4Ohd6P8jin
- 9 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&ved=0CDYQFjAE&url=http://d.hatena.ne.jp/yohei-a/20090402/1238684770&ei=pWecVbHXIeOxmwXGsbaYCw&usg=AFQjCNFwdCXtBJwUTdWDG-DFGwtjBjPE-g
- 5 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=7&ved=0CEAQFjAG&url=http://d.hatena.ne.jp/yohei-a/20111206/1323171298&ei=7necVeekOsKy0gS73Y-QDQ&usg=AFQjCNH-FBQpL4cwVJDZPukg_j8mz8k8Ng&sig2=UubrsaZkuvwsW4TaeQ41Zw&bvm=bv.96952980,d