OSDN Git Service

2013.10.24
[uclinux-h8/uClinux-dist.git] / user / oprofile / TODO
1 This is an (incomplete) list of some of the stuff we want to look at doing.
2
3 If you're interested in hacking on any of these, please contact the list first
4 for some pointers and/or read HACKING and doc/CodingStyle.
5
6 1.0 release
7 -----------
8
9 (this is a minimal selection of stuff I think we need)
10
11  o amd64 32 bit build needs a sys32_lookup_dcookie() translator in the
12    kernel
13  o decide on -m tgid semantics for anon regions
14  o if ev67 is not fixed, back it out
15  o lapic : module should says "didn't find apic" if needed, FAQ and doc should
16   speak a bit about lapic kernel option on x86 and recent kernel
17  o see the big comment in db_insert.c, it's possible to allow unlimited
18    amount of samples with a very minor change in libdb.
19
20 Later
21 -----
22
23  o remove 2.95/2.2 support so we can use boost multi index container in
24    symbol/sample container
25  o consider if we can improve anon mapping growing support
26
27 <movement> [moz@lambent pp]$ ./opreport -lf lib-image:/lib/tls/libc-2.3.2.so /bin/bash | grep vfprintf
28 <movement> 14        0.1301  6         0.0102  /lib/tls/libc-2.3.2.so   vfprintf
29 <movement> [moz@lambent pp]$ ./opreport -lf lib-image:/lib/tls/libc-2.3.2.so /usr/bin/vim | grep vfprintf
30 <movement> 176       2.0927  349       1.2552  /lib/tls/libc-2.3.2.so   vfprintf
31 <movement> [moz@lambent pp]$ ./opreport -lf lib-image:/lib/tls/libc-2.3.2.so { image:/bin/bash } { image:/usr/bin/vim } | grep vfprintf
32 <movement> 176      10.9657  +++       349       7.8888  +++       vfprintf
33 <movement> 14       ---      ---       6        ---      ---       vfprintf
34 <movement> it seems them as two separate symbols
35 <movement> but can we remove the app_name from rough_less and still be able to walk the two lists?
36 <movement> even if we could, it would still go wrong when we're profiling multiple apps
37
38  o Java stuff??
39  o with opreport -c I can get "warning: /no-vmlinux could not be found.".
40    Should be smarter ?
41  o opreport -c gives weird output for an image with no symbols:
42
43     samples  %        symbol name
44   15965    100.000  (no symbols)
45 253      100.000  (no symbols)
46   15965    98.4400  (no symbols)
47   253       1.5600  (no symbols) [self]
48
49  o consider tagging opreport -c entries with a number like gprof
50  o --details for opreport -c, or diff??
51  o should [self] entries be ommitted if 0 ??
52  o stress test opreport -c: compile a Big Application w/o frame pointer and look
53    how driver and opreport -c react.
54  o oparchive could fix up {kern} paths with -p (what about diff between
55    archive and current though?)
56  o can say more in opcontrol --status
57  o consider a sort option for diff %
58  o opannotate is silent about symbols missing debug info
59  o opcontrol --reset should avoid to reload the module if it's unloaded
60  o oprofiled.log now contains various statistics about lost sample etc. from
61   the driver. Post profile tools must parse that and warn eventually, warning
62   must include a proposed work around. User need this: if nothing seems wrong
63   people are unlikely to get a look in oprofiled.log (I ran oprofile on 2.6.1
64   2 weeks before noticing at 30000 I lost a lot of samples, the profile seemed
65   ok du to the randomization of lost samples). As developper we need that too,
66   actually we have no clear idea of the behavior on different arch, NUMA etc.
67   Not perfect because if the profiler is running the oprofiled.log will show
68   those warning only after the first  alarm signal, I think we must dump the
69   statistics information after each opcontrol --dump to avoid that.
70  o odb_insert() can fail on ftruncate or mremap() in db_manage.c but we don't
71   try to recover gracefully.
72  o output column shortname headers for opreport -l
73  o is relative_to_absolute_path guaranteeing a trailing '/' documented ?
74  o move oprofiled.log to OP_SAMPLE_DIR/current ?
75  o pp tools must handle samples count overflow (marked as (unsigned)-1)
76  o the way we show kernel modules in 2.5 is not very obvious - "/oprofile"
77  o oparchive will be more usefull with a --root= options to allow profiling
78   on a small box, nfs mount / to another box and transfer sample file and
79   binary on a bigger box for analysis. There is also a problem in oparchive
80   you can use session: to get the right path to samples files but oprofiled.log
81   and abi files path are hardcoded to /var/lib/oprofile.
82  o callgraph patch: better way to skip ignored backtrace ?
83  o lib-image: and image: behavior depend on --separate=, if --separate=library
84   opreport "lib-image:*libc*" --merge=lib works but not
85   opreport "image:*libc*" --merge=lib whilst the behavior is reversed if
86   --separate==none. Must we take care ?
87  o dependencies between profile_container.h symbol_container.h and
88   sample_container.h become more and more ugly, I needed to include them
89   in a specific order in some source (still true??)
90  o add event aliases for common things like icache misses, we must start to 
91   think about metrics including simple like event alias mapped to two or more
92   events and intepreted specially by user space tools like using the ratio
93   of samples; more tricky will be to select an event used as call count (no
94   cg on it) and  used to emulate the call count field in gprof. I think this is
95   a after 1.0 thing but event aliases must be specified in a way allowing such
96   extension
97  o do we need an opreport like opreport -c (showing caller/callee at binary
98   boundary not symbols) ?
99  o we should notice an opcontrol config change (--separate etc.) and
100    auto-restart the daemon if necessary (Run)
101  o we can add lots more unit tests yet
102  o Itanium event constraints are not implemented
103  o GUI still has a physical-counter interface, should have a general one
104    like opcontrol --event
105  o I think we should have the ability to have *fixed* width headers, e.g. :
106
107 vma      samples  cum. samples  %           cum. %     symbol name             image name              app name
108 0804c350 64582    64582         35.0757     35.0757    odb_insert              /usr/loc...in/oprofiled /usr/local/oprofile-pp/bin/oprofiled
109
110   Note the ellipsis
111  o should we make the sighup handler re-read counter config and re-start profiling too ?
112  o improve --smart-demangle
113         o allow user to add it's own pattern in user.pat, document it.
114         o hard code ${typename} regular definition to remove all current limitations (difficult, perhaps after 1.0 ?).
115  o oprof_start dialog size is too small initially
116  o i18n. We need a good formatter, and also remember format_percent()
117  o opannotate --source --output-dir=~moz/op/ /usr/bin/oprofiled
118    will fail because the ~ is not expanded (no space around it) (popt bug I say)
119  o cpu names instead of numbers in 2.4 module/ ?
120  o remove 1 and 2 magic numbers for oprof_ready
121  o adapt Anton's patch for handling non-symbolled libraries ? (nowaday C++
122   anon namespace symbol are static, 3.4 iirc, so with recent distro we are
123   more likely to get problems with a "fallback to dynamic symbols" approch)
124  o use standard C integer type <stdint.h> int32_t int16_t etc.
125  o event multiplexing for real
126  o randomizing of reset value
127  o XML output
128  o profile the NMI handler code
129  o opannotate : I added this to the doc about difference between nr samples
130   credited to a source function and total number of samples for this function:
131    "The missing samples are not lost, they will be credited to another source
132     location where the inlined function is defined. The inlined function will
133     be credited from multiple call site and merged in one place in the
134    annotated source file so there is no way to see from what call site are
135    coming the samples for an inlined function."
136   I think we can work around this: output multiple instances of inlined
137   function like :
138   inline foo() { foo: total 1500 30.00 ...
139   ... annotated source from all call site 
140   inline foo() { foo (call site bar()): total 500 10.00
141   .. annotated source from call site bar() etc.
142   what about template..., can we do/must we do something like that
143   template <class T> eat_cpu() and do a similar things, merging and annotating
144   all instantation then annotating for each distinct instantation, this will
145   break our "keep the source line number in annotated source file identical to
146   the original source"
147
148 Documentation
149 -------------
150
151  o the docs should mention the default event for each arch somewhere
152  o more discussion of problematic code needs to go in the "interpreting" section. 
153  o document gcc 2.95 and linenr info problems especially for inline functions
154  o finish the internals manual
155
156 General checks to make
157 ----------------------
158  
159  o rgrep FIXME
160  o valgrind (--show-reachable=yes --leak-check=yes)
161  o audit to track unnecessary include <>
162  o gcc 3.0/3.x compile
163  o Qt2/3 check, no Qt check
164  o verify builds (modversions, kernel versions, athlon etc.). I have the
165   necessary stuff to check kernel versions/configurations on PIII core (Phil)
166  o use nm and a little script to track unused function
167  o test it to hell and back
168  o compile all C++ programs with STL_port and test them (gcc 3.4 contain a
169    debug mode too but std::string iterator are not checked)
170  o There is probably place of post profile tools where looking at errno will give better error messages.
171