On Fri, Nov 19, 2021 at 11:23:05AM +0800, Coiby Xu wrote:
Say let's add extra 20M to
"2G-4G:384M,4G-16G:512M,16G-64G:1G,64G-128G:2G,128G-:4G",
add_extra_mem_to_crashkernel will cover the above string to
"2G-4G:406M,4G-16G:534M,16G-64G:1046M,64G-128G:2070M,128G-:4118M"
The "crashkernel=" is a practice value. There is no connection between
the scale of the different system memory size.
I do not strongly argue, but maybe let user explictly to set a value is
a better choice.
Thanks,
Pingfan
Signed-off-by: Coiby Xu <coxu(a)redhat.com>
---
kdump-lib.sh | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/kdump-lib.sh b/kdump-lib.sh
index 94cc8ff..5c79436 100755
--- a/kdump-lib.sh
+++ b/kdump-lib.sh
@@ -822,6 +822,41 @@ get_recommend_size()
IFS="$OLDIFS"
}
+# add memory to crashkernel string
+# $1 extra memory size, unit:M
+# return crashkernel string (unit=M)
+add_extra_mem_to_crashkernel()
+{
+ local _extra_mem="$1" _ck_cmdline="$2" _new_ck_cmdline
+ local _range _mem _size _unit _ele _new_ele
+ local OLDIFS="$IFS"
+
+ IFS=','
+ for _ele in $_ck_cmdline; do
+ _range=$(awk -F ":" '{print $1}' <<< "$_ele")
+ _mem=$(awk -F ":" '{print $2}' <<< "$_ele")
+ _size=${_mem::-1}
+ _unit=${_mem: -1}
+ if [[ $_unit != "M" ]] && [[ $_unit != "G" ]]; then
+ perror_exit "can't process $_unit"
+ fi
+
+ if [[ $_unit == 'G' ]]; then
+ _size=$((_size * 1024))
+ fi
+ _size=$((_size + _extra_mem))
+
+ _new_ele="${_range}:${_size}M"
+ if [[ -z $_new_ck_cmdline ]]; then
+ _new_ck_cmdline=$_new_ele
+ else
+ _new_ck_cmdline="${_new_ck_cmdline},${_new_ele}"
+ fi
+ done
+ IFS="$OLDIFS"
+ echo -n "$_new_ck_cmdline"
+}
+
# get default crashkernel
# $1 dump mode, if not specified, dump_mode will be judged by is_fadump_capable
kdump_get_arch_recommend_crashkernel()
--
2.31.1