Hi all,
Recently I upgrade libunwind from 1.2 to 1.3 (until commit 
26718da1713a5698070e702e68db1f995baeae07) mostly because commit 
5a491cb2d889f03952182d611d2ac6e15c3c5845:
"arm64: Support for restore of ARM64 Neon callee-saved registers during unwind"

v1.3 works well except the performance regression of unw_get_proc_info.
I sampled the time consumed by unw_get_proc_info with 
clock_gettime(CLOCK_MONOTONIC, ...)
Here is the results (Tests are performed on aarch64/linux with gcc 5.4, us 
means microsecond):
v1.3:
         -- unw_get_proc_info called 6603, time(us) consumed total 620254, 
time(us) consumed delta 68
         -- unw_get_proc_info called 6604, time(us) consumed total 620322, 
time(us) consumed delta 49
         -- unw_get_proc_info called 6605, time(us) consumed total 620371, 
time(us) consumed delta 60
         -- unw_get_proc_info called 6606, time(us) consumed total 620431, 
time(us) consumed delta 80
         -- unw_get_proc_info called 6607, time(us) consumed total 620511, 
time(us) consumed delta 77
         -- unw_get_proc_info called 6608, time(us) consumed total 620588, 
time(us) consumed delta 88
         -- unw_get_proc_info called 6609, time(us) consumed total 620676, 
time(us) consumed delta 201
         -- unw_get_proc_info called 6610, time(us) consumed total 620877, 
time(us) consumed delta 200
         -- unw_get_proc_info called 6611, time(us) consumed total 621077, 
time(us) consumed delta 185
         -- unw_get_proc_info called 6612, time(us) consumed total 621262, 
time(us) consumed delta 151
         -- unw_get_proc_info called 6613, time(us) consumed total 621413, 
time(us) consumed delta 136
         -- unw_get_proc_info called 6614, time(us) consumed total 621549, 
time(us) consumed delta 75
         -- unw_get_proc_info called 6615, time(us) consumed total 621624, 
time(us) consumed delta 66
         -- unw_get_proc_info called 6616, time(us) consumed total 621690, 
time(us) consumed delta 57
         -- unw_get_proc_info called 6617, time(us) consumed total 621747, 
time(us) consumed delta 78
         -- unw_get_proc_info called 6618, time(us) consumed total 621825, 
time(us) consumed delta 80
         -- unw_get_proc_info called 6619, time(us) consumed total 621905, 
time(us) consumed delta 79
         -- unw_get_proc_info called 6620, time(us) consumed total 621984, 
time(us) consumed delta 78
         -- unw_get_proc_info called 6621, time(us) consumed total 622062, 
time(us) consumed delta 78
         -- unw_get_proc_info called 6622, time(us) consumed total 622140, 
time(us) consumed delta 79
         -- unw_get_proc_info called 6623, time(us) consumed total 622219, 
time(us) consumed delta 78
         -- unw_get_proc_info called 6624, time(us) consumed total 622297, 
time(us) consumed delta 66
         -- unw_get_proc_info called 6625, time(us) consumed total 622363, 
time(us) consumed delta 49
         -- unw_get_proc_info called 6626, time(us) consumed total 622412, 
time(us) consumed delta 61
         -- unw_get_proc_info called 6627, time(us) consumed total 622473, 
time(us) consumed delta 81

v1.2
         -- unw_get_proc_info called 6289, time(us) consumed total 45070, 
time(us) consumed delta 10
         -- unw_get_proc_info called 6290, time(us) consumed total 45080, 
time(us) consumed delta 4
         -- unw_get_proc_info called 6291, time(us) consumed total 45084, 
time(us) consumed delta 3
         -- unw_get_proc_info called 6292, time(us) consumed total 45087, 
time(us) consumed delta 5
         -- unw_get_proc_info called 6293, time(us) consumed total 45092, 
time(us) consumed delta 3
         -- unw_get_proc_info called 6294, time(us) consumed total 45095, 
time(us) consumed delta 7
         -- unw_get_proc_info called 6295, time(us) consumed total 45102, 
time(us) consumed delta 4
         -- unw_get_proc_info called 6296, time(us) consumed total 45106, 
time(us) consumed delta 6
         -- unw_get_proc_info called 6297, time(us) consumed total 45112, 
time(us) consumed delta 8
         -- unw_get_proc_info called 6298, time(us) consumed total 45120, 
time(us) consumed delta 7
         -- unw_get_proc_info called 6299, time(us) consumed total 45127, 
time(us) consumed delta 8
         -- unw_get_proc_info called 6300, time(us) consumed total 45135, 
time(us) consumed delta 8
         -- unw_get_proc_info called 6301, time(us) consumed total 45143, 
time(us) consumed delta 8
         -- unw_get_proc_info called 6302, time(us) consumed total 45151, 
time(us) consumed delta 9
         -- unw_get_proc_info called 6303, time(us) consumed total 45160, 
time(us) consumed delta 8
         -- unw_get_proc_info called 6304, time(us) consumed total 45168, 
time(us) consumed delta 9
         -- unw_get_proc_info called 6305, time(us) consumed total 45177, 
time(us) consumed delta 7
         -- unw_get_proc_info called 6306, time(us) consumed total 45184, 
time(us) consumed delta 6
         -- unw_get_proc_info called 6307, time(us) consumed total 45190, 
time(us) consumed delta 7
         -- unw_get_proc_info called 6308, time(us) consumed total 45197, 
time(us) consumed delta 7
         -- unw_get_proc_info called 6309, time(us) consumed total 45204, 
time(us) consumed delta 7
         -- unw_get_proc_info called 6310, time(us) consumed total 45211, 
time(us) consumed delta 4
         -- unw_get_proc_info called 6311, time(us) consumed total 45215, 
time(us) consumed delta 3
         -- unw_get_proc_info called 6312, time(us) consumed total 45218, 
time(us) consumed delta 5
         -- unw_get_proc_info called 6313, time(us) consumed total 45223, 
time(us) consumed delta 3
         -- unw_get_proc_info called 6314, time(us) consumed total 45226, 
time(us) consumed delta 8
         -- unw_get_proc_info called 6315, time(us) consumed total 45234, 
time(us) consumed delta 5
         -- unw_get_proc_info called 6316, time(us) consumed total 45239, 
time(us) consumed delta 6
         -- unw_get_proc_info called 6317, time(us) consumed total 45245, 
time(us) consumed delta 8
         -- unw_get_proc_info called 6318, time(us) consumed total 45253, 
time(us) consumed delta 8
         -- unw_get_proc_info called 6319, time(us) consumed total 45261, 
time(us) consumed delta 8
         -- unw_get_proc_info called 6320, time(us) consumed total 45269, 
time(us) consumed delta 9
         -- unw_get_proc_info called 6321, time(us) consumed total 45278, 
time(us) consumed delta 10
         -- unw_get_proc_info called 6322, time(us) consumed total 45288, 
time(us) consumed delta 8
         -- unw_get_proc_info called 6323, time(us) consumed total 45296, 
time(us) consumed delta 8
         -- unw_get_proc_info called 6324, time(us) consumed total 45304, 
time(us) consumed delta 9
         -- unw_get_proc_info called 6325, time(us) consumed total 45313, 
time(us) consumed delta 6
         -- unw_get_proc_info called 6326, time(us) consumed total 45319, 
time(us) consumed delta 6

It seems v1.3 costs 10 times more. And things are getting even worse on qemu. I 
do not have any clue for this problem, please some one enlights me.

By the way, v1.3 can not be built on Android NDK r16b 
(https://dl.google.com/android/repository/android-ndk-r16b-linux-x86_64.zip ) 
with configure :  "configure   --host=aarch64-linux-android  
--prefix=xxx_install_yyy     --enable-debug".  Following are some potential 
problems:

1.       test-coredump-unwind  includes execinfo.h  which does not exist on 
android.

2.       HAVE_STRUCT_ELF_PRSTATUS is not defined during configuration.

3.       struct elf_prstatus is defined in linux/elfcore.h which is not 
included.

Best regards.

_______________________________________________
Libunwind-devel mailing list
Libunwind-devel@nongnu.org
https://lists.nongnu.org/mailman/listinfo/libunwind-devel

Reply via email to