This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [google gcc-4_7, integration] Build more of libstdc++ with frame pointers


On Thu, Feb 28, 2013 at 9:07 AM, Xinliang David Li <davidxl@google.com> wrote:

> Any insight about the relative performance of the two implementations?

We have a benchmark for the speed of unwinder. Here are results.

The number /1, /2, etc. is the number of levels in the stack trace.

Using frame-based unwinder:

Benchmark             Time(ns)    CPU(ns) Iterations
----------------------------------------------------
BM_GetStackTrace/1          29         29   24137931
BM_GetStackTrace/2          38         38   17948718
BM_GetStackTrace/3          43         44   16279070
BM_GetStackTrace/4          57         57   10000000
BM_GetStackTrace/5          62         62   10000000
BM_GetStackTrace/6          65         65   10000000
BM_GetStackTrace/7          65         64   10000000
BM_GetStackTrace/8          65         65   10000000
BM_GetStackTrace/9          65         65   10000000
BM_GetStackTrace/10         65         65   10000000


Using libgcc:

Benchmark             Time(ns)    CPU(ns) Iterations
----------------------------------------------------
BM_GetStackTrace/1        1543       1543     466667
BM_GetStackTrace/2        2042       2057     350000
BM_GetStackTrace/3        2378       2366     291667
BM_GetStackTrace/4        2754       2720     250000
BM_GetStackTrace/5        3212       3200     218750
BM_GetStackTrace/6        3655       3651     194444
BM_GetStackTrace/7        4039       4000     175000
BM_GetStackTrace/8        4009       4000     175000
BM_GetStackTrace/9        4002       4000     175000
BM_GetStackTrace/10       4017       4000     175000


Using libunwind:

Benchmark             Time(ns)    CPU(ns) Iterations
----------------------------------------------------
BM_GetStackTrace/1         109        108    6363636
BM_GetStackTrace/2         121        122    5833333
BM_GetStackTrace/3         130        130    5000000
BM_GetStackTrace/4         133        132    5000000
BM_GetStackTrace/5         148        148    4666667
BM_GetStackTrace/6         162        162    4375000
BM_GetStackTrace/7         174        175    4117647
BM_GetStackTrace/8         185        185    3888889
BM_GetStackTrace/9         188        187    3684211
BM_GetStackTrace/10        188        187    3684211

Conclusions:
- frame based unwinder is hard to beat (re-confirmed :-)
- libunwind is getting really close at 3x the overhead
- libgcc is nowhere close at 50x.

-- 
Paul Pluzhnikov


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]