diff mbox series

[1/3] ARM: dts: rainier: Add reserved memory for ramoops

Message ID 20201002063414.275161-2-andrew@aj.id.au
State Not Applicable, archived
Headers show
Series Enable pstore for Rainier | expand

Commit Message

Andrew Jeffery Oct. 2, 2020, 6:34 a.m. UTC
Reserve a 1MiB region of memory to record kmsg dumps and console state
into 16kiB ring-buffer slots. The sizing allows for up to 32 dumps to be
captured and read out.

Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
---
 arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts | 8 ++++++++
 1 file changed, 8 insertions(+)

Comments

Joel Stanley Oct. 6, 2020, 3:22 a.m. UTC | #1
On Fri, 2 Oct 2020 at 06:35, Andrew Jeffery <andrew@aj.id.au> wrote:
>
> Reserve a 1MiB region of memory to record kmsg dumps and console state
> into 16kiB ring-buffer slots. The sizing allows for up to 32 dumps to be
> captured and read out.
>
> Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
> ---
>  arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts | 8 ++++++++
>  1 file changed, 8 insertions(+)
>
> diff --git a/arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts b/arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts
> index e6f422edf454..46a0e95049fd 100644
> --- a/arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts
> +++ b/arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts
> @@ -47,6 +47,14 @@ reserved-memory {
>                 #size-cells = <1>;
>                 ranges;
>
> +               ramoops@b7f00000 {
> +                       compatible = "ramoops";
> +                       reg = <0xb7f00000 0x100000>;
> +                       record-size = <0x4000>;
> +                       console-size = <0x4000>;

This is conserative. We've got plenty of space, how about we make it bigger?

$ git grep console-size *.dts* | grep -Po "0x([0-9]+)" | xargs printf
"%x\n" | sort -n
8000
8000
10000
10000
20000
20000
20000
20000
20000
60000
100000

The median is 128KB, which sounds reasonable.

$ git grep record-size *.dts* | grep -Po "0x([0-9]+)" | xargs printf "%x\n"
20000
400
400
20000
20000
20000
10000
10000
10000
10000
20000

64KB is the median record size.

> +                       pmsg-size = <0x4000>;

Do we want to add ftrace too?

Should we also add max-reason = KMSG_DUMP_EMERG?

Logging reboots and shutdowns is informative (you know if a reboot was
intentional or due to a crash that wasn't recorded) and allows for
testing.

Cheers,

Joel

> +               };
> +
>                 flash_memory: region@B8000000 {
>                         no-map;
>                         reg = <0xB8000000 0x04000000>; /* 64M */
> --
> 2.25.1
>
Milton Miller II Oct. 6, 2020, 4:25 a.m. UTC | #2
On October 5, 2020 about 10:23 in some timezone, Joel Stanley wrote:
>Subject: [EXTERNAL] Re: [PATCH 1/3] ARM: dts: rainier: Add reserved
>memory for ramoops
>
>On Fri, 2 Oct 2020 at 06:35, Andrew Jeffery <andrew@aj.id.au> wrote:
>>
>> Reserve a 1MiB region of memory to record kmsg dumps and console
>state
>> into 16kiB ring-buffer slots. The sizing allows for up to 32 dumps
>to be
>> captured and read out.
>>
>> Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
>> ---
>>  arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts | 8 ++++++++
>>  1 file changed, 8 insertions(+)
>>
>> diff --git a/arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts
>b/arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts
>> index e6f422edf454..46a0e95049fd 100644
>> --- a/arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts
>> +++ b/arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts
>> @@ -47,6 +47,14 @@ reserved-memory {
>>                 #size-cells = <1>;
>>                 ranges;
>>
>> +               ramoops@b7f00000 {
>> +                       compatible = "ramoops";
>> +                       reg = <0xb7f00000 0x100000>;
>> +                       record-size = <0x4000>;
>> +                       console-size = <0x4000>;
>
>This is conserative. We've got plenty of space, how about we make it
>bigger?
>
>$ git grep console-size *.dts* | grep -Po "0x([0-9]+)" | xargs printf
>"%x\n" | sort -n
>8000
>8000
>10000
>10000
>20000
>20000
>20000
>20000
>20000
>60000
>100000
>
>The median is 128KB, which sounds reasonable.

How big is the dmesg after we are booted?   How big is the default 
kernel buffer for 2 cpus (the kernel config has a base size, but 
also a dynamic size with a base + n * cpu min at boot).

Having the console space larger than printk buffer will not help.

We could config the buffer up if we are not capturing enough of a 
boot and some runtime.

>
>$ git grep record-size *.dts* | grep -Po "0x([0-9]+)" | xargs printf
>"%x\n"
>20000
>400
>400
>20000
>20000
>20000
>10000
>10000
>10000
>10000
>20000
>
>64KB is the median record size.
>
This probably affects the effective compression, assuming
each block is a seperate compression input.

>> +                       pmsg-size = <0x4000>;
>
>Do we want to add ftrace too?
>
>Should we also add max-reason = KMSG_DUMP_EMERG?
>

The admin guide lists KMSG_DUMP_OOPS and KMSG_DUMP_PANIC ?
https://www.kernel.org/doc/html/latest/admin-guide/ramoops.html

We could have something monitoring for OOPS , copying to a log and 
then unlinking the pstore after committed.

>Logging reboots and shutdowns is informative (you know if a reboot
>was
>intentional or due to a crash that wasn't recorded) and allows for
>testing.
>

That should be exposed from audit logging?
but yes.

milton

>Cheers,
>
>Joel
>
>> +               };
>> +
>>                 flash_memory: region@B8000000 {
>>                         no-map;
>>                         reg = <0xB8000000 0x04000000>; /* 64M */
>> --
>> 2.25.1
>>
>
>
Andrew Jeffery Oct. 6, 2020, 4:29 a.m. UTC | #3
On Tue, 6 Oct 2020, at 14:55, Milton Miller II wrote:
> On October 5, 2020 about 10:23 in some timezone, Joel Stanley wrote:
> >Subject: [EXTERNAL] Re: [PATCH 1/3] ARM: dts: rainier: Add reserved
> >memory for ramoops
> >
> >On Fri, 2 Oct 2020 at 06:35, Andrew Jeffery <andrew@aj.id.au> wrote:
> >>
> >> Reserve a 1MiB region of memory to record kmsg dumps and console
> >state
> >> into 16kiB ring-buffer slots. The sizing allows for up to 32 dumps
> >to be
> >> captured and read out.
> >>
> >> Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
> >> ---
> >>  arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts | 8 ++++++++
> >>  1 file changed, 8 insertions(+)
> >>
> >> diff --git a/arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts
> >b/arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts
> >> index e6f422edf454..46a0e95049fd 100644
> >> --- a/arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts
> >> +++ b/arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts
> >> @@ -47,6 +47,14 @@ reserved-memory {
> >>                 #size-cells = <1>;
> >>                 ranges;
> >>
> >> +               ramoops@b7f00000 {
> >> +                       compatible = "ramoops";
> >> +                       reg = <0xb7f00000 0x100000>;
> >> +                       record-size = <0x4000>;
> >> +                       console-size = <0x4000>;
> >
> >This is conserative. We've got plenty of space, how about we make it
> >bigger?
> >
> >$ git grep console-size *.dts* | grep -Po "0x([0-9]+)" | xargs printf
> >"%x\n" | sort -n
> >8000
> >8000
> >10000
> >10000
> >20000
> >20000
> >20000
> >20000
> >20000
> >60000
> >100000
> >
> >The median is 128KB, which sounds reasonable.
> 
> How big is the dmesg after we are booted?   How big is the default 
> kernel buffer for 2 cpus (the kernel config has a base size, but 
> also a dynamic size with a base + n * cpu min at boot).
> 
> Having the console space larger than printk buffer will not help.
> 
> We could config the buffer up if we are not capturing enough of a 
> boot and some runtime.
> 
> >
> >$ git grep record-size *.dts* | grep -Po "0x([0-9]+)" | xargs printf
> >"%x\n"
> >20000
> >400
> >400
> >20000
> >20000
> >20000
> >10000
> >10000
> >10000
> >10000
> >20000
> >
> >64KB is the median record size.
> >
> This probably affects the effective compression, assuming
> each block is a seperate compression input.
> 
> >> +                       pmsg-size = <0x4000>;
> >
> >Do we want to add ftrace too?
> >
> >Should we also add max-reason = KMSG_DUMP_EMERG?
> >
> 
> The admin guide lists KMSG_DUMP_OOPS and KMSG_DUMP_PANIC ?
> https://www.kernel.org/doc/html/latest/admin-guide/ramoops.html
> 
> We could have something monitoring for OOPS , copying to a log and 
> then unlinking the pstore after committed.

systemd-pstore already does this for us, no further configuration required.
Milton Miller II Oct. 6, 2020, 4:44 a.m. UTC | #4
On October 5, 2020 at about 11:30PM in some timezone, Andrew Jeffery wrote:
>On Tue, 6 Oct 2020, at 14:55, Milton Miller II wrote:
>> On October 5, 2020 about 10:23 in some timezone, Joel Stanley
>wrote:
>> >Subject: [EXTERNAL] Re: [PATCH 1/3] ARM: dts: rainier: Add
>reserved
>> >memory for ramoops
>> >
>> >On Fri, 2 Oct 2020 at 06:35, Andrew Jeffery <andrew@aj.id.au>
>wrote:
>> >>
>> >> Reserve a 1MiB region of memory to record kmsg dumps and console
>> >state
>> >> into 16kiB ring-buffer slots. The sizing allows for up to 32
>dumps
>> >to be
>> >> captured and read out.
>> >>
>> >> Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
...
>> The admin guide lists KMSG_DUMP_OOPS and KMSG_DUMP_PANIC ?>>
>INVALID URI REMOVED
>oc_html_latest_admin-2Dguide_ramoops.html&d=DwIBAg&c=jf_iaSHvJObTbx-s
>iA1ZOg&r=bvv7AJEECoRKBU02rcu4F5DWd-EwX8As2xrXeO9ZSo4&m=223EDL7j0GQPUf
>WYDv8kduEPnexbpo3b00uQAlK8YSo&s=MfYAUnU2h1TdWyBC7tQoG3fVUTBTwXTFurBsK
>oZw34E&e= 
>> 
>> We could have something monitoring for OOPS , copying to a log and 
>> then unlinking the pstore after committed.
>
>systemd-pstore already does this for us, no further configuration
>required.

Do we have something that creates service records for these messages?  
I was hoping for something like a PEL for the bmc software.

Not as part of this kernel series though.

milton
Andrew Jeffery Oct. 16, 2020, 3:38 a.m. UTC | #5
On Tue, 6 Oct 2020, at 13:52, Joel Stanley wrote:
> On Fri, 2 Oct 2020 at 06:35, Andrew Jeffery <andrew@aj.id.au> wrote:
> >
> > Reserve a 1MiB region of memory to record kmsg dumps and console state
> > into 16kiB ring-buffer slots. The sizing allows for up to 32 dumps to be
> > captured and read out.
> >
> > Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
> > ---
> >  arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts | 8 ++++++++
> >  1 file changed, 8 insertions(+)
> >
> > diff --git a/arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts b/arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts
> > index e6f422edf454..46a0e95049fd 100644
> > --- a/arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts
> > +++ b/arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts
> > @@ -47,6 +47,14 @@ reserved-memory {
> >                 #size-cells = <1>;
> >                 ranges;
> >
> > +               ramoops@b7f00000 {
> > +                       compatible = "ramoops";
> > +                       reg = <0xb7f00000 0x100000>;
> > +                       record-size = <0x4000>;
> > +                       console-size = <0x4000>;
> 
> This is conserative. We've got plenty of space, how about we make it bigger?
> 
> $ git grep console-size *.dts* | grep -Po "0x([0-9]+)" | xargs printf
> "%x\n" | sort -n
> 8000
> 8000
> 10000
> 10000
> 20000
> 20000
> 20000
> 20000
> 20000
> 60000
> 100000
> 
> The median is 128KB, which sounds reasonable.

Well, maybe? Why should we basing it on what everyone else has done rather than 
what we need? We're compressing the data before it's written to the pstore 
ring. Uncompressed, 16k is in the order of 200 lines of text. With the default 
DEFLATE compression we can fit 3-4x more:

root@rain15bmc:~# uptime
 14:44:20 up 14:44,  load average: 0.01, 0.01, 0.01
root@rain15bmc:~# dmesg | wc -l
640
root@rain15bmc:~# dmesg  >/tmp/dmesg
root@rain15bmc:~# stat -c "%s" /tmp/dmesg
44032
root@rain15bmc:~# gzip /tmp/dmesg
root@rain15bmc:~# stat -c "%s" /tmp/dmesg.gz
11059

I think 16k is more than enough for now?

> 
> $ git grep record-size *.dts* | grep -Po "0x([0-9]+)" | xargs printf "%x\n"
> 20000
> 400
> 400
> 20000
> 20000
> 20000
> 10000
> 10000
> 10000
> 10000
> 20000
> 
> 64KB is the median record size.
> 
> > +                       pmsg-size = <0x4000>;
> 
> Do we want to add ftrace too?

I figured getting an oops/panic stack dump might be enough for the moment.

> 
> Should we also add max-reason = KMSG_DUMP_EMERG?
> 
> Logging reboots and shutdowns is informative (you know if a reboot was
> intentional or due to a crash that wasn't recorded) and allows for
> testing.

Yeah, that's a good idea.

Thanks.

Andrew
diff mbox series

Patch

diff --git a/arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts b/arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts
index e6f422edf454..46a0e95049fd 100644
--- a/arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts
+++ b/arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts
@@ -47,6 +47,14 @@  reserved-memory {
 		#size-cells = <1>;
 		ranges;
 
+		ramoops@b7f00000 {
+			compatible = "ramoops";
+			reg = <0xb7f00000 0x100000>;
+			record-size = <0x4000>;
+			console-size = <0x4000>;
+			pmsg-size = <0x4000>;
+		};
+
 		flash_memory: region@B8000000 {
 			no-map;
 			reg = <0xB8000000 0x04000000>; /* 64M */