-
Notifications
You must be signed in to change notification settings - Fork 3
/
TODO
261 lines (189 loc) · 7.47 KB
/
TODO
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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
Each release
============
- Check Debian BTS
- bug numbers in changelog
- mailer off tag to debian bts
- mail exmap-announce
- test on FC4 (FC5?)
- test on ARM (slug)
- check /var/log/messages during make test
- add to tests themselves?
For 0.20
========
- Build+run on modern systems:
- current ubuntu (x86_64)
- current fedora (set up vm)
- current openwrt (arm)
- Ease installing developer dependencies for each supported platform
- add ".installed-deps" hidden target, removed by clean
- add platform detection (ubuntu, redhat, debian, openwrt)
For 0.21
========
- build intermediate format of data
- to decouple gtk view
- (flat file? sqlite? how to capture elf info?)
- how much processing to do?
- lib with C bindings?
- review/incorporate exmap console work?
Future
======
- ?? Add CRC checking (then contents checking) to estimate
how many pages are identical between a group of pids
- is there value in the elf symbol resolution stuff as sep lib?
For 0.10
========
DONE - have 'make exmtool' not depend on gtk/X
DONE - Change list labels when we select
(e.g. maps for process X, maps for all procs)
DONE - Review 'not selected' text as well
DONE - provide resizable columns
DONE - fix seg when clicking checkbox with no lib selected (grey checkbox)
DONE - test 'all procs' works for ELF *symbols* too
DONE - avoid very long cmdlines (see patch from Lubos)
DONE - Add About dialogue (from button) for shameless self-promotion
DONE - File view should all (and default to) sums over all procs
DONE - add checkbox (all procs/this proc)
DONE - mad non-linear CPU usage
- file tab
- select libqt (used by psi)
- select /usr/bin/psi process
- select .texto
- Looks like sorting on adding to the listbox
DONE - read *dynamic* symbols from ELF files
- does this do what we need?
DONE - text/fix dump_maps
DONE - merge 0.9 64bit work into trunk (check diffs on trunk...worth keeping?)
- and getpagesize()
- maybe start from 0.9 and add in...
DONE - look at the "global memory analysis tool" gmail, some good todos in there
DONE - remove leading _ on buttons
DONE - add keyboard accelerators to buttons
NO - add keyboard accelerators to tabs
DONE - update ELF sections when file changes (proc might be NULL)
OK - are some of the 'sums' with 'all processes' set invalid as sums?
DONE - need to clear all sub-sections when we change something higher up
- e.g. picking new process clears file
- but elf sections don't change
DONE - clear symbols when sections change?
NOTABUG? - check .got bug from Lubos
- add auto test case before fixing
- pick out ELF section which must have writable > 0
Sometime
========
- cross-propagate file/proc selection between tabs
- optional?
- allow optional checkboxes to be set by
cmdline and/or env var. avoids cfg file?
- cmdline sorting should ignore path
- keep PID? remove pid? father-son sort?
- can we move some info out of the 'processes' list and into
an 'info' area below the list?
e.g. 'full cmdline', parent pid (clickable!), children,
- rename 'writable' column
- improve doc for writable column
- add some kind of in-application help
- add tooltips
- drop most boost::shared_ptr usage. We build large std::lists of these
things, leading to lots of object creation.
- e.g. run under gdb, select an ELF section with many symbols and
sample backtrace (with ctrl-C, bt, c) a few times
- add an icon (does this need gnome?)
- change kernel interface to /proc/<pid>/exmap
- shrink Panes sensibly when window resized (hook signal and even up?)
- go to 4-way split on resize? (and startup?)
- or just set 'expand' on panes?
- write data to file, load from file (add a FileSysInfo type)
- use this to instrument slug
- also use in main gexmap to reduce mem footprint during analysis?
- memprof shows
- how much is allocated during reading info?
- use massif
- memprof on "write data to file" tool
- 19Mb allocated
- 6.5Mb in Vma::add_pages, from vector.push_back
- consider shrinking class Page?
- wasting 30 bits/class at the moment on padding
- could just store 'page index' into the PagePool
- and have PagePool store the bits
- warning if they aren't the same on all?
- also, common case is contig indices
into PagePool, so could store a 'Range'...
- 2.5Mb in PagePool::inc_page_count/map[]
- 0.7Mb in allocated class Vmas
- could lose the selfptr nonsense
- maybe drop the shared_ptr stuff entirely?
- 3.9Mb in File::open_file()
- open ifstreams!
- need to close off open fds!
- reopen if needed
- add dirty column from pte_dirty (suggestion from didier)
- consider having per proc/file in a seperate window (reduce clutter)
- consider byte-sized sizes for smaller items like symbols
- consider adding columns (like 'swapped') and having config file
- command line tool
- list procs/files with summary
- specify proc/file and get basic info
- specify proc/file and list files/procs
- specify proc+file and list ELF info?
- specify file/ELF section
- consider handling totals differently
- best would be something outside of the file/proc tab.
- a single text string on the bottombar looks ugly
- multiple labels?
- too wide
- perhaps split over two lines or something?
- even if keep totals in proc list, perhaps add to file too?
- somehow test on 64bit
- finish sysinfo
- merge read_vma and read_page_info so can override
them both in test sysinfo
- have read /proc/x/maps as protected func
- write TestNoModuleLinuxSysInfo
- which reads /proc/x/maps and makes up page info
- is there a way to make it test-compatible?
- or skip those tests if in that mode?
- add a switch (on ENV var?) to enable no-module mode
for t_exmap
- test locally
- test on hp testdrive
- add coverage testing support to makefile
- better Exmap coverage
- mkdir -p ./coverage
lcov --directory $STAP_OBJ --zerocounters
runtest --tool=systemtap
lcov --directory $STAP_OBJ --capture --output-file ./coverage/stap.info
genhtml -o ./coverage ./coverage/stap.info
- document non-page-aligned values for files
- try and show thread stack usage
- maybe additional info from kernel module?
- support earlier kernel versions (no pud_t. See mail from Joaquim)
- also need to worry about [vdso] name
- we can have a map to a (deleted) file. We'll fail to open this
(d'uh). What problem does this cause? Just a "non elf" file?
- read /proc/k?mem using pfn to show hex contents?
- I think /dev/mem is what is wanted.
- shift pfn to get a physical address
- seek & read /dev/mem to read data
- add a 'RangeView' to exmap.pl
- pfns are in Vma, so add 'read_mem_range' to that?
- Find a way to identify glibc [anon] maps as heap
- We are holding an open fd to each Elf file. We probably need it to
seek to read symbols, unless we open/close there (or make it private
and do it in the caller).
- add 'reload'
- check for memleaks caused by shared_ptr
- if we do 'reload', functionality then will need to explicitly break
proc <-> file <-> vma links since the shared_ptr's are refcounting
won't. (use weak_ptr) (also problems with selfptr nonsense)
- right justify Sizes
- use %10.2f as the format
- but then need fixed-width font in text renderer
- do-able?
- perhaps change default font for all of it?
- could pad with leading zeros <ugh>
- doxygen
- basic doc on all classes
- need to mark todo's as \todo
DONE - add TODO generation
DONE - up and running
------------------------------------------------------------