mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +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>
|
||||
|
||||
* collector.c (resolve_symbols): Combine processes with identical
|
||||
|
||||
35
TODO
35
TODO
@ -158,11 +158,6 @@ Before 1.2:
|
||||
- etc.
|
||||
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.
|
||||
|
||||
* 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
|
||||
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
|
||||
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
|
||||
drawing. (google's script is really simple; uses dot from graphviz).
|
||||
@ -620,7 +635,8 @@ Later:
|
||||
|
||||
- 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.
|
||||
|
||||
- What function is doing all the synchronous reading, and what files/offsets is
|
||||
@ -667,6 +683,11 @@ Later:
|
||||
|
||||
-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 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.
|
||||
|
||||
* Add "sysprof --version"
|
||||
|
||||
@ -24,8 +24,8 @@ typedef struct SysprofStackTrace SysprofStackTrace;
|
||||
typedef struct SysprofStackInfo SysprofStackInfo;
|
||||
typedef struct SysprofMmapArea SysprofMmapArea;
|
||||
|
||||
#define SYSPROF_N_TRACES 256
|
||||
#define SYSPROF_MAX_ADDRESSES 512
|
||||
#define SYSPROF_N_TRACES 64
|
||||
#define SYSPROF_MAX_ADDRESSES 1021 /* to make it one page wide */
|
||||
|
||||
struct SysprofStackTrace
|
||||
{
|
||||
@ -39,9 +39,9 @@ struct SysprofStackTrace
|
||||
|
||||
struct SysprofMmapArea
|
||||
{
|
||||
unsigned int head;
|
||||
|
||||
SysprofStackTrace traces[SYSPROF_N_TRACES];
|
||||
|
||||
unsigned int head;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
17
process.c
17
process.c
@ -49,14 +49,14 @@ struct Map
|
||||
|
||||
struct Process
|
||||
{
|
||||
char *cmdline;
|
||||
char * cmdline;
|
||||
|
||||
int n_maps;
|
||||
Map *maps;
|
||||
int n_maps;
|
||||
Map * maps;
|
||||
|
||||
GList *bad_pages;
|
||||
GList * bad_pages;
|
||||
|
||||
int pid;
|
||||
int pid;
|
||||
|
||||
const char *undefined;
|
||||
};
|
||||
@ -352,10 +352,6 @@ get_statname (int pid)
|
||||
char *stat;
|
||||
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))
|
||||
{
|
||||
char result[200];
|
||||
@ -365,9 +361,6 @@ get_statname (int pid)
|
||||
if (sscanf (stat, "%*d %200s %*s", result) == 1)
|
||||
return g_strndup (result, 200);
|
||||
}
|
||||
#if 0
|
||||
g_print ("return null\n");
|
||||
#endif
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -363,8 +363,8 @@ profile_caller_new (void)
|
||||
}
|
||||
|
||||
ProfileCaller *
|
||||
profile_list_callers (Profile *profile,
|
||||
char *callee_name)
|
||||
profile_list_callers (Profile *profile,
|
||||
char *callee_name)
|
||||
{
|
||||
StackNode *node;
|
||||
StackNode *callees;
|
||||
@ -379,11 +379,12 @@ profile_list_callers (Profile *profile,
|
||||
|
||||
for (node = callees; node != NULL; node = node->next)
|
||||
{
|
||||
ProfileCaller *caller;
|
||||
|
||||
if (!node->parent)
|
||||
continue;
|
||||
|
||||
ProfileCaller *caller =
|
||||
g_hash_table_lookup (callers_by_name, node->parent->address);
|
||||
caller = g_hash_table_lookup (callers_by_name, node->parent->address);
|
||||
|
||||
if (!caller)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user