OSDN Git Service

Merge changes from topic 'ext4_encryption_flag' am: 7ce805c97e am: 4e02dcd7d0
[android-x86/system-extras.git] / ioshark / compile-only.sh
1 #!/bin/sh
2
3 # This function just re-writes the timestamp of the strace entries to be
4 # seconds.usecs since boot. To match the timestamping of ftrace (so we can
5 # merge them later).
6 process_strace()
7 {
8     strace=$1
9     # parse in data/system/vendor and parse out /sys/devices/system/...
10     egrep '\/system\/|\/data\/|\/vendor\/' $strace | egrep -v '\/sys\/devices\/system\/' > bar
11     fgrep -v '= -1' bar > foo
12     mv foo bar
13     # begin_time is seconds since epoch
14     begin_time=`cat trace.begin`
15     # replace seconds since epoch with SECONDS SINCE BOOT in the
16     # strace files
17     awk -v begin="$begin_time" '{ printf "%f strace ", $1 - begin; $1=""; print $0}' bar > $2
18     rm bar
19 }
20
21 #
22 # This function processes the ftrace file, removing the fields that we don't care
23 # about, breaks up the ftrace file into one file per pid.
24 # Input : One single fstrace file.
25 # Output : Multiple fstrace.pid files.
26 prep_fstrace()
27 {
28     # Remove leading junk
29     fgrep android_fs_data $1 | sed 's/^.* \[.*\] //' | sed s/://g | sed s/,//g > foo
30     sed 's/android_fs_dataread_start/read/' foo > bar1
31     mv bar1 bar
32     # First column is timestamp SECONDS SINCE BOOT
33     awk '{ print $2, "ftrace", $3, $5, $7, $9, $13 }' bar > foo
34     rm bar
35     # Get all the uniq pids
36     awk '{print $7}' foo | sort | uniq > pidlist
37     for i in `cat pidlist`
38     do
39         awk -v pid=$i '{ if (pid == $7) print $0}' foo > fstrace.$i
40     done
41     rm pidlist
42     rm foo
43 }
44
45 # Merge straces and ftraces.
46 # The goal here is to catch mmap'ed IO (reads) that won't be in the
47 # strace file. The algorithm is to look for mmaps in the strace file,
48 # use the files tha are mmap'ed to search in the ftraces to pick up
49 # tracepoints from there, and merge those with the straces.
50 # The output of this function is a set of parsed_input_trace.<pid>
51 # files, that can then be compiled into .wl files
52 merge_compile()
53 {
54     for stracefile in trace.*
55     do
56         if [ $stracefile == trace.begin ] || [ $stracefile == trace.tar ];
57         then
58             continue
59         fi
60         # Get the pid from the strace filename (pid is the extension)
61         pid=${stracefile##*.}
62         process_strace $stracefile foo.$pid
63         if ! [ -s foo.$pid ]; then
64             rm foo.$pid
65             continue
66         fi
67         #
68         # If we have matching strace and ftrace files, then look for mmaps in
69         # the strace pluck the corresponding entries for the mmap (mmaped IO)
70         # from the ftrace and merge them into the strace
71         #
72         if [ -f fstrace.$pid ]; then
73             fgrep mmap foo.$pid > bar
74             if [ -s bar ]; then
75                 # Get all the unique mmap'ed filenames from the strace
76                 awk '{ print $7 }' bar | sed 's/^[^<]*<//g' | sed 's/>,//g' > mapped_files
77                 # Pluck all the lines from the ftrace corresponding to the mmaps
78                 cat /dev/null > footemp
79                 for j in `sort mapped_files | uniq`
80                 do
81                     # Merge the readpage(s) traces from the ftrace into strace
82                     # for this mmaped file.
83                     grep -w $j fstrace.$pid > foobar
84                     if [ $? == 0 ]; then
85                         sort foo.$pid foobar >> footemp
86                     fi
87                     rm foobar
88                 done
89                 rm mapped_files
90                 if [ -s footemp ]; then
91                     mv footemp parsed_input_trace.$pid
92                 else
93                     mv foo.$pid parsed_input_trace.$pid
94                 fi
95             else
96                 mv foo.$pid parsed_input_trace.$pid
97             fi
98             rm bar
99         else
100             mv foo.$pid parsed_input_trace.$pid
101         fi
102         echo compiling parsed_input_trace.$pid
103         compile_ioshark parsed_input_trace.$pid $pid.wl
104         rm parsed_input_trace.$pid
105         rm -f foo.$pid
106     done
107 }
108
109 # main() starts here
110
111 rm -f *.wl
112 rm -f parsed*
113 rm ioshark_filenames
114
115 # Pre-process the ftrace file
116 prep_fstrace fstrace
117 # Merge the ftrace file(s) with the strace files
118 merge_compile
119
120 # tar up the .wl files just created
121 tar cf wl-test.tar ioshark_filenames *.wl