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

Message ID 20191115064750.47888-1-shile.zhang@linux.alibaba.com
Headers show
Series
  • Speed booting by sorting ORC unwind tables at build time
Related show

Message

Shile Zhang Nov. 15, 2019, 6:47 a.m. UTC
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@infradead.org/

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

Comments

Ingo Molnar Nov. 15, 2019, 7:25 a.m. UTC | #1
* Shile Zhang <shile.zhang@linux.alibaba.com> wrote:

> 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.

Could you please also measure how much boot time this saves, 
approximately, and how long it takes to do it at build time?

Thanks,

	Ingo
Shile Zhang Nov. 15, 2019, 8:24 a.m. UTC | #2
On 2019/11/15 15:25, Ingo Molnar wrote:
> * Shile Zhang <shile.zhang@linux.alibaba.com> wrote:
>
>> 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.
> Could you please also measure how much boot time this saves,
> approximately, and how long it takes to do it at build time?

Thanks for your review!

I've tested on 2vcpu16GB VM (with 2.5GHz Xeon CPU), it can saves near 90ms.
And the new sorttable tool costs about 0.074s to do extable and orc 
tables sort,
on host with same CPU.
>
> Thanks,
>
> 	Ingo