From: Eric DeVolder <eric.devolder@oracle.com>
To: kexec@lists.infradead.org
Subject: [PATCH v8 0/7] crash: Kernel handling of CPU and memory hot un/plug
Date: Tue, 31 May 2022 17:22:40 -0500 [thread overview]
Message-ID: <79ad6be3-a817-b6bf-b32b-74b80a512c14@oracle.com> (raw)
In-Reply-To: <5358be66-e545-4482-bad6-00d3d53aac8a@redhat.com>
On 5/31/22 08:18, David Hildenbrand wrote:
> On 26.05.22 15:39, Sourabh Jain wrote:
>> Hello Eric,
>>
>> On 26/05/22 18:46, Eric DeVolder wrote:
>>>
>>>
>>> On 5/25/22 10:13, Sourabh Jain wrote:
>>>> Hello Eric,
>>>>
>>>> On 06/05/22 00:15, Eric DeVolder wrote:
>>>>> When the kdump service is loaded, if a CPU or memory is hot
>>>>> un/plugged, the crash elfcorehdr (for x86), which describes the CPUs
>>>>> and memory in the system, must also be updated, else the resulting
>>>>> vmcore is inaccurate (eg. missing either CPU context or memory
>>>>> regions).
>>>>>
>>>>> The current solution utilizes udev to initiate an unload-then-reload
>>>>> of the kdump image (e. kernel, initrd, boot_params, puratory and
>>>>> elfcorehdr) by the userspace kexec utility. In previous posts I have
>>>>> outlined the significant performance problems related to offloading
>>>>> this activity to userspace.
>>>>>
>>>>> This patchset introduces a generic crash hot un/plug handler that
>>>>> registers with the CPU and memory notifiers. Upon CPU or memory
>>>>> changes, this generic handler is invoked and performs important
>>>>> housekeeping, for example obtaining the appropriate lock, and then
>>>>> invokes an architecture specific handler to do the appropriate
>>>>> updates.
>>>>>
>>>>> In the case of x86_64, the arch specific handler generates a new
>>>>> elfcorehdr, and overwrites the old one in memory. No involvement
>>>>> with userspace needed.
>>>>>
>>>>> To realize the benefits/test this patchset, one must make a couple
>>>>> of minor changes to userspace:
>>>>>
>>>>> ? - Disable the udev rule for updating kdump on hot un/plug changes.
>>>>> ??? Add the following as the first two lines to the udev rule file
>>>>> ??? /usr/lib/udev/rules.d/98-kexec.rules:
>>>>
>>>> If we can have a sysfs attribute to advertise this feature then
>>>> userspace
>>>> utilities (kexec tool/udev rules) can take action accordingly. In
>>>> short, it will
>>>> help us maintain backward compatibility.
>>>>
>>>> kexec tool can use the new sysfs attribute and allocate additional
>>>> buffer space
>>>> for elfcorehdr accordingly. Similarly, the checksum-related changes
>>>> can come
>>>> under this check.
>>>>
>>>> Udev rule can use this sysfs file to decide kdump service reload is
>>>> required or not.
>>>
>>> Great idea. I've been working on the corresponding udev and
>>> kexec-tools changes and your input/idea here is quite timely.
>>>
>>> I have boolean "crash_hotplug" as a core_param(), so it will show up as:
>>>
>>> # cat /sys/module/kernel/parameters/crash_hotplug
>>> N
>>
>> How about using 0-1 instead Y/N?
>> 0 = crash hotplug not supported
>> 1 = crash hotplug supported
>>
>> Also how about keeping sysfs here instead?
>> /sys/kernel/kexec_crash_hotplug
>
> It's not only about hotplug, though. And actually we care about
> onlining/offlining. Hmm, I wonder if there is a better name for this
> automatic handling of cpu and memory devices.
>
In the upcoming v9, there is no /sys/kernel/crash/kexec_crash_hotplug; I have sysfs attributes for
memory blocks and CPUs named 'crash_hotplug' that can be utilized directly in udev rule as
ATTR{crash_hotplug} to determine if the kernel is handling this for crash kernel update purposes.
Here's the current commit message for that change:
====
crash: memory and CPU hotplug sysfs attributes
This introduces the crash_hotplug attribute for memory and CPUs
for use by userspace. This change directly facilitates the udev
rule for managing userspace re-loading of the crash kernel.
For memory, this changeset introduces the crash_hotplug attribute
to the /sys/devices/system/memory directory. For example:
# udevadm info --attribute-walk /sys/devices/system/memory/memory81
looking at device '/devices/system/memory/memory81':
KERNEL=="memory81"
SUBSYSTEM=="memory"
DRIVER==""
ATTR{online}=="1"
ATTR{phys_device}=="0"
ATTR{phys_index}=="00000051"
ATTR{removable}=="1"
ATTR{state}=="online"
ATTR{valid_zones}=="Movable"
looking at parent device '/devices/system/memory':
KERNELS=="memory"
SUBSYSTEMS==""
DRIVERS==""
ATTRS{auto_online_blocks}=="offline"
ATTRS{block_size_bytes}=="8000000"
ATTRS{crash_hotplug}=="1"
For CPUs, this changeset introduces the crash_hotplug attribute
to the /sys/devices/system/cpu directory. For example:
# udevadm info --attribute-walk /sys/devices/system/cpu/cpu0
looking at device '/devices/system/cpu/cpu0':
KERNEL=="cpu0"
SUBSYSTEM=="cpu"
DRIVER=="processor"
ATTR{crash_notes}=="277c38600"
ATTR{crash_notes_size}=="368"
ATTR{online}=="1"
looking at parent device '/devices/system/cpu':
KERNELS=="cpu"
SUBSYSTEMS==""
DRIVERS==""
ATTRS{crash_hotplug}=="1"
ATTRS{isolated}==""
ATTRS{kernel_max}=="8191"
ATTRS{nohz_full}==" (null)"
ATTRS{offline}=="4-7"
ATTRS{online}=="0-3"
ATTRS{possible}=="0-7"
ATTRS{present}=="0-3"
With these changes in place, and by using the same attribute
crash_hotplug name, it is possible to efficiently instruct the
udev rule to skip crash kernel reloading.
For example, the following is the proposed udev rule change for RHEL
system 98-kexec.rules (as the first two lines of the rule file):
# The kernel handles updates to crash elfcorehdr
ATTRS{crash_hotplug}=="1", GOTO="kdump_reload_end"
When examined in the context of 98-kexec.rules, the above change
tests if crash_hotplug is set, and if so, it skips the userspace
initiated unload-then-reload of the crash kernel.
=====
Does that work for you?
Eric
prev parent reply other threads:[~2022-05-31 22:22 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-05 18:45 [PATCH v8 0/7] crash: Kernel handling of CPU and memory hot un/plug Eric DeVolder
2022-05-05 18:45 ` [PATCH v8 1/7] x86/crash: fix minor typo/bug in debug message Eric DeVolder
[not found] ` <72764a3c-8b8c-8652-945e-9b15f31cda15@linux.ibm.com>
2022-05-09 5:26 ` Baoquan He
2022-05-09 15:41 ` Eric DeVolder
2022-05-05 18:45 ` [PATCH v8 2/7] crash: prototype change for crash_prepare_elf64_headers Eric DeVolder
2022-05-12 8:42 ` David Hildenbrand
2022-05-12 16:10 ` Eric DeVolder
2022-05-05 18:45 ` [PATCH v8 3/7] crash: add generic infrastructure for crash hotplug support Eric DeVolder
2022-05-06 7:12 ` Baoquan He
2022-05-09 15:43 ` Eric DeVolder
2022-05-11 10:09 ` Baoquan He
2022-05-12 8:52 ` David Hildenbrand
2022-05-12 16:10 ` Eric DeVolder
2022-05-31 13:15 ` David Hildenbrand
2022-05-31 22:25 ` Eric DeVolder
2022-06-15 9:53 ` David Hildenbrand
2022-05-23 8:36 ` Sourabh Jain
2022-05-23 15:04 ` Eric DeVolder
2022-05-05 18:46 ` [PATCH v8 4/7] kexec: exclude elfcorehdr from the segment digest Eric DeVolder
2022-05-11 10:11 ` Baoquan He
2022-05-05 18:46 ` [PATCH v8 5/7] kexec: exclude hot remove cpu from elfcorehdr notes Eric DeVolder
2022-05-11 10:13 ` Baoquan He
2022-05-05 18:46 ` [PATCH v8 6/7] x86/crash: Add x86 crash hotplug support for kexec_file_load Eric DeVolder
2022-05-25 5:25 ` Sourabh Jain
2022-05-25 13:51 ` Eric DeVolder
2022-05-05 18:46 ` [PATCH v8 7/7] x86/crash: Add x86 crash hotplug support for kexec_load Eric DeVolder
2022-05-25 14:26 ` Sourabh Jain
2022-05-31 22:18 ` Eric DeVolder
2022-05-25 15:13 ` [PATCH v8 0/7] crash: Kernel handling of CPU and memory hot un/plug Sourabh Jain
2022-05-26 13:16 ` Eric DeVolder
2022-05-26 13:39 ` Sourabh Jain
2022-05-26 13:44 ` Eric DeVolder
2022-05-31 13:18 ` David Hildenbrand
2022-05-31 22:22 ` Eric DeVolder [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=79ad6be3-a817-b6bf-b32b-74b80a512c14@oracle.com \
--to=eric.devolder@oracle.com \
--cc=kexec@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox