mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2026-02-12 08:00:53 +00:00
Increase the max number of addresses to 1021, reorganise SysprofMmapArea
2006-10-26 Soren Sandmann <sandmann@daimi.au.dk> * module/sysprof-module.h (struct SysprofStackTrace): Increase the max number of addresses to 1021, reorganise SysprofMmapArea to make the traces naturally page aligned. * TODO: Update
This commit is contained in:
committed by
Søren Sandmann Pedersen
parent
e7415d4492
commit
9a1ed3d336
@ -1,3 +1,11 @@
|
|||||||
|
2006-10-26 Soren Sandmann <sandmann@daimi.au.dk>
|
||||||
|
|
||||||
|
* module/sysprof-module.h (struct SysprofStackTrace): Increase the
|
||||||
|
max number of addresses to 1021, reorganise SysprofMmapArea to
|
||||||
|
make the traces naturally page aligned.
|
||||||
|
|
||||||
|
* TODO: Update
|
||||||
|
|
||||||
2006-10-26 Soren Sandmann <sandmann@daimi.au.dk>
|
2006-10-26 Soren Sandmann <sandmann@daimi.au.dk>
|
||||||
|
|
||||||
* collector.c (resolve_symbols): Combine processes with identical
|
* collector.c (resolve_symbols): Combine processes with identical
|
||||||
|
|||||||
35
TODO
35
TODO
@ -158,11 +158,6 @@ Before 1.2:
|
|||||||
- etc.
|
- etc.
|
||||||
done: HEAD will not load files with the wrong inode now.
|
done: HEAD will not load files with the wrong inode now.
|
||||||
|
|
||||||
* Consider deleting cmdline hack in process.c and replace with something at
|
|
||||||
the symbol resolution level. Will require more memory though. DONE: in
|
|
||||||
head, processes are no longer coalesced based on cmdline. Need to add something
|
|
||||||
at the symbol level.
|
|
||||||
|
|
||||||
* Add spew infrastructure to make remote debugging easier.
|
* Add spew infrastructure to make remote debugging easier.
|
||||||
|
|
||||||
* Make it compile and work on x86-64
|
* Make it compile and work on x86-64
|
||||||
@ -436,7 +431,27 @@ http://www.linuxbase.org/spec/booksets/LSB-Embedded/LSB-Embedded/ehframe.html
|
|||||||
Probably better to send a list of maps with each trace. Which
|
Probably better to send a list of maps with each trace. Which
|
||||||
shouldn't really be that expensive. We already walk the list of
|
shouldn't really be that expensive. We already walk the list of
|
||||||
maps in process_ensure_map() on every trace. And we can do hashing
|
maps in process_ensure_map() on every trace. And we can do hashing
|
||||||
if it turns out to be a problem.
|
if it turns out to be a problem.
|
||||||
|
Maybe replace the SysprofStackTrace with a union, so that
|
||||||
|
it can be either a list of maps, or a stacktrace. Both map lists and
|
||||||
|
stacktraces would come with a hashcode.allowing userspac. This avoids
|
||||||
|
the problem that maps could take up a lot of extra bandwidth.
|
||||||
|
|
||||||
|
struct MapInfo
|
||||||
|
{
|
||||||
|
long start;
|
||||||
|
long end;
|
||||||
|
long offset;
|
||||||
|
long inode;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Maps
|
||||||
|
{
|
||||||
|
int hash_code;
|
||||||
|
int n_maps;
|
||||||
|
MapInfo info [127];
|
||||||
|
char filenames [2048];
|
||||||
|
}
|
||||||
|
|
||||||
- Figure out how Google's pprof script works. Then add real call graph
|
- Figure out how Google's pprof script works. Then add real call graph
|
||||||
drawing. (google's script is really simple; uses dot from graphviz).
|
drawing. (google's script is really simple; uses dot from graphviz).
|
||||||
@ -620,7 +635,8 @@ Later:
|
|||||||
|
|
||||||
- Optimization usecases:
|
- Optimization usecases:
|
||||||
|
|
||||||
- A lot of stuff is read synchronously, but it is possible to read it asynchronously.
|
- A lot of stuff is read synchronously, but it is possible to read
|
||||||
|
it asynchronously.
|
||||||
Visualization: A timeline with alternating CPU/disk activity.
|
Visualization: A timeline with alternating CPU/disk activity.
|
||||||
|
|
||||||
- What function is doing all the synchronous reading, and what files/offsets is
|
- What function is doing all the synchronous reading, and what files/offsets is
|
||||||
@ -667,6 +683,11 @@ Later:
|
|||||||
|
|
||||||
-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ALREADY DONE -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ALREADY DONE -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
|
||||||
|
* Consider deleting cmdline hack in process.c and replace with something at
|
||||||
|
the symbol resolution level. Will require more memory though. DONE: in
|
||||||
|
head, processes are no longer coalesced based on cmdline. Need to add something
|
||||||
|
at the symbol level.
|
||||||
|
|
||||||
* don't loop infinitely if there are cycles in the debuglink graph.
|
* don't loop infinitely if there are cycles in the debuglink graph.
|
||||||
|
|
||||||
* Add "sysprof --version"
|
* Add "sysprof --version"
|
||||||
|
|||||||
@ -24,8 +24,8 @@ typedef struct SysprofStackTrace SysprofStackTrace;
|
|||||||
typedef struct SysprofStackInfo SysprofStackInfo;
|
typedef struct SysprofStackInfo SysprofStackInfo;
|
||||||
typedef struct SysprofMmapArea SysprofMmapArea;
|
typedef struct SysprofMmapArea SysprofMmapArea;
|
||||||
|
|
||||||
#define SYSPROF_N_TRACES 256
|
#define SYSPROF_N_TRACES 64
|
||||||
#define SYSPROF_MAX_ADDRESSES 512
|
#define SYSPROF_MAX_ADDRESSES 1021 /* to make it one page wide */
|
||||||
|
|
||||||
struct SysprofStackTrace
|
struct SysprofStackTrace
|
||||||
{
|
{
|
||||||
@ -39,9 +39,9 @@ struct SysprofStackTrace
|
|||||||
|
|
||||||
struct SysprofMmapArea
|
struct SysprofMmapArea
|
||||||
{
|
{
|
||||||
unsigned int head;
|
|
||||||
|
|
||||||
SysprofStackTrace traces[SYSPROF_N_TRACES];
|
SysprofStackTrace traces[SYSPROF_N_TRACES];
|
||||||
|
|
||||||
|
unsigned int head;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
17
process.c
17
process.c
@ -49,14 +49,14 @@ struct Map
|
|||||||
|
|
||||||
struct Process
|
struct Process
|
||||||
{
|
{
|
||||||
char *cmdline;
|
char * cmdline;
|
||||||
|
|
||||||
int n_maps;
|
int n_maps;
|
||||||
Map *maps;
|
Map * maps;
|
||||||
|
|
||||||
GList *bad_pages;
|
GList * bad_pages;
|
||||||
|
|
||||||
int pid;
|
int pid;
|
||||||
|
|
||||||
const char *undefined;
|
const char *undefined;
|
||||||
};
|
};
|
||||||
@ -352,10 +352,6 @@ get_statname (int pid)
|
|||||||
char *stat;
|
char *stat;
|
||||||
char *filename = idle_free (g_strdup_printf ("/proc/%d/stat", pid));
|
char *filename = idle_free (g_strdup_printf ("/proc/%d/stat", pid));
|
||||||
|
|
||||||
#if 0
|
|
||||||
g_print ("stat %d\n", pid);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (g_file_get_contents (filename, &stat, NULL, NULL))
|
if (g_file_get_contents (filename, &stat, NULL, NULL))
|
||||||
{
|
{
|
||||||
char result[200];
|
char result[200];
|
||||||
@ -365,9 +361,6 @@ get_statname (int pid)
|
|||||||
if (sscanf (stat, "%*d %200s %*s", result) == 1)
|
if (sscanf (stat, "%*d %200s %*s", result) == 1)
|
||||||
return g_strndup (result, 200);
|
return g_strndup (result, 200);
|
||||||
}
|
}
|
||||||
#if 0
|
|
||||||
g_print ("return null\n");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -363,8 +363,8 @@ profile_caller_new (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
ProfileCaller *
|
ProfileCaller *
|
||||||
profile_list_callers (Profile *profile,
|
profile_list_callers (Profile *profile,
|
||||||
char *callee_name)
|
char *callee_name)
|
||||||
{
|
{
|
||||||
StackNode *node;
|
StackNode *node;
|
||||||
StackNode *callees;
|
StackNode *callees;
|
||||||
@ -379,11 +379,12 @@ profile_list_callers (Profile *profile,
|
|||||||
|
|
||||||
for (node = callees; node != NULL; node = node->next)
|
for (node = callees; node != NULL; node = node->next)
|
||||||
{
|
{
|
||||||
|
ProfileCaller *caller;
|
||||||
|
|
||||||
if (!node->parent)
|
if (!node->parent)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ProfileCaller *caller =
|
caller = g_hash_table_lookup (callers_by_name, node->parent->address);
|
||||||
g_hash_table_lookup (callers_by_name, node->parent->address);
|
|
||||||
|
|
||||||
if (!caller)
|
if (!caller)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user