Re: [PATCH] use x86 cpu park to speedup smp_init in kexec situation

From: David Woodhouse
Date: Tue Feb 16 2021 - 16:19:52 EST


On Tue, 2021-02-16 at 15:10 +0000, David Woodhouse wrote:
> Actually it breaks before that, in rcu_cpu_starting(). A spinlock
> around that, an atomic_t to let the APs do their TSC sync one at a time
> (both in the above tree now), and I have a 75% saving on CPU bringup
> time for my 28-thread Haswell:

Here's a dual-socket Skylake box (EC2 c5.metal)... before:

[ 1.449015] smp: Bringing up secondary CPUs ...
[ 1.449358] x86: Booting SMP configuration:
[ 1.449578] .... node #0, CPUs: #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15 #16 #17 #18 #19 #20 #21 #22 #23
[ 1.514986] .... node #1, CPUs: #24 #25 #26 #27 #28 #29 #30 #31 #32 #33 #34 #35 #36 #37 #38 #39 #40 #41 #42 #43 #44 #45 #46 #47
[ 1.644978] .... node #0, CPUs: #48 #49 #50 #51 #52 #53 #54 #55 #56 #57 #58 #59 #60 #61 #62 #63 #64 #65 #66 #67 #68 #69 #70 #71
[ 1.711970] .... node #1, CPUs: #72 #73 #74 #75 #76 #77 #78 #79 #80 #81 #82 #83 #84 #85 #86 #87 #88 #89 #90 #91 #92 #93 #94 #95
[ 1.781438] Brought CPUs online in 1063391744 cycles
[ 1.782289] smp: Brought up 2 nodes, 96 CPUs
[ 1.782515] smpboot: Max logical packages: 2
[ 1.782738] smpboot: Total of 96 processors activated (576364.89 BogoMIPS)

... and after:

[ 1.445661] smp: Bringing up secondary CPUs ...
[ 1.446004] x86: Booting SMP configuration:
[ 1.446047] .... node #0, CPUs: #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15 #16 #17 #18 #19 #20 #21 #22 #23
[ 1.451048] .... node #1, CPUs: #24 #25 #26 #27 #28 #29 #30 #31 #32 #33 #34 #35 #36 #37 #38 #39 #40 #41 #42 #43 #44 #45 #46 #47
[ 1.455046] .... node #0, CPUs: #48 #49 #50 #51 #52 #53 #54 #55 #56 #57 #58 #59 #60 #61 #62 #63 #64 #65 #66 #67 #68 #69 #70 #71
[ 1.462050] .... node #1, CPUs: #72 #73 #74 #75 #76 #77 #78 #79 #80 #81 #82 #83 #84 #85 #86 #87 #88 #89 #90 #91 #92 #93 #94 #95
[ 1.465983] Brought 96 CPUs to x86/cpu:kick in 68802688 cycles
[ 0.094170] smpboot: CPU 26 Converting physical 1 to logical package 2
[ 1.468078] Brought 96 CPUs to x86/cpu:wait-init in 5178300 cycles
[ 1.476112] Brought CPUs online in 23479546 cycles
[ 1.476298] smp: Brought up 2 nodes, 96 CPUs
[ 1.476520] smpboot: Max logical packages: 2
[ 1.476743] smpboot: Total of 96 processors activated (576000.00 BogoMIPS)

So the CPU bringup went from 334ms to 31ms on that one.

I might try that without spewing over 1KiB to the serial port at 115200
baud during the proceedings, and see if it makes a bigger difference :)


Attachment: smime.p7s
Description: S/MIME cryptographic signature