[RFC PATCH v3 0/7] Speed booting by sorting ORC unwind tables at build time

From: Shile Zhang
Date: Fri Nov 15 2019 - 01:48:15 EST


Hi,

I refactored the sortextable code and add ORC unwind tables sort
support, for kernel boot speedup by sorting kernel tables at build time
as much as possible.

Followed Peter's suggestion, I put ORC tables sort into a separated
thread makes these tables sort concurrently. That helps to avoid
kernel's link time as possible.

What I did:
[1-4] : refacorting code sortextable.{ch}, for more readable and
extendable, prepare for further rework;
[5] : rename the sortextable to sorttable, and related Kconfig, for
commonly extend.
[6-7] : Add ORC unwind tables sorting, and remove the runtime sort.

Further works:
Put more kernel tables be sorted at build time:
- __jump_table:
I found jump table sort in jump_label_init() does not cost more boot
time, seems not more benefit to sort it at build time. Maybe can
consider it in future for more boot-time sensitive case.
- .static_call_sites:
This tables not merged yet, needs to check the runtime sort cost in
future.
https://lore.kernel.org/lkml/20191007081716.07616230.8@xxxxxxxxxxxxx/

Thanks!

Changes from RFC v3:
- Discard new added sortorctable tool and related Kconfig changes.
- Refactored sortextable, makes it more readable and extendable.
- Rename 'sortextable' to 'sorttable', for more kernel tables extend.
- Add ORC unwind tables sort into sorttable.
- Remove the runtime ORC tables sort.

Changes from RFC v2:
- Removed new added Kconfig and runtime sort code, advised by Josh Poimboeuf.
- Some minor refactoring.
https://www.lkml.org/lkml/2019/11/8/56

v1:
- Added a new sortorctable tool to sort ORC unwind tables at build time,
same as sortextable.
- Add a new Kconfigure to control if ORC unwind tables sort at build
time.
https://www.lkml.org/lkml/2019/11/7/611

Shile Zhang (7):
scripts/sortextable: Rewrite error/success handling
scripts/sortextable: kernel coding style formating
scripts/sortextable: Remove dead code
scripts/sortextable: refactor do_func() function
scripts/sorttable: rename sortextable to sorttable
scripts/sorttable: Add ORC unwind tables sort concurrently
x86/unwind/orc: remove run-time ORC unwind tables sort

arch/arc/Kconfig | 2 +-
arch/arm/Kconfig | 2 +-
arch/arm64/Kconfig | 2 +-
arch/microblaze/Kconfig | 2 +-
arch/mips/Kconfig | 2 +-
arch/parisc/Kconfig | 2 +-
arch/parisc/kernel/vmlinux.lds.S | 2 +-
arch/powerpc/Kconfig | 2 +-
arch/s390/Kconfig | 2 +-
arch/x86/Kconfig | 2 +-
arch/x86/kernel/unwind_orc.c | 8 +-
arch/xtensa/Kconfig | 2 +-
init/Kconfig | 2 +-
scripts/.gitignore | 2 +-
scripts/Makefile | 9 +-
scripts/link-vmlinux.sh | 10 +-
scripts/sortextable.h | 209 -------------
scripts/{sortextable.c => sorttable.c} | 299 ++++++++----------
scripts/sorttable.h | 412 +++++++++++++++++++++++++
19 files changed, 578 insertions(+), 395 deletions(-)
delete mode 100644 scripts/sortextable.h
rename scripts/{sortextable.c => sorttable.c} (67%)
create mode 100644 scripts/sorttable.h

--
2.24.0.rc2