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
[email protected]
https://lists.nongnu.org/mailman/listinfo/libunwind-devel