Solaristic Days
ディスクIOをトレースする(2)
2012/09/29
dtrace のトレース結果と、illumos のソースブラウザをリンクさせるスクリプト。
#!/usr/bin/perl use strict; use warnings; my $indent_max = 0; my @trace; my $count = 0; while (<>) { if (/^ *[0-9]+( +)\-> ([^ ]+)/) { my $indent = length($1) / 2; $indent_max = $indent if ($indent_max < $indent); $trace[$count]{'indent'} = $indent; $trace[$count++]{'function'} = $2; } } print "<style type=\"text/css\">\n"; print "td {\n"; print "\twidth: 10%;\n"; print "}</style>\n"; print "<table align=\"left\" border=\"0\" cellpadding=\"1\" cellspacing=\"1\" width=\"800\">\n"; print "\t<tbody>\n"; my @caller; $caller[0] = $trace[0]{'function'}; for $count (0 .. $#trace ){ $caller[$trace[$count]{'indent'}] = $trace[$count]{'function'}; print "\t\t<tr>\n"; print "\t\t\t<td colspan=\"" . $trace[$count]{'indent'} . "\">\n"; print "\t\t\t\t </td>\n"; print "\t\t\t<td colspan=\"" . ($indent_max + 1 - $trace[$count]{'indent'}) . "\">\n"; print "\t\t\t\t-> <a href=\"http://src.illumos.org//source/s?defs=" . $caller[$trace[$count]{'indent'} - 1] . "&project=illumos-gate\" target=\"_blank\">" . $trace[$count]{'function'} . "</a></td>\n"; print "\t\t\t<td>\n"; print "\t\t\t\t </td>\n"; print "\t\t</tr>\n"; } print "\t</tbody>\n"; print "</table>\n";
こんな感じで使う。
# ./trace.d zfs_read -c "dd if=./test of=/dev/null" | ./trace2table.pl > zfs_read.html
0 件のコメント:
コメントを投稿
次の投稿
前の投稿
ホーム
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿