2018-11-23 09:07:14

by David Hildenbrand

[permalink] [raw]
Subject: [PATCH v2 3/8] kexec: export PG_offline to VMCOREINFO

Right now, pages inflated as part of a balloon driver will be dumped
by dump tools like makedumpfile. While XEN is able to check in the
crash kernel whether a certain pfn is actuall backed by memory in the
hypervisor (see xen_oldmem_pfn_is_ram) and optimize this case, dumps of
other balloon inflated memory will essentially result in zero pages getting
allocated by the hypervisor and the dump getting filled with this data.

The allocation and reading of zero pages can directly be avoided if a
dumping tool could know which pages only contain stale information not to
be dumped.

We now have PG_offline which can be (and already is by virtio-balloon)
used for marking pages as logically offline. Follow up patches will
make use of this flag also in other balloon implementations.

Let's export PG_offline via PAGE_OFFLINE_MAPCOUNT_VALUE, so
makedumpfile can directly skip pages that are logically offline and the
content therefore stale. (we export is as a macro to match how it is
done for PG_buddy. This way it is clearer that this is not actually a flag
but only a very specific mapcount value to represent page types).

Please note that this is also helpful for a problem we were seeing under
Hyper-V: Dumping logically offline memory (pages kept fake offline while
onlining a section via online_page_callback) would under some condicions
result in a kernel panic when dumping them.

Cc: Andrew Morton <[email protected]>
Cc: Dave Young <[email protected]>
Cc: "Kirill A. Shutemov" <[email protected]>
Cc: Baoquan He <[email protected]>
Cc: Omar Sandoval <[email protected]>
Cc: Arnd Bergmann <[email protected]>
Cc: Matthew Wilcox <[email protected]>
Cc: Michal Hocko <[email protected]>
Cc: "Michael S. Tsirkin" <[email protected]>
Cc: Lianbo Jiang <[email protected]>
Cc: Borislav Petkov <[email protected]>
Cc: Kazuhito Hagio <[email protected]>
Acked-by: Michael S. Tsirkin <[email protected]>
Acked-by: Dave Young <[email protected]>
Signed-off-by: David Hildenbrand <[email protected]>
---
kernel/crash_core.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/kernel/crash_core.c b/kernel/crash_core.c
index 933cb3e45b98..093c9f917ed0 100644
--- a/kernel/crash_core.c
+++ b/kernel/crash_core.c
@@ -464,6 +464,8 @@ static int __init crash_save_vmcoreinfo_init(void)
VMCOREINFO_NUMBER(PAGE_BUDDY_MAPCOUNT_VALUE);
#ifdef CONFIG_HUGETLB_PAGE
VMCOREINFO_NUMBER(HUGETLB_PAGE_DTOR);
+#define PAGE_OFFLINE_MAPCOUNT_VALUE (~PG_offline)
+ VMCOREINFO_NUMBER(PAGE_OFFLINE_MAPCOUNT_VALUE);
#endif

arch_crash_save_vmcoreinfo();
--
2.17.2



2019-03-11 09:05:20

by Dave Young

[permalink] [raw]
Subject: Re: [PATCH v2 3/8] kexec: export PG_offline to VMCOREINFO

Hi David,
On 11/22/18 at 11:06am, David Hildenbrand wrote:
> Right now, pages inflated as part of a balloon driver will be dumped
> by dump tools like makedumpfile. While XEN is able to check in the
> crash kernel whether a certain pfn is actuall backed by memory in the
> hypervisor (see xen_oldmem_pfn_is_ram) and optimize this case, dumps of
> other balloon inflated memory will essentially result in zero pages getting
> allocated by the hypervisor and the dump getting filled with this data.
>
> The allocation and reading of zero pages can directly be avoided if a
> dumping tool could know which pages only contain stale information not to
> be dumped.
>
> We now have PG_offline which can be (and already is by virtio-balloon)
> used for marking pages as logically offline. Follow up patches will
> make use of this flag also in other balloon implementations.
>
> Let's export PG_offline via PAGE_OFFLINE_MAPCOUNT_VALUE, so
> makedumpfile can directly skip pages that are logically offline and the
> content therefore stale. (we export is as a macro to match how it is
> done for PG_buddy. This way it is clearer that this is not actually a flag
> but only a very specific mapcount value to represent page types).
>
> Please note that this is also helpful for a problem we were seeing under
> Hyper-V: Dumping logically offline memory (pages kept fake offline while
> onlining a section via online_page_callback) would under some condicions
> result in a kernel panic when dumping them.
>
> Cc: Andrew Morton <[email protected]>
> Cc: Dave Young <[email protected]>
> Cc: "Kirill A. Shutemov" <[email protected]>
> Cc: Baoquan He <[email protected]>
> Cc: Omar Sandoval <[email protected]>
> Cc: Arnd Bergmann <[email protected]>
> Cc: Matthew Wilcox <[email protected]>
> Cc: Michal Hocko <[email protected]>
> Cc: "Michael S. Tsirkin" <[email protected]>
> Cc: Lianbo Jiang <[email protected]>
> Cc: Borislav Petkov <[email protected]>
> Cc: Kazuhito Hagio <[email protected]>
> Acked-by: Michael S. Tsirkin <[email protected]>
> Acked-by: Dave Young <[email protected]>
> Signed-off-by: David Hildenbrand <[email protected]>
> ---
> kernel/crash_core.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/kernel/crash_core.c b/kernel/crash_core.c
> index 933cb3e45b98..093c9f917ed0 100644
> --- a/kernel/crash_core.c
> +++ b/kernel/crash_core.c
> @@ -464,6 +464,8 @@ static int __init crash_save_vmcoreinfo_init(void)
> VMCOREINFO_NUMBER(PAGE_BUDDY_MAPCOUNT_VALUE);
> #ifdef CONFIG_HUGETLB_PAGE
> VMCOREINFO_NUMBER(HUGETLB_PAGE_DTOR);
> +#define PAGE_OFFLINE_MAPCOUNT_VALUE (~PG_offline)
> + VMCOREINFO_NUMBER(PAGE_OFFLINE_MAPCOUNT_VALUE);
> #endif
>
> arch_crash_save_vmcoreinfo();

The patch has been merged, would you mind to send a documentation patch
for the vmcoreinfo, which is added recently in Documentation/kdump/vmcoreinfo.txt

A brief description about how this vmcoreinfo field is used is good to
have.

Thanks
Dave

2019-03-11 09:56:26

by David Hildenbrand

[permalink] [raw]
Subject: Re: [PATCH v2 3/8] kexec: export PG_offline to VMCOREINFO

On 11.03.19 10:04, Dave Young wrote:
> Hi David,
> On 11/22/18 at 11:06am, David Hildenbrand wrote:
>> Right now, pages inflated as part of a balloon driver will be dumped
>> by dump tools like makedumpfile. While XEN is able to check in the
>> crash kernel whether a certain pfn is actuall backed by memory in the
>> hypervisor (see xen_oldmem_pfn_is_ram) and optimize this case, dumps of
>> other balloon inflated memory will essentially result in zero pages getting
>> allocated by the hypervisor and the dump getting filled with this data.
>>
>> The allocation and reading of zero pages can directly be avoided if a
>> dumping tool could know which pages only contain stale information not to
>> be dumped.
>>
>> We now have PG_offline which can be (and already is by virtio-balloon)
>> used for marking pages as logically offline. Follow up patches will
>> make use of this flag also in other balloon implementations.
>>
>> Let's export PG_offline via PAGE_OFFLINE_MAPCOUNT_VALUE, so
>> makedumpfile can directly skip pages that are logically offline and the
>> content therefore stale. (we export is as a macro to match how it is
>> done for PG_buddy. This way it is clearer that this is not actually a flag
>> but only a very specific mapcount value to represent page types).
>>
>> Please note that this is also helpful for a problem we were seeing under
>> Hyper-V: Dumping logically offline memory (pages kept fake offline while
>> onlining a section via online_page_callback) would under some condicions
>> result in a kernel panic when dumping them.
>>
>> Cc: Andrew Morton <[email protected]>
>> Cc: Dave Young <[email protected]>
>> Cc: "Kirill A. Shutemov" <[email protected]>
>> Cc: Baoquan He <[email protected]>
>> Cc: Omar Sandoval <[email protected]>
>> Cc: Arnd Bergmann <[email protected]>
>> Cc: Matthew Wilcox <[email protected]>
>> Cc: Michal Hocko <[email protected]>
>> Cc: "Michael S. Tsirkin" <[email protected]>
>> Cc: Lianbo Jiang <[email protected]>
>> Cc: Borislav Petkov <[email protected]>
>> Cc: Kazuhito Hagio <[email protected]>
>> Acked-by: Michael S. Tsirkin <[email protected]>
>> Acked-by: Dave Young <[email protected]>
>> Signed-off-by: David Hildenbrand <[email protected]>
>> ---
>> kernel/crash_core.c | 2 ++
>> 1 file changed, 2 insertions(+)
>>
>> diff --git a/kernel/crash_core.c b/kernel/crash_core.c
>> index 933cb3e45b98..093c9f917ed0 100644
>> --- a/kernel/crash_core.c
>> +++ b/kernel/crash_core.c
>> @@ -464,6 +464,8 @@ static int __init crash_save_vmcoreinfo_init(void)
>> VMCOREINFO_NUMBER(PAGE_BUDDY_MAPCOUNT_VALUE);
>> #ifdef CONFIG_HUGETLB_PAGE
>> VMCOREINFO_NUMBER(HUGETLB_PAGE_DTOR);
>> +#define PAGE_OFFLINE_MAPCOUNT_VALUE (~PG_offline)
>> + VMCOREINFO_NUMBER(PAGE_OFFLINE_MAPCOUNT_VALUE);
>> #endif
>>
>> arch_crash_save_vmcoreinfo();
>
> The patch has been merged, would you mind to send a documentation patch
> for the vmcoreinfo, which is added recently in Documentation/kdump/vmcoreinfo.txt
>
> A brief description about how this vmcoreinfo field is used is good to
> have.
>

Turns out, it was already documented

PG_lru|PG_private|PG_swapcache|PG_swapbacked|PG_slab|PG_hwpoision
|PG_head_mask|PAGE_BUDDY_MAPCOUNT_VALUE(~PG_buddy)
|PAGE_OFFLINE_MAPCOUNT_VALUE(~PG_offline)
-----------------------------------------------------------------

Page attributes. These flags are used to filter various unnecessary for
dumping pages.


Thanks!

> Thanks
> Dave
>


--

Thanks,

David / dhildenb

2019-03-11 10:05:41

by Dave Young

[permalink] [raw]
Subject: Re: [PATCH v2 3/8] kexec: export PG_offline to VMCOREINFO

> > The patch has been merged, would you mind to send a documentation patch
> > for the vmcoreinfo, which is added recently in Documentation/kdump/vmcoreinfo.txt
> >
> > A brief description about how this vmcoreinfo field is used is good to
> > have.
> >
>
> Turns out, it was already documented
>
> PG_lru|PG_private|PG_swapcache|PG_swapbacked|PG_slab|PG_hwpoision
> |PG_head_mask|PAGE_BUDDY_MAPCOUNT_VALUE(~PG_buddy)
> |PAGE_OFFLINE_MAPCOUNT_VALUE(~PG_offline)
> -----------------------------------------------------------------
>
> Page attributes. These flags are used to filter various unnecessary for
> dumping pages.

Good enough, just ignore the request!

Thanks!