Fwd: [PATCH 0/4] faster kexec reboot

From: 黄杰
Date: Mon Jul 25 2022 - 08:55:22 EST


---------- Forwarded message ---------
发件人: Albert Huang <huangjie.albert@xxxxxxxxxxxxx>
Date: 2022年7月25日周一 16:39
Subject: [PATCH 0/4] faster kexec reboot
To:
Cc: huangjie.albert <huangjie.albert@xxxxxxxxxxxxx>, Thomas Gleixner
<tglx@xxxxxxxxxxxxx>, Ingo Molnar <mingo@xxxxxxxxxx>, Borislav Petkov
<bp@xxxxxxxxx>, Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>,
<x86@xxxxxxxxxx>, H. Peter Anvin <hpa@xxxxxxxxx>, Eric Biederman
<ebiederm@xxxxxxxxxxxx>, Masahiro Yamada <masahiroy@xxxxxxxxxx>,
Michal Marek <michal.lkml@xxxxxxxxxxx>, Nick Desaulniers
<ndesaulniers@xxxxxxxxxx>, Kirill A. Shutemov
<kirill.shutemov@xxxxxxxxxxxxxxx>, Michael Roth
<michael.roth@xxxxxxx>, Kuppuswamy Sathyanarayanan
<sathyanarayanan.kuppuswamy@xxxxxxxxxxxxxxx>, Nathan Chancellor
<nathan@xxxxxxxxxx>, Peter Zijlstra <peterz@xxxxxxxxxxxxx>, Sean
Christopherson <seanjc@xxxxxxxxxx>, Joerg Roedel <jroedel@xxxxxxx>,
Mark Rutland <mark.rutland@xxxxxxx>, Kees Cook
<keescook@xxxxxxxxxxxx>, <linux-kernel@xxxxxxxxxxxxxxx>,
<kexec@xxxxxxxxxxxxxxxxxxx>, <linux-kbuild@xxxxxxxxxxxxxxx>


From: "huangjie.albert" <huangjie.albert@xxxxxxxxxxxxx>

In many time-sensitive scenarios, we need a shorter time to restart
the kernel. However, in the current kexec fast restart code, there
are many places in the memory copy operation, verification operation
and decompression operation, which take more time than 500ms. Through
the following patch series. machine_kexec-->start_kernel only takes 15ms

How to measure time:

c code:
uint64_t current_cycles(void)
{
uint32_t low, high;
asm volatile("rdtsc" : "=a"(low), "=d"(high));
return ((uint64_t)low) | ((uint64_t)high << 32);
}
assembly code:
pushq %rax
pushq %rdx
rdtsc
mov %eax,%eax
shl $0x20,%rdx
or %rax,%rdx
movq %rdx,0x840(%r14)
popq %rdx
popq %rax
the timestamp may store in boot_params or kexec control page, so we can
get the all timestamp after kernel boot up.

huangjie.albert (4):
kexec: reuse crash kernel reserved memory for normal kexec
kexec: add CONFING_KEXEC_PURGATORY_SKIP_SIG
x86: Support the uncompressed kernel to speed up booting
x86: boot: avoid memory copy if kernel is uncompressed

arch/x86/Kconfig | 10 +++++++++
arch/x86/boot/compressed/Makefile | 5 ++++-
arch/x86/boot/compressed/head_64.S | 8 +++++--
arch/x86/boot/compressed/misc.c | 35 +++++++++++++++++++++++++-----
arch/x86/purgatory/purgatory.c | 7 ++++++
include/linux/kexec.h | 9 ++++----
include/uapi/linux/kexec.h | 2 ++
kernel/kexec.c | 19 +++++++++++++++-
kernel/kexec_core.c | 16 ++++++++------
kernel/kexec_file.c | 20 +++++++++++++++--
scripts/Makefile.lib | 5 +++++
11 files changed, 114 insertions(+), 22 deletions(-)

--
2.31.1