1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
|
This is an (incomplete) list of some of the stuff we want to look at doing.
If you're interested in hacking on any of these, please contact the list first
for some pointers and/or read HACKING and doc/CodingStyle.
0.8.2 release
-------------
o amd64 32 bit build needs a sys32_lookup_dcookie() translator in the
kernel
o op_bfd.cpp and separate debuginfo file: get_symbols_from_file() symbols
outside .text section get a wrong offset
o op_bfd.cpp:get_linenr() see FIXME about the use of ibfd/dbfd, needs test.
o need --callgraph in oprof_start
o with opstack I can get "warning: /no-vmlinux could not be found.".
Should be smarter ?
o opstack gives weird output for an image with no symbols:
690 100.000 27697 100.000 libkdecore.so.4.1.0 (no symbols)
690 0.9446 27697 37.9188 libkdecore.so.4.1.0 (no symbols)
4830 100.000 27697 100.000 libkdecore.so.4.1.0 (no symbols)
0 0 0 0 libkdecore.so.4.1.0 memcpy
0 0 0 0 libkdecore.so.4.1.0 __i686.get_pc_thunk.bx
0 0 0 0 libkdecore.so.4.1.0 __errno_location
0 0 0 0 libkdecore.so.4.1.0 (no symbols)
0 0 0 0 libkdecore.so.4.1.0 (no symbols)
o stress test opstack: compile a Big Application w/o frame pointer and look
how driver and opstack react.
0.9 release
-----------
o opdiff
Before 1.0 little stuff
-----------------------
o if ev67 and 2.4 x86-64 are not fixed, back them out
o TRACE_END is no longer sent by the driver, keep it a bit for compatibility
o callgraph patch: better way to skip ignored backtrace ?
o child sample count for recursive function is not a bug but a feature, it
needs documentation. (What does this refer to exactly?)
o callgraph_container.cpp: the inner loop in add() is very fragile!
o opcontrol --reset should avoid to reload the module if it's unloaded
o oprofiled.log now contains various statistics about lost sample etc. from
the driver. Post profile tools must parse that and warn eventually, warning
must include a proposed work around. User need this: if nothing seems wrong
people are unlikely to get a look in oprofiled.log (I ran oprofile on 2.6.1
2 weeks before noticing at 30000 I lost a lot of samples, the profile seemed
ok du to the randomization of lost samples). As developper we need that too,
actually we have no clear idea of the behavior on different arch, NUMA etc.
Not perfect because if the profiler is running the oprofiled.log will show
those warning only after the first alarm signal, I think we must dump the
statistics information after each opcontrol --dump to avoid that.
o libop/op_string.c is dumb (skip_ws, skip_nonws) we can't use them
to parse a file and report correct line number error because skip_ws skip
\n (so op_events.c report correct line number only if there is no empty
line in the events files)
o document OPROFILE_EVENT_FILES_DIR
o odb_insert() can fail on ftruncate or mremap() in db_manage.c but we don't
try to recover gracefully.
o output column shortname headers for opreport -l
o is relative_to_absolute_path guaranteeing a trailing '/' documented ?
o move oprofiled.log to OP_SAMPLE_DIR/current ?
o --buffer-size is useless on 2.5 without tuning of watershed
o pp tools must handle samples count overflow (marked as (unsigned)-1)
o the way we show kernel modules in 2.5 is not very obvious - "/oprofile"
Documentation
-------------
o the docs should mention the default event for each arch somewhere
o more discussion of problematic code needs to go in the "interpreting" section.
o document gcc 2.95 and linenr info problems especially for inline functions
o audit oprof_start for security + then document sudo
o finish the internals manual
General checks to make
----------------------
o rgrep FIXME
o valgrind (--show-reachable=yes --leak-check=yes)
o audit to track unnecessary include <>
o gcc 3.0/3.x compile
o Qt2/3 check, no Qt check
o verify builds (modversions, kernel versions, athlon etc.). I have the
necessary stuff to check kernel versions/configurations on PIII core (Phil)
o use nm and a little script to track unused function
o test it to hell and back
o compile all C++ programs with STL_port and test them
o There is probably place of post profile tools where looking at errno will give better error messages.
Later
-----
o zwane problem with wrong text offset showed an interesting problem: if
op_bfd.cpp get any symbol below text offset for vmlinux or a module then
profile_t::sample_range() return a pair of iterator with first > second
and we throw
o lib-image: and image: behavior depend on --separate=, if --separate=library
opreport "lib-image:*libc*" --merge=lib works but not
opreport "image:*libc*" --merge=lib whilst the behavior is reversed if
--separate==none. Must we take care ?
o depedencies between profile_container.h symbol_container.h and
sample_container.h become more and more ugly, I needed to include them
in a specific order in some source.
o add event aliases for common things like icache misses, we must start to
think about metrics including simple like event alias mapped to two or more
events and intepreted specially by user space tools like using the ratio
of samples; more tricky will be to select an event used as call count (no
cg on it) and used to emulate the call count field in gprof. I think this is
a after 1.0 thing but event aliases must be specified in a way allowing such
extension
o oparchive could do with an --exclude-dependent option
o do we need an opreport like opstack (showing caller/callee at binary
boundary not symbols) ?
o we should notice an opcontrol config change (--separate etc.) and
auto-restart the daemon if necessary (Run)
o we can add lots more unit tests yet
o remove 2.2 / gcc 2.91 support ?
o Itanium event constraints are not implemented
o side-by-side opreport output (--compare - needs UI spec) ???
o can we log samples going to anonymous mapping by using
- 2.6 one fake sample for all anonymous sample, cookie == 0 mean use this
special sample file. (cookie == -1 or -2 as magic value ?)
- 2.4 we must pass to daemon note about exec anon mapping and create one
fake samples file by anon mapping specially named like
/{root}/path/to/appli/anon_mapping-0B8000-0BA0000/...
o GUI still has a physical-counter interface, should have a general one
like opcontrol --event
o I think we should have the ability to have *fixed* width headers, e.g. :
vma samples cum. samples % cum. % symbol name image name app name
0804c350 64582 64582 35.0757 35.0757 odb_insert /usr/loc...in/oprofiled /usr/local/oprofile-pp/bin/oprofiled
Note the ellipsis
o should we make the sighup handler re-read counter config and re-start profiling too ?
o improve --smart-demangle
o allow user to add it's own pattern in user.pat, document it.
o hard code ${typename} regular definition to remove all current limitations (difficult, perhaps after 1.0 ?).
o oprof_start dialog size is too small initially
o oprof_start key movement through events doesn't change help text
o i18n. We need a good formatter, and also remember format_percent()
o opannotate --source --output-dir=~moz/op/ /usr/bin/oprofiled
will fail because the ~ is not expanded (no space around it) (popt bug I say)
o cpu names instead of numbers in 2.4 module/ ?
o remove 1 and 2 magic numbers for oprof_ready
o adapt Anton's patch for handling non-symbolled libraries ?
o use standard C integer type <stdint.h> int32_t int16_t etc.
o event multiplexing for real
o XML output
o profile the NMI handler code
o merge sample files into one big report (like vtune can do repeated runs)
|