btrace: increase buffer size

Try to allocate as much buffer as we can for each thread with a maximum
of 64KB.

2014-01-16  Markus Metzger  <markus.t.metzger@intel.com>

	* common/linux-btrace.c (linux_enable_btrace): Enlarge buffer.
This commit is contained in:
Markus Metzger 2013-04-10 13:43:41 +02:00
parent 5de9129b06
commit d0fa75352b
2 changed files with 19 additions and 10 deletions

View file

@ -1,3 +1,7 @@
2014-01-16 Markus Metzger <markus.t.metzger@intel.com>
* common/linux-btrace.c (linux_enable_btrace): Enlarge buffer.
2014-01-16 Markus Metzger <markus.t.metzger@intel.com> 2014-01-16 Markus Metzger <markus.t.metzger@intel.com>
* btrace.c (ftrace_new_function): Start counting at one. * btrace.c (ftrace_new_function): Start counting at one.

View file

@ -423,7 +423,7 @@ struct btrace_target_info *
linux_enable_btrace (ptid_t ptid) linux_enable_btrace (ptid_t ptid)
{ {
struct btrace_target_info *tinfo; struct btrace_target_info *tinfo;
int pid; int pid, pg;
tinfo = xzalloc (sizeof (*tinfo)); tinfo = xzalloc (sizeof (*tinfo));
tinfo->ptid = ptid; tinfo->ptid = ptid;
@ -451,17 +451,22 @@ linux_enable_btrace (ptid_t ptid)
if (tinfo->file < 0) if (tinfo->file < 0)
goto err; goto err;
/* We hard-code the trace buffer size. /* We try to allocate as much buffer as we can get.
At some later time, we should make this configurable. */ We could allow the user to specify the size of the buffer, but then
tinfo->size = 1; we'd leave this search for the maximum buffer size to him. */
tinfo->buffer = mmap (NULL, perf_event_mmap_size (tinfo), for (pg = 4; pg >= 0; --pg)
PROT_READ, MAP_SHARED, tinfo->file, 0); {
if (tinfo->buffer == MAP_FAILED) /* The number of pages we request needs to be a power of two. */
goto err_file; tinfo->size = 1 << pg;
tinfo->buffer = mmap (NULL, perf_event_mmap_size (tinfo),
PROT_READ, MAP_SHARED, tinfo->file, 0);
if (tinfo->buffer == MAP_FAILED)
continue;
return tinfo; return tinfo;
}
err_file: /* We were not able to allocate any buffer. */
close (tinfo->file); close (tinfo->file);
err: err: