mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2026-02-11 23:51:06 +00:00
Updates
Sun Sep 4 19:38:51 2005 Soeren Sandmann <sandmann@redhat.com> * TODO: Updates
This commit is contained in:
committed by
Søren Sandmann Pedersen
parent
ee53bcffd4
commit
22d05ac014
@ -1,3 +1,7 @@
|
|||||||
|
Sun Sep 4 19:38:51 2005 Soeren Sandmann <sandmann@redhat.com>
|
||||||
|
|
||||||
|
* TODO: Updates
|
||||||
|
|
||||||
Tue Aug 30 16:57:33 2005 Søren Sandmann <sandmann@redhat.com>
|
Tue Aug 30 16:57:33 2005 Søren Sandmann <sandmann@redhat.com>
|
||||||
|
|
||||||
* configure.ac: Complain if we can't find /lib/modules/`uname
|
* configure.ac: Complain if we can't find /lib/modules/`uname
|
||||||
|
|||||||
24
TODO
24
TODO
@ -36,6 +36,13 @@ Before 1.2:
|
|||||||
stack must probably be taken in the interrupt itself?
|
stack must probably be taken in the interrupt itself?
|
||||||
- Why this difference? The page tables should still be loaded. Is it
|
- Why this difference? The page tables should still be loaded. Is it
|
||||||
because pages_present() doesn't work? No, turning it off doesn't help.
|
because pages_present() doesn't work? No, turning it off doesn't help.
|
||||||
|
- It looks like this works. Get:
|
||||||
|
|
||||||
|
struct pt_regs *user_regs =
|
||||||
|
(void *)current->thread.esp0 - sizeof (struct pt_regs);
|
||||||
|
|
||||||
|
then use pages_present as usual to trace with user_regs; There could be
|
||||||
|
rare lockups though.
|
||||||
|
|
||||||
* Correctness
|
* Correctness
|
||||||
- When the module is unloaded, kill all processes blocking in read
|
- When the module is unloaded, kill all processes blocking in read
|
||||||
@ -47,7 +54,7 @@ Before 1.2:
|
|||||||
|
|
||||||
- When the module is unloaded, can we somehow *guarantee* that no
|
- When the module is unloaded, can we somehow *guarantee* that no
|
||||||
kernel thread is active? Doesn't look like it; however we can
|
kernel thread is active? Doesn't look like it; however we can
|
||||||
get very close by decreasing a ref count just before returning
|
get close by decreasing a ref count just before returning
|
||||||
from the module. (There may still be return instructions etc.
|
from the module. (There may still be return instructions etc.
|
||||||
that will get run). This may not be an issue with the timer
|
that will get run). This may not be an issue with the timer
|
||||||
based scanning we are using currently.
|
based scanning we are using currently.
|
||||||
@ -60,6 +67,13 @@ Before 1.2:
|
|||||||
|
|
||||||
- Consider adding "at least 5% inclusive cost" filter
|
- Consider adding "at least 5% inclusive cost" filter
|
||||||
|
|
||||||
|
- consider having the ability to group a function together with its nearest
|
||||||
|
neighbours. That way we can eliminate some of the effect of
|
||||||
|
"one function taking 10% of the time"
|
||||||
|
vs.
|
||||||
|
"the same function broken into ten functions each taking 1%"
|
||||||
|
Not clear what the UI looks like though.
|
||||||
|
|
||||||
- Ability to generate "screenshots" suitable for mail/blog/etc
|
- Ability to generate "screenshots" suitable for mail/blog/etc
|
||||||
UI: "generate screenshot" menu item pops up a window with
|
UI: "generate screenshot" menu item pops up a window with
|
||||||
a text area + a radio buttons "text/html". When you flick
|
a text area + a radio buttons "text/html". When you flick
|
||||||
@ -170,7 +184,8 @@ http://www.linuxbase.org/spec/booksets/LSB-Embedded/LSB-Embedded/ehframe.html
|
|||||||
with set/get_user_data)
|
with set/get_user_data)
|
||||||
|
|
||||||
- Send each stack trace to the profile module, along with
|
- Send each stack trace to the profile module, along with
|
||||||
presentation objects
|
presentation objects. Maybe just a map from stack nodes
|
||||||
|
to presentation objects.
|
||||||
|
|
||||||
- Charge 'self' properly to processes that don't get any stack trace at all
|
- Charge 'self' properly to processes that don't get any stack trace at all
|
||||||
(probably we get that for free with stackstash reorganisation)
|
(probably we get that for free with stackstash reorganisation)
|
||||||
@ -254,6 +269,11 @@ Later:
|
|||||||
This function would behave essentially like a signal handler: couldn't
|
This function would behave essentially like a signal handler: couldn't
|
||||||
call malloc(), couldn't call printf(), etc.
|
call malloc(), couldn't call printf(), etc.
|
||||||
|
|
||||||
|
Note thought that scripting languages will generally have a stack with
|
||||||
|
both script-binary-stack, script stack, and library stacks. We wouldn't
|
||||||
|
want scripts to need to parse dwarf. Also if we do that thing with
|
||||||
|
sending the entire stack to userspace, things will be further complicated.
|
||||||
|
|
||||||
- Consider this usecase:
|
- Consider this usecase:
|
||||||
Someone is considering replacing malloc()/free() with a freelist
|
Someone is considering replacing malloc()/free() with a freelist
|
||||||
for a certain data structure. All use of this data structure is
|
for a certain data structure. All use of this data structure is
|
||||||
|
|||||||
@ -348,7 +348,7 @@ read_symbols (BinFile *bf)
|
|||||||
|
|
||||||
symbols = g_array_new (FALSE, FALSE, sizeof (Symbol));
|
symbols = g_array_new (FALSE, FALSE, sizeof (Symbol));
|
||||||
|
|
||||||
/* g_print ("%s: text vma: %x\n", bf->filename, text_section->vma); */
|
/* g_print ("%s: text vma: %x\n", bf->filename, text_section->vma); */
|
||||||
|
|
||||||
for (i = 0; i < n_symbols; i++)
|
for (i = 0; i < n_symbols; i++)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -476,9 +476,9 @@ timer_notify (struct pt_regs *regs)
|
|||||||
trace->pid = current->pid;
|
trace->pid = current->pid;
|
||||||
trace->truncated = 0;
|
trace->truncated = 0;
|
||||||
|
|
||||||
trace->addresses[0] = (void *)regs->REG_INS_PTR;
|
i = 0;
|
||||||
|
|
||||||
i = 1;
|
trace->addresses[i++] = (void *)regs->REG_INS_PTR;
|
||||||
|
|
||||||
frame = (StackFrame *)regs->REG_FRAME_PTR;
|
frame = (StackFrame *)regs->REG_FRAME_PTR;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user