Revert "kdumpctl: sanity check of nr_cpus for x86_64 in case running out of vectors"
This reverts commit 2040103bd7
.
Reason is it's based on the environment of 1st kernel where all
present devices could be active and initialized during bootup.
Then all pci devices will request irqs. While kdump only brings
up those devices which are necessary for vmcore dumping. So this
commit is not meaningful and helpless to very large extent. And
it will print out 'Warning' when calculated result is larger than
1 cpu, actually it's a false positive report most of the time.
So revert the commit, and can check the git history for later
reference.
[dyoung]: on some machine this warning message shows up but
later we found the irq numbers with and without nr_cpus=1 is
quite different so this need more investigation since
the formula is not accurate.
Signed-off-by: Baoquan He <bhe@redhat.com>
Acked-by: Dave Young <dyoung@redhat.com>
This commit is contained in:
parent
c755499fad
commit
85156bfc66
67
kdumpctl
67
kdumpctl
@ -110,71 +110,6 @@ append_cmdline()
|
||||
echo $cmdline
|
||||
}
|
||||
|
||||
# Check the number of cpus for kdump kernel to boot with.
|
||||
# We met an issue on x86_64: kdump runs out of vectors with
|
||||
# "nr_cpus=1" when requesting tons of irqs, so here we check
|
||||
# "nr_cpus=1" and warn users if kdump probably can't work.
|
||||
check_kdump_cpus()
|
||||
{
|
||||
local nr_origin nr_min nr_max
|
||||
local arch=$(uname -m) cmdline=$KDUMP_COMMANDLINE_APPEND
|
||||
|
||||
if [ $arch != "x86_64" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
# We only care about the default "nr_cpus=1".
|
||||
echo $cmdline | grep -E -q "nr_cpus=1[[:space:]]*|nr_cpus=1$"
|
||||
if [ $? -ne 0 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
nr_origin=1
|
||||
|
||||
# Online cpus in first kernel.
|
||||
nr_max=$(grep -c '^processor' /proc/cpuinfo)
|
||||
|
||||
# To calculate the estimated minimal cpus required.
|
||||
nr_min=$(ls -ld /proc/irq/*/ | wc -l)
|
||||
|
||||
# Vectors for io device start from FIRST_EXTERNAL_VECTOR(32),
|
||||
# some high-numbered ones starting from FIRST_EXTERNAL_VECTOR
|
||||
# are reserved for system internal uses.
|
||||
#
|
||||
# We use a flexible variance and assume there are 32 reserved
|
||||
# from FIRST_EXTERNAL_VECTOR. Then the total vectors for device
|
||||
# interrupts percpu is: (256-32)-32=192.
|
||||
#
|
||||
# For "nr_cpus=1", irq and vector have the 1:1 mapping.
|
||||
nr_min=$(($nr_min + 192 - 1))
|
||||
nr_min=$(($nr_min / 192))
|
||||
if [ $nr_min -gt 1 ]; then
|
||||
# The system seems to have tons of interrupts. We need
|
||||
# some further calculation of the number of cpus(>1).
|
||||
# For "nr_cpus>1", irq and vector have the 1:M mapping,
|
||||
# multiple-cpu affinity can consume multiple vectors.
|
||||
# Luckily for x2apic which is commonly deployed on large
|
||||
# modern machines, default case of boot, device bringup
|
||||
# etc will use a single cpu to minimize vector pressure.
|
||||
#
|
||||
# For further safety, we add one more cpu and round it
|
||||
# up to an even number.
|
||||
nr_min=$(($nr_min + 1))
|
||||
nr_min=$(($nr_min + $nr_min % 2))
|
||||
fi
|
||||
|
||||
if [ $nr_min -gt $nr_max ]; then
|
||||
nr_min=$nr_max
|
||||
fi
|
||||
|
||||
if [ $nr_origin -ge $nr_min ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
echo -n "Warning: nr_cpus=1 may not be enough for kdump boot,"
|
||||
echo " try nr_cpus=$nr_min or larger instead"
|
||||
}
|
||||
|
||||
# This function performs a series of edits on the command line.
|
||||
# Store the final result in global $KDUMP_COMMANDLINE.
|
||||
prepare_cmdline()
|
||||
@ -211,8 +146,6 @@ prepare_cmdline()
|
||||
fi
|
||||
|
||||
KDUMP_COMMANDLINE=$cmdline
|
||||
|
||||
check_kdump_cpus
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user