On 2016/05/19 at 16:39, Dave Young wrote:
On 05/19/16 at 04:26pm, Xunlei Pang wrote:
On 2016/05/19 at 16:13, Dave Young wrote:
On 05/19/16 at 03:45pm, Xunlei Pang wrote:
There are some complaints about nfs kdump that users must mount nfs beforehand, which may cause some overhead to nfs server. For example, there're thounsands of clients deployed with kdump diskless boot, each time the client is boot up, it will trigger kdump rebuilding so will mount nfs, thus resulting in thousands of nfs request concurrently imposed on the same nfs server.
We introduce a new way of specifying mount information via the already-existent "dracut_args" directive, we will skip all the filesystem mounting and checking things for it. So it can be used in the above-mentioned nfs scenario and avoid creating severe nfs server overhead.
Specifically, if there is any "--mount" information specifed via "dracut_args" in /etc/kdump.conf, always use it as the final mount without any check(users are expected to ensure its correctness), it overrides any target specified in /etc/kdump.conf.
As an example: dracut_args --mount "192.168.1.1:/test test nfs defaults,x-initrd.mount"
Could also update the kdump howto to define the valid format of --mount?
Sure
and give an example. Should we limit it to nfs only or for all fs types?
The approach itself is a general implementation, I personally perfer it for all fs types.
Ok.
NOTE: 1)Only one mount information can be specified via "dracut_args". 2)Dracut will create <mountpoint> if it doesn't exist in kdump kernel.
Suggested-by: Dave Young dyoung@redhat.com Signed-off-by: Xunlei Pang xlpang@redhat.com
v1->v2: -Consider "dracut_args" in is_user_configured_dump_target(). -Add dracut "nfs" module properly. -Prohibit specifying multiple mount information via "dracut_args".
kdump-lib.sh | 25 ++++++++++++++++++++++++- kdumpctl | 8 +++++++- mkdumprd | 9 +++++++++ 3 files changed, 40 insertions(+), 2 deletions(-)
diff --git a/kdump-lib.sh b/kdump-lib.sh index fc2c036..e90fe4c 100755 --- a/kdump-lib.sh +++ b/kdump-lib.sh @@ -45,7 +45,8 @@ is_fs_dump_target()
is_user_configured_dump_target() {
- return $(is_ssh_dump_target || is_nfs_dump_target || is_raw_dump_target || is_fs_dump_target)
- return $(is_ssh_dump_target || is_nfs_dump_target || is_raw_dump_target \
|| is_fs_dump_target || dracut_args_contains_mount)
}
strip_comments() @@ -279,3 +280,25 @@ is_hostname() fi echo $1 | grep -q "[a-zA-Z]" }
+# If "dracut_args" contains "--mount" information, use it +# directly without any check(users are expected to ensure +# its correctness). It overrides any target specified in +# /etc/kdump.conf. +dracut_args_contains_mount() +{
- return $(grep ^dracut_args /etc/kdump.conf | grep -q "--mount")
+}
+get_fstype_from_dracut_args() +{
- local user_dracut_args fstype
- user_dracut_args=$(grep ^dracut_args /etc/kdump.conf | grep "--mount | head -1")
- if [[ -n "$user_dracut_args" ]]; then
fstype=$(echo $user_dracut_args | awk -F "--mount \"" '{print $2}' | cut -d' ' -f3)
- fi
- echo $fstype
+}
diff --git a/kdumpctl b/kdumpctl index fcc9ad0..4e9d6a4 100755 --- a/kdumpctl +++ b/kdumpctl @@ -236,7 +236,8 @@ check_config() { local nr
- nr=$(awk 'BEGIN{cnt=0} /^raw|^ssh[[:blank:]]|^nfs|^ext[234]|^xfs|^btrfs|^minix/{cnt++} END{print cnt}' $KDUMP_CONFIG_FILE)
- nr=$(awk 'BEGIN{cnt=0} /^raw|^ssh[[:blank:]]|^nfs|^ext[234]|^xfs|^btrfs|^minix| \
[ $nr -gt 1 ] && { echo "More than one dump targets specified." return 1^dracut_args .*\-\-mount/{cnt++} END{print cnt}' $KDUMP_CONFIG_FILE)
@@ -365,6 +366,11 @@ check_dump_fs_modified() local _new_dev _new_mntpoint _new_fstype local _target _path _dracut_args
- # No need to check in case of mount target specified via "dracut_args".
- if dracut_args_contains_mount; then
return 0
- fi
- # No need to check in case of raw target. # Currently we do not check also if ssh/nfs target is specified if is_ssh_dump_target || is_nfs_dump_target || is_raw_dump_target; then
diff --git a/mkdumprd b/mkdumprd index 78afb1a..2156be6 100644 --- a/mkdumprd +++ b/mkdumprd @@ -497,6 +497,12 @@ do extra_modules="$extra_modules $config_val" ;; ext[234]|xfs|btrfs|minix|nfs)
# Use the mount information in "dracut_args" specifed by users
# in /etc/kdump.conf, skip further parsing.
if dracut_args_contains_mount; then
continue
Do we allow one specify fs dump here at the same time, if no a warning here is good to tell that we will use --mount instead.
I'm a little worried about multiple "--mount" passed to dracut, at least one I can think of now is Pratyush's recent force_rebuild patchset, it relys on the first "--mount" to get the old target, old mountpoint, old fstype.
That's why I prohibit multiple "--mount" and skip "target" in the patch.
Understand, I agree to skip "target" but we need a warning to tell user or error out here, a failure maybe better.
Actually, we can skip this, kdumpctl will do check_config(), and it bails out earlier at that place for the multiple targets cases.
Regards, Xunlei
Regards, Xunlei
fi
if ! findmnt $config_val >/dev/null; then perror_exit "Dump target $config_val is probably not mounted." fi
@@ -544,6 +550,9 @@ do verify_core_collector "$config_val" ;; dracut_args)
if [[ $(get_fstype_from_dracut_args) = nfs* ]]; then
add_dracut_module "nfs"
*)fi add_dracut_arg $config_val ;;
-- 1.8.3.1 _______________________________________________ kexec mailing list kexec@lists.fedoraproject.org http://lists.fedoraproject.org/admin/lists/kexec@lists.fedoraproject.org
kexec mailing list kexec@lists.fedoraproject.org http://lists.fedoraproject.org/admin/lists/kexec@lists.fedoraproject.org
Thanks Dave
Actually, we can skip this, kdumpctl will do check_config(), and it bails out earlier at that place for the multiple targets cases.
Ok, if so add a comment around the code would be better. BTW, in the howto documentation we should clarify user should do a test first and ensure it works because kdump does not preapre the mount and check the validity.
Thanks Dave