Skip to content

Commit

Permalink
ftrace: Speed up search by skipping pages by address
Browse files Browse the repository at this point in the history
As all records in a page of the ftrace table are sorted, we can
speed up the search algorithm by checking if the address to look for
falls in between the first and last record ip on the page.

This speeds up both the ftrace_location() and ftrace_text_reserved()
algorithms, as it can skip full pages when the search address is
not in them.

Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
  • Loading branch information
Steven Rostedt authored and Steven Rostedt committed May 16, 2012
1 parent 706c81f commit 9644302
Showing 1 changed file with 16 additions and 6 deletions.
22 changes: 16 additions & 6 deletions kernel/trace/ftrace.c
Original file line number Diff line number Diff line change
Expand Up @@ -1411,6 +1411,8 @@ int ftrace_location(unsigned long ip)
key.ip = ip;

for (pg = ftrace_pages_start; pg; pg = pg->next) {
if (ip < pg->records[0].ip || ip > pg->records[pg->index - 1].ip)
continue;
rec = bsearch(&key, pg->records, pg->index,
sizeof(struct dyn_ftrace),
ftrace_cmp_recs);
Expand Down Expand Up @@ -1571,16 +1573,24 @@ void ftrace_bug(int failed, unsigned long ip)


/* Return 1 if the address range is reserved for ftrace */
int ftrace_text_reserved(void *start, void *end)
int ftrace_text_reserved(void *s, void *e)
{
struct dyn_ftrace *rec;
struct ftrace_page *pg;
unsigned long start = (unsigned long)s;
unsigned long end = (unsigned long)e;
int i;

do_for_each_ftrace_rec(pg, rec) {
if (rec->ip <= (unsigned long)end &&
rec->ip + MCOUNT_INSN_SIZE > (unsigned long)start)
return 1;
} while_for_each_ftrace_rec();
for (pg = ftrace_pages_start; pg; pg = pg->next) {
if (end < pg->records[0].ip ||
start >= (pg->records[pg->index - 1].ip + MCOUNT_INSN_SIZE))
continue;
for (i = 0; i < pg->index; i++) {
rec = &pg->records[i];
if (rec->ip <= end && rec->ip + MCOUNT_INSN_SIZE > start)
return 1;
}
}
return 0;
}

Expand Down

0 comments on commit 9644302

Please sign in to comment.