Message ID | 20220909130016.727-1-thunder.leizhen@huawei.com (mailing list archive) |
---|---|
Headers | show |
Series | kallsyms: Optimizes the performance of lookup symbols | expand |
Hi, everybody: Can anyone review it? Maybe I should split this patch series into two parts: kallsyms and livepatch. In fact, the performance can be improved even if the compression policy of the symbol type is not changed, that is, the scripts/callsyms.c file is not modified, but we perform the len-based filtering first. That way, it'll be easier for everyone to review. OK, I'm ready for v3. On 2022/9/9 21:00, Zhen Lei wrote: > v1 --> v2: > Add self-test facility > > v1: > Currently, to search for a symbol, we need to expand the symbols in > 'kallsyms_names' one by one, and then use the expanded string for > comparison. This is very slow. > > In fact, we can first compress the name being looked up and then use > it for comparison when traversing 'kallsyms_names'. > > This patch series optimizes the performance of function kallsyms_lookup_name(), > and function klp_find_object_symbol() in the livepatch module. Based on the > test results, the performance overhead is reduced to 5%. That is, the > performance of these functions is improved by 20 times. > > To avoid increasing the kernel size in non-debug mode, the optimization is only > for the case CONFIG_KALLSYMS_ALL=y. > > Zhen Lei (8): > scripts/kallsyms: don't compress symbol type when > CONFIG_KALLSYMS_ALL=y > scripts/kallsyms: rename build_initial_tok_table() > kallsyms: Adjust the types of some local variables > kallsyms: Improve the performance of kallsyms_lookup_name() > kallsyms: Add helper kallsyms_on_each_match_symbol() > livepatch: Use kallsyms_on_each_match_symbol() to improve performance > livepatch: Improve the search performance of > module_kallsyms_on_each_symbol() > kallsyms: Add self-test facility > > include/linux/kallsyms.h | 8 ++ > init/Kconfig | 13 ++ > kernel/Makefile | 1 + > kernel/kallsyms.c | 135 ++++++++++++++++++++- > kernel/kallsyms_selftest.c | 243 +++++++++++++++++++++++++++++++++++++ > kernel/livepatch/core.c | 25 +++- > kernel/module/kallsyms.c | 13 +- > scripts/kallsyms.c | 19 ++- > 8 files changed, 441 insertions(+), 16 deletions(-) > create mode 100644 kernel/kallsyms_selftest.c >
On 2022/9/16 9:27, Leizhen (ThunderTown) wrote: > Hi, everybody: > Can anyone review it? Maybe I should split this patch series > into two parts: kallsyms and livepatch. > In fact, the performance can be improved even if the compression policy > of the symbol type is not changed, that is, the scripts/callsyms.c file is > not modified, but we perform the len-based filtering first. That way, it'll > be easier for everyone to review. OK, I'm ready for v3. Sorry, I didn't sleep well yesterday. The length is the length of the compressed string. Therefore, the solution is not feasible. > > > On 2022/9/9 21:00, Zhen Lei wrote: >> v1 --> v2: >> Add self-test facility >> >> v1: >> Currently, to search for a symbol, we need to expand the symbols in >> 'kallsyms_names' one by one, and then use the expanded string for >> comparison. This is very slow. >> >> In fact, we can first compress the name being looked up and then use >> it for comparison when traversing 'kallsyms_names'. >> >> This patch series optimizes the performance of function kallsyms_lookup_name(), >> and function klp_find_object_symbol() in the livepatch module. Based on the >> test results, the performance overhead is reduced to 5%. That is, the >> performance of these functions is improved by 20 times. >> >> To avoid increasing the kernel size in non-debug mode, the optimization is only >> for the case CONFIG_KALLSYMS_ALL=y. >> >> Zhen Lei (8): >> scripts/kallsyms: don't compress symbol type when >> CONFIG_KALLSYMS_ALL=y >> scripts/kallsyms: rename build_initial_tok_table() >> kallsyms: Adjust the types of some local variables >> kallsyms: Improve the performance of kallsyms_lookup_name() >> kallsyms: Add helper kallsyms_on_each_match_symbol() >> livepatch: Use kallsyms_on_each_match_symbol() to improve performance >> livepatch: Improve the search performance of >> module_kallsyms_on_each_symbol() >> kallsyms: Add self-test facility >> >> include/linux/kallsyms.h | 8 ++ >> init/Kconfig | 13 ++ >> kernel/Makefile | 1 + >> kernel/kallsyms.c | 135 ++++++++++++++++++++- >> kernel/kallsyms_selftest.c | 243 +++++++++++++++++++++++++++++++++++++ >> kernel/livepatch/core.c | 25 +++- >> kernel/module/kallsyms.c | 13 +- >> scripts/kallsyms.c | 19 ++- >> 8 files changed, 441 insertions(+), 16 deletions(-) >> create mode 100644 kernel/kallsyms_selftest.c >> >