Here is 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@redhat.com>
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
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) {