All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] ppc64: fix compressed dump with pseries kernel
@ 2016-08-03 19:55 Laurent Vivier
  2016-08-04  2:38 ` David Gibson
  2016-08-05  9:30 ` Andrew Jones
  0 siblings, 2 replies; 11+ messages in thread
From: Laurent Vivier @ 2016-08-03 19:55 UTC (permalink / raw)
  To: David Gibson, Alexander Graf; +Cc: qemu-ppc, qemu-devel, Laurent Vivier

If we don't provide the page size in target-ppc:cpu_get_dump_info(),
the default one (TARGET_PAGE_SIZE, 4KB) is used to create
the compressed dump. It works fine with Macintosh, but not with
pseries as the kernel default page size is 64KB.

Without this patch, if we generate a compressed dump in the QEMU monitor:

    (qemu) dump-guest-memory -z qemu.dump

This dump cannot be read by crash:

    # crash vmlinux qemu.dump
    ...
    WARNING: cannot translate vmemmap kernel virtual addresses:
             commands requiring page structure contents will fail
    ...

Signed-off-by: Laurent Vivier <lvivier@redhat.com>
---
 target-ppc/arch_dump.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/target-ppc/arch_dump.c b/target-ppc/arch_dump.c
index df1fd8c..ad37a59 100644
--- a/target-ppc/arch_dump.c
+++ b/target-ppc/arch_dump.c
@@ -220,6 +220,11 @@ int cpu_get_dump_info(ArchDumpInfo *info,
     } else {
         info->d_endian = ELFDATA2LSB;
     }
+    /* 64KB is the page size default for pseries kernel */
+    if (strncmp(object_get_typename(qdev_get_machine()),
+                "pseries-", 8) == 0) {
+        info->page_size = (1U << 16);
+    }
 
     return 0;
 }
-- 
2.5.5

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [PATCH] ppc64: fix compressed dump with pseries kernel
  2016-08-03 19:55 [Qemu-devel] [PATCH] ppc64: fix compressed dump with pseries kernel Laurent Vivier
@ 2016-08-04  2:38 ` David Gibson
  2016-08-04  8:41   ` Laurent Vivier
  2016-08-05  9:30 ` Andrew Jones
  1 sibling, 1 reply; 11+ messages in thread
From: David Gibson @ 2016-08-04  2:38 UTC (permalink / raw)
  To: Laurent Vivier; +Cc: Alexander Graf, qemu-ppc, qemu-devel

[-- Attachment #1: Type: text/plain, Size: 1888 bytes --]

On Wed, Aug 03, 2016 at 09:55:07PM +0200, Laurent Vivier wrote:
> If we don't provide the page size in target-ppc:cpu_get_dump_info(),
> the default one (TARGET_PAGE_SIZE, 4KB) is used to create
> the compressed dump. It works fine with Macintosh, but not with
> pseries as the kernel default page size is 64KB.
> 
> Without this patch, if we generate a compressed dump in the QEMU monitor:
> 
>     (qemu) dump-guest-memory -z qemu.dump
> 
> This dump cannot be read by crash:
> 
>     # crash vmlinux qemu.dump
>     ...
>     WARNING: cannot translate vmemmap kernel virtual addresses:
>              commands requiring page structure contents will fail
>     ...
> 
> Signed-off-by: Laurent Vivier <lvivier@redhat.com>
> ---
>  target-ppc/arch_dump.c | 5 +++++
>  1 file changed, 5 insertions(+)

Urgh.. so, really the page size used by the guest kernel is a
guest-side detail, and it's certainly possible to build a 4kiB page
guest kernel, although 64kiB is the norm.

This might be the best we can do, but it'd be nice if we could probe
or otherwise avoid relying on this assumption about the guest kernel.

> 
> diff --git a/target-ppc/arch_dump.c b/target-ppc/arch_dump.c
> index df1fd8c..ad37a59 100644
> --- a/target-ppc/arch_dump.c
> +++ b/target-ppc/arch_dump.c
> @@ -220,6 +220,11 @@ int cpu_get_dump_info(ArchDumpInfo *info,
>      } else {
>          info->d_endian = ELFDATA2LSB;
>      }
> +    /* 64KB is the page size default for pseries kernel */
> +    if (strncmp(object_get_typename(qdev_get_machine()),
> +                "pseries-", 8) == 0) {
> +        info->page_size = (1U << 16);
> +    }
>  
>      return 0;
>  }

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [PATCH] ppc64: fix compressed dump with pseries kernel
  2016-08-04  2:38 ` David Gibson
@ 2016-08-04  8:41   ` Laurent Vivier
  2016-08-05  7:49     ` David Gibson
  2016-08-05  9:26     ` Andrew Jones
  0 siblings, 2 replies; 11+ messages in thread
From: Laurent Vivier @ 2016-08-04  8:41 UTC (permalink / raw)
  To: David Gibson
  Cc: Alexander Graf, qemu-ppc, qemu-devel, Andrew Jones, Thomas Huth



On 04/08/2016 04:38, David Gibson wrote:
> On Wed, Aug 03, 2016 at 09:55:07PM +0200, Laurent Vivier wrote:
>> If we don't provide the page size in target-ppc:cpu_get_dump_info(),
>> the default one (TARGET_PAGE_SIZE, 4KB) is used to create
>> the compressed dump. It works fine with Macintosh, but not with
>> pseries as the kernel default page size is 64KB.
>>
>> Without this patch, if we generate a compressed dump in the QEMU monitor:
>>
>>     (qemu) dump-guest-memory -z qemu.dump
>>
>> This dump cannot be read by crash:
>>
>>     # crash vmlinux qemu.dump
>>     ...
>>     WARNING: cannot translate vmemmap kernel virtual addresses:
>>              commands requiring page structure contents will fail
>>     ...
>>
>> Signed-off-by: Laurent Vivier <lvivier@redhat.com>
>> ---
>>  target-ppc/arch_dump.c | 5 +++++
>>  1 file changed, 5 insertions(+)
> 
> Urgh.. so, really the page size used by the guest kernel is a
> guest-side detail, and it's certainly possible to build a 4kiB page
> guest kernel, although 64kiB is the norm.

virtio-balloon doesn't work with 4K kernel.

> This might be the best we can do, but it'd be nice if we could probe
> or otherwise avoid relying on this assumption about the guest kernel.

I agree with you but none of the other architectures probes for the page
size.

For instance ARM: |I cc: Drew to know how he has chosen the values]

    if (arm_feature(env, ARM_FEATURE_AARCH64)) {
...
        info->page_size = (1 << 16);
...
    } else {
...
        info->page_size = (1 << 12);
...
    }

In the kernel:

arch/arm64/include/asm/page.h:

#define PAGE_SHIFT		CONFIG_ARM64_PAGE_SHIFT

arch/arm64/Kconfig:

config ARM64_PAGE_SHIFT
        int
        default 16 if ARM64_64K_PAGES
        default 14 if ARM64_16K_PAGES
        default 12

choice
        prompt "Page size"
        default ARM64_4K_PAGES
        help
          Page size (translation granule) configuration.

config ARM64_4K_PAGES
        bool "4KB"
        help
          This feature enables 4KB pages support.

config ARM64_16K_PAGES
        bool "16KB"
        help
          The system will use 16KB pages support. AArch32 emulation
          requires applications compiled with 16K (or a multiple of 16K)
          aligned segments.

config ARM64_64K_PAGES
        bool "64KB"
        help
          This feature enables 64KB pages support (4KB by default)
          allowing only two levels of page tables and faster TLB
          look-up. AArch32 emulation requires applications compiled
          with 64K aligned segments.

endchoice

I think we can't rely on the CPU state or the memory content as they can
be corrupted.

Thanks,
Laurent

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [PATCH] ppc64: fix compressed dump with pseries kernel
  2016-08-04  8:41   ` Laurent Vivier
@ 2016-08-05  7:49     ` David Gibson
  2016-08-05  8:03       ` Laurent Vivier
  2016-08-05  8:14       ` Thomas Huth
  2016-08-05  9:26     ` Andrew Jones
  1 sibling, 2 replies; 11+ messages in thread
From: David Gibson @ 2016-08-05  7:49 UTC (permalink / raw)
  To: Laurent Vivier
  Cc: Alexander Graf, qemu-ppc, qemu-devel, Andrew Jones, Thomas Huth

[-- Attachment #1: Type: text/plain, Size: 3624 bytes --]

On Thu, Aug 04, 2016 at 10:41:16AM +0200, Laurent Vivier wrote:
1;4402;0c> 
> 
> On 04/08/2016 04:38, David Gibson wrote:
> > On Wed, Aug 03, 2016 at 09:55:07PM +0200, Laurent Vivier wrote:
> >> If we don't provide the page size in target-ppc:cpu_get_dump_info(),
> >> the default one (TARGET_PAGE_SIZE, 4KB) is used to create
> >> the compressed dump. It works fine with Macintosh, but not with
> >> pseries as the kernel default page size is 64KB.
> >>
> >> Without this patch, if we generate a compressed dump in the QEMU monitor:
> >>
> >>     (qemu) dump-guest-memory -z qemu.dump
> >>
> >> This dump cannot be read by crash:
> >>
> >>     # crash vmlinux qemu.dump
> >>     ...
> >>     WARNING: cannot translate vmemmap kernel virtual addresses:
> >>              commands requiring page structure contents will fail
> >>     ...
> >>
> >> Signed-off-by: Laurent Vivier <lvivier@redhat.com>
> >> ---
> >>  target-ppc/arch_dump.c | 5 +++++
> >>  1 file changed, 5 insertions(+)
> > 
> > Urgh.. so, really the page size used by the guest kernel is a
> > guest-side detail, and it's certainly possible to build a 4kiB page
> > guest kernel, although 64kiB is the norm.
> 
> virtio-balloon doesn't work with 4K kernel.

It doesn't?  Balloon has rather a lot of flaws, but I didn't think
that was one of them.

> > This might be the best we can do, but it'd be nice if we could probe
> > or otherwise avoid relying on this assumption about the guest kernel.
> 
> I agree with you but none of the other architectures probes for the page
> size.

Yeah :/

> For instance ARM: |I cc: Drew to know how he has chosen the values]
> 
>     if (arm_feature(env, ARM_FEATURE_AARCH64)) {
> ...
>         info->page_size = (1 << 16);
> ...
>     } else {
> ...
>         info->page_size = (1 << 12);
> ...
>     }
> 
> In the kernel:
> 
> arch/arm64/include/asm/page.h:
> 
> #define PAGE_SHIFT		CONFIG_ARM64_PAGE_SHIFT
> 
> arch/arm64/Kconfig:
> 
> config ARM64_PAGE_SHIFT
>         int
>         default 16 if ARM64_64K_PAGES
>         default 14 if ARM64_16K_PAGES
>         default 12
> 
> choice
>         prompt "Page size"
>         default ARM64_4K_PAGES
>         help
>           Page size (translation granule) configuration.
> 
> config ARM64_4K_PAGES
>         bool "4KB"
>         help
>           This feature enables 4KB pages support.
> 
> config ARM64_16K_PAGES
>         bool "16KB"
>         help
>           The system will use 16KB pages support. AArch32 emulation
>           requires applications compiled with 16K (or a multiple of 16K)
>           aligned segments.
> 
> config ARM64_64K_PAGES
>         bool "64KB"
>         help
>           This feature enables 64KB pages support (4KB by default)
>           allowing only two levels of page tables and faster TLB
>           look-up. AArch32 emulation requires applications compiled
>           with 64K aligned segments.
> 
> endchoice
> 
> I think we can't rely on the CPU state or the memory content as they can
> be corrupted.

I guess.  I don't know that we can really get what we want from there
anyway, at least not without even more assumptions about the guest
state than.

Hrm.  I guess I'm ok with the change, but I'd like the commit message
updated to recognize that this is a compromise just designed to work
with the most common guests.

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [PATCH] ppc64: fix compressed dump with pseries kernel
  2016-08-05  7:49     ` David Gibson
@ 2016-08-05  8:03       ` Laurent Vivier
  2016-08-05  8:14       ` Thomas Huth
  1 sibling, 0 replies; 11+ messages in thread
From: Laurent Vivier @ 2016-08-05  8:03 UTC (permalink / raw)
  To: David Gibson
  Cc: Alexander Graf, qemu-ppc, qemu-devel, Andrew Jones, Thomas Huth



On 05/08/2016 09:49, David Gibson wrote:
> On Thu, Aug 04, 2016 at 10:41:16AM +0200, Laurent Vivier wrote:
> 1;4402;0c> 
>>
>> On 04/08/2016 04:38, David Gibson wrote:
>>> On Wed, Aug 03, 2016 at 09:55:07PM +0200, Laurent Vivier wrote:
>>>> If we don't provide the page size in target-ppc:cpu_get_dump_info(),
>>>> the default one (TARGET_PAGE_SIZE, 4KB) is used to create
>>>> the compressed dump. It works fine with Macintosh, but not with
>>>> pseries as the kernel default page size is 64KB.
>>>>
>>>> Without this patch, if we generate a compressed dump in the QEMU monitor:
>>>>
>>>>     (qemu) dump-guest-memory -z qemu.dump
>>>>
>>>> This dump cannot be read by crash:
>>>>
>>>>     # crash vmlinux qemu.dump
>>>>     ...
>>>>     WARNING: cannot translate vmemmap kernel virtual addresses:
>>>>              commands requiring page structure contents will fail
>>>>     ...
>>>>
>>>> Signed-off-by: Laurent Vivier <lvivier@redhat.com>
>>>> ---
>>>>  target-ppc/arch_dump.c | 5 +++++
>>>>  1 file changed, 5 insertions(+)
>>>
>>> Urgh.. so, really the page size used by the guest kernel is a
>>> guest-side detail, and it's certainly possible to build a 4kiB page
>>> guest kernel, although 64kiB is the norm.
>>
>> virtio-balloon doesn't work with 4K kernel.
> 
> It doesn't?  Balloon has rather a lot of flaws, but I didn't think
> that was one of them.
> 
>>> This might be the best we can do, but it'd be nice if we could probe
>>> or otherwise avoid relying on this assumption about the guest kernel.
>>
>> I agree with you but none of the other architectures probes for the page
>> size.
> 
> Yeah :/
> 
>> For instance ARM: |I cc: Drew to know how he has chosen the values]
>>
>>     if (arm_feature(env, ARM_FEATURE_AARCH64)) {
>> ...
>>         info->page_size = (1 << 16);
>> ...
>>     } else {
>> ...
>>         info->page_size = (1 << 12);
>> ...
>>     }
>>
>> In the kernel:
>>
>> arch/arm64/include/asm/page.h:
>>
>> #define PAGE_SHIFT		CONFIG_ARM64_PAGE_SHIFT
>>
>> arch/arm64/Kconfig:
>>
>> config ARM64_PAGE_SHIFT
>>         int
>>         default 16 if ARM64_64K_PAGES
>>         default 14 if ARM64_16K_PAGES
>>         default 12
>>
>> choice
>>         prompt "Page size"
>>         default ARM64_4K_PAGES
>>         help
>>           Page size (translation granule) configuration.
>>
>> config ARM64_4K_PAGES
>>         bool "4KB"
>>         help
>>           This feature enables 4KB pages support.
>>
>> config ARM64_16K_PAGES
>>         bool "16KB"
>>         help
>>           The system will use 16KB pages support. AArch32 emulation
>>           requires applications compiled with 16K (or a multiple of 16K)
>>           aligned segments.
>>
>> config ARM64_64K_PAGES
>>         bool "64KB"
>>         help
>>           This feature enables 64KB pages support (4KB by default)
>>           allowing only two levels of page tables and faster TLB
>>           look-up. AArch32 emulation requires applications compiled
>>           with 64K aligned segments.
>>
>> endchoice
>>
>> I think we can't rely on the CPU state or the memory content as they can
>> be corrupted.
> 
> I guess.  I don't know that we can really get what we want from there
> anyway, at least not without even more assumptions about the guest
> state than.
> 
> Hrm.  I guess I'm ok with the change, but I'd like the commit message
> updated to recognize that this is a compromise just designed to work
> with the most common guests.
> 

Could you update the message or should I send a new patch?

Thanks,
Laurent

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [PATCH] ppc64: fix compressed dump with pseries kernel
  2016-08-05  7:49     ` David Gibson
  2016-08-05  8:03       ` Laurent Vivier
@ 2016-08-05  8:14       ` Thomas Huth
  1 sibling, 0 replies; 11+ messages in thread
From: Thomas Huth @ 2016-08-05  8:14 UTC (permalink / raw)
  To: David Gibson, Laurent Vivier
  Cc: Alexander Graf, qemu-ppc, qemu-devel, Andrew Jones

[-- Attachment #1: Type: text/plain, Size: 1798 bytes --]

On 05.08.2016 09:49, David Gibson wrote:
> On Thu, Aug 04, 2016 at 10:41:16AM +0200, Laurent Vivier wrote:
> 1;4402;0c> 
>>
>> On 04/08/2016 04:38, David Gibson wrote:
>>> On Wed, Aug 03, 2016 at 09:55:07PM +0200, Laurent Vivier wrote:
>>>> If we don't provide the page size in target-ppc:cpu_get_dump_info(),
>>>> the default one (TARGET_PAGE_SIZE, 4KB) is used to create
>>>> the compressed dump. It works fine with Macintosh, but not with
>>>> pseries as the kernel default page size is 64KB.
>>>>
>>>> Without this patch, if we generate a compressed dump in the QEMU monitor:
>>>>
>>>>     (qemu) dump-guest-memory -z qemu.dump
>>>>
>>>> This dump cannot be read by crash:
>>>>
>>>>     # crash vmlinux qemu.dump
>>>>     ...
>>>>     WARNING: cannot translate vmemmap kernel virtual addresses:
>>>>              commands requiring page structure contents will fail
>>>>     ...
>>>>
>>>> Signed-off-by: Laurent Vivier <lvivier@redhat.com>
>>>> ---
>>>>  target-ppc/arch_dump.c | 5 +++++
>>>>  1 file changed, 5 insertions(+)
>>>
>>> Urgh.. so, really the page size used by the guest kernel is a
>>> guest-side detail, and it's certainly possible to build a 4kiB page
>>> guest kernel, although 64kiB is the norm.
>>
>> virtio-balloon doesn't work with 4K kernel.
> 
> It doesn't?  Balloon has rather a lot of flaws, but I didn't think
> that was one of them.

It currently doesn't work when the guest uses 4k page size but the host
uses 64k page size. Do you remember this bug ticket:
https://bugzilla.redhat.com/show_bug.cgi?id=1323988 ?
... we just decided not to spent time on this because no distro is using
4k page size for the pseries platform anymore, and the virtio-balloon
code is currently under major reconstruction anyway.

 Thomas



[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [PATCH] ppc64: fix compressed dump with pseries kernel
  2016-08-04  8:41   ` Laurent Vivier
  2016-08-05  7:49     ` David Gibson
@ 2016-08-05  9:26     ` Andrew Jones
  2016-08-05  9:46       ` Laurent Vivier
  2016-08-05 10:56       ` David Gibson
  1 sibling, 2 replies; 11+ messages in thread
From: Andrew Jones @ 2016-08-05  9:26 UTC (permalink / raw)
  To: Laurent Vivier
  Cc: David Gibson, Thomas Huth, qemu-ppc, Alexander Graf, qemu-devel

On Thu, Aug 04, 2016 at 10:41:16AM +0200, Laurent Vivier wrote:
> 
> 
> On 04/08/2016 04:38, David Gibson wrote:
> > On Wed, Aug 03, 2016 at 09:55:07PM +0200, Laurent Vivier wrote:
> >> If we don't provide the page size in target-ppc:cpu_get_dump_info(),
> >> the default one (TARGET_PAGE_SIZE, 4KB) is used to create
> >> the compressed dump. It works fine with Macintosh, but not with
> >> pseries as the kernel default page size is 64KB.
> >>
> >> Without this patch, if we generate a compressed dump in the QEMU monitor:
> >>
> >>     (qemu) dump-guest-memory -z qemu.dump
> >>
> >> This dump cannot be read by crash:
> >>
> >>     # crash vmlinux qemu.dump
> >>     ...
> >>     WARNING: cannot translate vmemmap kernel virtual addresses:
> >>              commands requiring page structure contents will fail
> >>     ...
> >>
> >> Signed-off-by: Laurent Vivier <lvivier@redhat.com>
> >> ---
> >>  target-ppc/arch_dump.c | 5 +++++
> >>  1 file changed, 5 insertions(+)
> > 
> > Urgh.. so, really the page size used by the guest kernel is a
> > guest-side detail, and it's certainly possible to build a 4kiB page
> > guest kernel, although 64kiB is the norm.
> 
> virtio-balloon doesn't work with 4K kernel.
> 
> > This might be the best we can do, but it'd be nice if we could probe
> > or otherwise avoid relying on this assumption about the guest kernel.
> 
> I agree with you but none of the other architectures probes for the page
> size.
> 
> For instance ARM: |I cc: Drew to know how he has chosen the values]
> 
>     if (arm_feature(env, ARM_FEATURE_AARCH64)) {
> ...
>         info->page_size = (1 << 16);
> ...
>     } else {
> ...
>         info->page_size = (1 << 12);
> ...
>     }
>

info->page_size is used to determine the dumpfile's block size. The
block size needs to be at least the page size, but a multiple of page
size works fine too. As we can't probe for the currently used guest
page size, and a multiple of page size is fine, then using the guest's
maximum allowed page size is the best we can do.

Thanks,
drew

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [PATCH] ppc64: fix compressed dump with pseries kernel
  2016-08-03 19:55 [Qemu-devel] [PATCH] ppc64: fix compressed dump with pseries kernel Laurent Vivier
  2016-08-04  2:38 ` David Gibson
@ 2016-08-05  9:30 ` Andrew Jones
  1 sibling, 0 replies; 11+ messages in thread
From: Andrew Jones @ 2016-08-05  9:30 UTC (permalink / raw)
  To: Laurent Vivier; +Cc: David Gibson, Alexander Graf, qemu-ppc, qemu-devel

On Wed, Aug 03, 2016 at 09:55:07PM +0200, Laurent Vivier wrote:
> If we don't provide the page size in target-ppc:cpu_get_dump_info(),
> the default one (TARGET_PAGE_SIZE, 4KB) is used to create
> the compressed dump. It works fine with Macintosh, but not with
> pseries as the kernel default page size is 64KB.
> 
> Without this patch, if we generate a compressed dump in the QEMU monitor:
> 
>     (qemu) dump-guest-memory -z qemu.dump
> 
> This dump cannot be read by crash:
> 
>     # crash vmlinux qemu.dump
>     ...
>     WARNING: cannot translate vmemmap kernel virtual addresses:
>              commands requiring page structure contents will fail
>     ...
> 
> Signed-off-by: Laurent Vivier <lvivier@redhat.com>
> ---
>  target-ppc/arch_dump.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/target-ppc/arch_dump.c b/target-ppc/arch_dump.c
> index df1fd8c..ad37a59 100644
> --- a/target-ppc/arch_dump.c
> +++ b/target-ppc/arch_dump.c
> @@ -220,6 +220,11 @@ int cpu_get_dump_info(ArchDumpInfo *info,
>      } else {
>          info->d_endian = ELFDATA2LSB;
>      }
> +    /* 64KB is the page size default for pseries kernel */

This comment should rather say '...is the max page size...' than
'default' to be accurate for the reasoning. I have a comment like
that in the arm version,

 info->page_size = (1 << 16); /* aarch64 max pagesize */

> +    if (strncmp(object_get_typename(qdev_get_machine()),
> +                "pseries-", 8) == 0) {
> +        info->page_size = (1U << 16);
> +    }
>  
>      return 0;
>  }
> -- 
> 2.5.5
> 
>

Otherwise,

Reviewed-by: Andrew Jones <drjones@redhat.com>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [PATCH] ppc64: fix compressed dump with pseries kernel
  2016-08-05  9:26     ` Andrew Jones
@ 2016-08-05  9:46       ` Laurent Vivier
  2016-08-05 12:44         ` Andrew Jones
  2016-08-05 10:56       ` David Gibson
  1 sibling, 1 reply; 11+ messages in thread
From: Laurent Vivier @ 2016-08-05  9:46 UTC (permalink / raw)
  To: Andrew Jones
  Cc: David Gibson, Thomas Huth, qemu-ppc, Alexander Graf, qemu-devel



On 05/08/2016 11:26, Andrew Jones wrote:
> On Thu, Aug 04, 2016 at 10:41:16AM +0200, Laurent Vivier wrote:
>>
>>
>> On 04/08/2016 04:38, David Gibson wrote:
>>> On Wed, Aug 03, 2016 at 09:55:07PM +0200, Laurent Vivier wrote:
>>>> If we don't provide the page size in target-ppc:cpu_get_dump_info(),
>>>> the default one (TARGET_PAGE_SIZE, 4KB) is used to create
>>>> the compressed dump. It works fine with Macintosh, but not with
>>>> pseries as the kernel default page size is 64KB.
>>>>
>>>> Without this patch, if we generate a compressed dump in the QEMU monitor:
>>>>
>>>>     (qemu) dump-guest-memory -z qemu.dump
>>>>
>>>> This dump cannot be read by crash:
>>>>
>>>>     # crash vmlinux qemu.dump
>>>>     ...
>>>>     WARNING: cannot translate vmemmap kernel virtual addresses:
>>>>              commands requiring page structure contents will fail
>>>>     ...
>>>>
>>>> Signed-off-by: Laurent Vivier <lvivier@redhat.com>
>>>> ---
>>>>  target-ppc/arch_dump.c | 5 +++++
>>>>  1 file changed, 5 insertions(+)
>>>
>>> Urgh.. so, really the page size used by the guest kernel is a
>>> guest-side detail, and it's certainly possible to build a 4kiB page
>>> guest kernel, although 64kiB is the norm.
>>
>> virtio-balloon doesn't work with 4K kernel.
>>
>>> This might be the best we can do, but it'd be nice if we could probe
>>> or otherwise avoid relying on this assumption about the guest kernel.
>>
>> I agree with you but none of the other architectures probes for the page
>> size.
>>
>> For instance ARM: |I cc: Drew to know how he has chosen the values]
>>
>>     if (arm_feature(env, ARM_FEATURE_AARCH64)) {
>> ...
>>         info->page_size = (1 << 16);
>> ...
>>     } else {
>> ...
>>         info->page_size = (1 << 12);
>> ...
>>     }
>>
> 
> info->page_size is used to determine the dumpfile's block size. The
> block size needs to be at least the page size, but a multiple of page
> size works fine too. As we can't probe for the currently used guest
> page size, and a multiple of page size is fine, then using the guest's
> maximum allowed page size is the best we can do.

Thank you for the explanation.

So we can unconditionally use 64KB, even for mac99 with a 64bit
processor or a 32bit processor (that are always 4K page size)?

The maximum page size in the kernel can be 256kB [1], should we use this
value instead?

Laurent

[1] linux/arch/powerpc/include/asm/page.h
/*
 * On regular PPC32 page size is 4K (but we support 4K/16K/64K/256K pages
 * on PPC44x). For PPC64 we support either 4K or 64K software
 * page size. When using 64K pages however, whether we are really supporting
 * 64K pages in HW or not is irrelevant to those definitions.
 */
#if defined(CONFIG_PPC_256K_PAGES)
#define PAGE_SHIFT              18
#elif defined(CONFIG_PPC_64K_PAGES)
#define PAGE_SHIFT              16
#elif defined(CONFIG_PPC_16K_PAGES)
#define PAGE_SHIFT              14
#else
#define PAGE_SHIFT              12
#endif

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [PATCH] ppc64: fix compressed dump with pseries kernel
  2016-08-05  9:26     ` Andrew Jones
  2016-08-05  9:46       ` Laurent Vivier
@ 2016-08-05 10:56       ` David Gibson
  1 sibling, 0 replies; 11+ messages in thread
From: David Gibson @ 2016-08-05 10:56 UTC (permalink / raw)
  To: Andrew Jones
  Cc: Laurent Vivier, Thomas Huth, qemu-ppc, Alexander Graf, qemu-devel

[-- Attachment #1: Type: text/plain, Size: 2547 bytes --]

On Fri, Aug 05, 2016 at 11:26:47AM +0200, Andrew Jones wrote:
> On Thu, Aug 04, 2016 at 10:41:16AM +0200, Laurent Vivier wrote:
> > 
> > 
> > On 04/08/2016 04:38, David Gibson wrote:
> > > On Wed, Aug 03, 2016 at 09:55:07PM +0200, Laurent Vivier wrote:
> > >> If we don't provide the page size in target-ppc:cpu_get_dump_info(),
> > >> the default one (TARGET_PAGE_SIZE, 4KB) is used to create
> > >> the compressed dump. It works fine with Macintosh, but not with
> > >> pseries as the kernel default page size is 64KB.
> > >>
> > >> Without this patch, if we generate a compressed dump in the QEMU monitor:
> > >>
> > >>     (qemu) dump-guest-memory -z qemu.dump
> > >>
> > >> This dump cannot be read by crash:
> > >>
> > >>     # crash vmlinux qemu.dump
> > >>     ...
> > >>     WARNING: cannot translate vmemmap kernel virtual addresses:
> > >>              commands requiring page structure contents will fail
> > >>     ...
> > >>
> > >> Signed-off-by: Laurent Vivier <lvivier@redhat.com>
> > >> ---
> > >>  target-ppc/arch_dump.c | 5 +++++
> > >>  1 file changed, 5 insertions(+)
> > > 
> > > Urgh.. so, really the page size used by the guest kernel is a
> > > guest-side detail, and it's certainly possible to build a 4kiB page
> > > guest kernel, although 64kiB is the norm.
> > 
> > virtio-balloon doesn't work with 4K kernel.
> > 
> > > This might be the best we can do, but it'd be nice if we could probe
> > > or otherwise avoid relying on this assumption about the guest kernel.
> > 
> > I agree with you but none of the other architectures probes for the page
> > size.
> > 
> > For instance ARM: |I cc: Drew to know how he has chosen the values]
> > 
> >     if (arm_feature(env, ARM_FEATURE_AARCH64)) {
> > ...
> >         info->page_size = (1 << 16);
> > ...
> >     } else {
> > ...
> >         info->page_size = (1 << 12);
> > ...
> >     }
> >
> 
> info->page_size is used to determine the dumpfile's block size. The
> block size needs to be at least the page size, but a multiple of page
> size works fine too. As we can't probe for the currently used guest
> page size, and a multiple of page size is fine, then using the guest's
> maximum allowed page size is the best we can do.

Aha!  Well that makes life much easier.  I'll adjust the commit
message and apply.

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [PATCH] ppc64: fix compressed dump with pseries kernel
  2016-08-05  9:46       ` Laurent Vivier
@ 2016-08-05 12:44         ` Andrew Jones
  0 siblings, 0 replies; 11+ messages in thread
From: Andrew Jones @ 2016-08-05 12:44 UTC (permalink / raw)
  To: Laurent Vivier
  Cc: qemu-devel, Thomas Huth, qemu-ppc, Alexander Graf, David Gibson

On Fri, Aug 05, 2016 at 11:46:33AM +0200, Laurent Vivier wrote:
> 
> 
> On 05/08/2016 11:26, Andrew Jones wrote:
> > On Thu, Aug 04, 2016 at 10:41:16AM +0200, Laurent Vivier wrote:
> >>
> >>
> >> On 04/08/2016 04:38, David Gibson wrote:
> >>> On Wed, Aug 03, 2016 at 09:55:07PM +0200, Laurent Vivier wrote:
> >>>> If we don't provide the page size in target-ppc:cpu_get_dump_info(),
> >>>> the default one (TARGET_PAGE_SIZE, 4KB) is used to create
> >>>> the compressed dump. It works fine with Macintosh, but not with
> >>>> pseries as the kernel default page size is 64KB.
> >>>>
> >>>> Without this patch, if we generate a compressed dump in the QEMU monitor:
> >>>>
> >>>>     (qemu) dump-guest-memory -z qemu.dump
> >>>>
> >>>> This dump cannot be read by crash:
> >>>>
> >>>>     # crash vmlinux qemu.dump
> >>>>     ...
> >>>>     WARNING: cannot translate vmemmap kernel virtual addresses:
> >>>>              commands requiring page structure contents will fail
> >>>>     ...
> >>>>
> >>>> Signed-off-by: Laurent Vivier <lvivier@redhat.com>
> >>>> ---
> >>>>  target-ppc/arch_dump.c | 5 +++++
> >>>>  1 file changed, 5 insertions(+)
> >>>
> >>> Urgh.. so, really the page size used by the guest kernel is a
> >>> guest-side detail, and it's certainly possible to build a 4kiB page
> >>> guest kernel, although 64kiB is the norm.
> >>
> >> virtio-balloon doesn't work with 4K kernel.
> >>
> >>> This might be the best we can do, but it'd be nice if we could probe
> >>> or otherwise avoid relying on this assumption about the guest kernel.
> >>
> >> I agree with you but none of the other architectures probes for the page
> >> size.
> >>
> >> For instance ARM: |I cc: Drew to know how he has chosen the values]
> >>
> >>     if (arm_feature(env, ARM_FEATURE_AARCH64)) {
> >> ...
> >>         info->page_size = (1 << 16);
> >> ...
> >>     } else {
> >> ...
> >>         info->page_size = (1 << 12);
> >> ...
> >>     }
> >>
> > 
> > info->page_size is used to determine the dumpfile's block size. The
> > block size needs to be at least the page size, but a multiple of page
> > size works fine too. As we can't probe for the currently used guest
> > page size, and a multiple of page size is fine, then using the guest's
> > maximum allowed page size is the best we can do.
> 
> Thank you for the explanation.
> 
> So we can unconditionally use 64KB, even for mac99 with a 64bit
> processor or a 32bit processor (that are always 4K page size)?

If they're always going to be 4K, then I'd leave them 4K. This is because
I don't know enough about how the crash utility works today, or will work
in the future, to know what the trade-offs are. IOW, if we assume that
block-size == page-size is optimal, then we want that, or only to diverge
minimally from it when necessary. That said, from what I do know about
dumpfiles and the crash utility, I can't see how it would matter much,
except for wasting more space with the header block (the header block
isn't compressed)

> 
> The maximum page size in the kernel can be 256kB [1], should we use this
> value instead?

I like how you use machine type to decide. If you have machine types that
may use 256K, then you can add new conditions for them, but, for the
reason I stated above, I wouldn't unconditionally use a block size that's
much larger than necessary.

Thanks,
drew

> 
> Laurent
> 
> [1] linux/arch/powerpc/include/asm/page.h
> /*
>  * On regular PPC32 page size is 4K (but we support 4K/16K/64K/256K pages
>  * on PPC44x). For PPC64 we support either 4K or 64K software
>  * page size. When using 64K pages however, whether we are really supporting
>  * 64K pages in HW or not is irrelevant to those definitions.
>  */
> #if defined(CONFIG_PPC_256K_PAGES)
> #define PAGE_SHIFT              18
> #elif defined(CONFIG_PPC_64K_PAGES)
> #define PAGE_SHIFT              16
> #elif defined(CONFIG_PPC_16K_PAGES)
> #define PAGE_SHIFT              14
> #else
> #define PAGE_SHIFT              12
> #endif
> 
> 

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2016-08-05 12:44 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-03 19:55 [Qemu-devel] [PATCH] ppc64: fix compressed dump with pseries kernel Laurent Vivier
2016-08-04  2:38 ` David Gibson
2016-08-04  8:41   ` Laurent Vivier
2016-08-05  7:49     ` David Gibson
2016-08-05  8:03       ` Laurent Vivier
2016-08-05  8:14       ` Thomas Huth
2016-08-05  9:26     ` Andrew Jones
2016-08-05  9:46       ` Laurent Vivier
2016-08-05 12:44         ` Andrew Jones
2016-08-05 10:56       ` David Gibson
2016-08-05  9:30 ` Andrew Jones

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.