[PATCH v4 12/37] unwind: enable dwarf cache of libunwind
Masatake YAMATO
yamato at redhat.com
Wed Apr 16 06:33:10 UTC 2014
Here the benchmark of the dwarf cache.
Target program:
#include <sched.h>
int main(void)
{
unsigned int max = 0x6fff, i;
for (i = 0; i < max; i++)
sched_yield();
return 0;
}
Command line:
./strace -o /dev/null -k a.out
With the dwarf cache:
real 0m12.081s
user 0m3.858s
sys 0m8.194s
Without the dwarf cache:
real 0m22.326s
user 0m5.218s
sys 0m16.952s
Signed-off-by: Masatake YAMATO <yamato at redhat.com>
---
unwind.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/unwind.c b/unwind.c
index 0e90a92..036d0e4 100644
--- a/unwind.c
+++ b/unwind.c
@@ -88,6 +88,7 @@ unwind_init(void)
libunwind_as = unw_create_addr_space(&_UPT_accessors, 0);
if (!libunwind_as)
error_msg_and_die("failed to create address space for stack tracing");
+ unw_set_caching_policy(libunwind_as, UNW_CACHE_GLOBAL);
}
void
@@ -139,6 +140,9 @@ build_mmap_cache(struct tcb* tcp)
size_t blen;
size_t dlen;
+ unw_flush_cache (libunwind_as, 0, 0);
+
+
sprintf(filename, "/proc/%d/maps", tcp->pid);
fp = fopen(filename, "r");
if (!fp) {
--
1.9.0
More information about the Strace-devel
mailing list