All of lore.kernel.org
 help / color / mirror / Atom feed
From: Feng Tang <feng.tang@intel.com>
To: Paul Menzel <pmenzel@molgen.mpg.de>
Cc: linux-mm@kvack.org, Arjan van de Ven <arjan@linux.intel.com>
Subject: Re: Deferred Memory Init: How to bring rest of memory online after limiting it with `mem=XG`?
Date: Fri, 4 Dec 2020 16:05:56 +0800	[thread overview]
Message-ID: <20201204080556.GA66896@shbuild999.sh.intel.com> (raw)
In-Reply-To: <b7cd0584-0fd4-a926-b254-273943504293@molgen.mpg.de>

Hi Paul,

On Thu, Dec 03, 2020 at 11:51:58AM +0100, Paul Menzel wrote:
> Dear Feng,
> 
> 
> I am trying to reduce the startup time of Debian’s Linux 5.9.9 on a Intel
> Kaby Lake system with 32 GB of memory (TUXEDO Book BU1406 (Clevo N240BU)).
> On your Linux Plumbers Conference 2019 slides of your talk *Linux Kernel
> Fastboot On the Way* [1], you mention *Deferred Memory Init*:
> 
> >Deferred Memory Init
> >
> >•   8GB RAM’s initialization costs 100+ ms
> >•   In early boot phase, we don’t need that much memory
> >•   Utilize the memory hotplug feature
> >    •   “mem=4096m” in cmdline to only init 2 GB
> >    •   Use systemd service to add rest memory in parallel
> 
> Starting Linux with `mem=2G` indeed reduces the startup time, but I am
> unable to get the rest of the memory online. Comparing it with a boot
> without `mem=2G` the `memoryX`  devices under `/sys/devices/system/memory/`
> are missing.

[...]

> 
> Can the deferred memory initialization be done with the upstream Linux
> kernel, or were you using patches on top?

Yes, it should be able to work with upstream kernel. And you need to
do a 'probe' operation to create 'memoryX' for those deferred memroy.

When you use "mem=2G", there are a bunch of memory from e820 map will
be chopped off, so you see a few memory devices left in /sys/devices/system/memory/

And to see those missing devices, you can check your dmesg log to find
the physical memory address range which is chopped off. 

Followin is a quick test I did on qemu:

	[    0.000000] BIOS-provided physical RAM map:
	[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
	[    0.000000] BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved
	[    0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
	[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000007ffdffff] usable  --> real E820 map
	...
	[    0.000000] user-defined physical RAM map:
	[    0.000000] user: [mem 0x0000000000000000-0x000000000009fbff] usable
	[    0.000000] user: [mem 0x000000000009fc00-0x000000000009ffff] reserved
	[    0.000000] user: [mem 0x00000000000f0000-0x00000000000fffff] reserved
	[    0.000000] user: [mem 0x0000000000100000-0x000000005dbfffff] usable	      --> with "mem=xxx" option

We can see the "user-defined" version has much less "useable" memory,
figue out the physical address, for this

	echo 0x60000000 > /sys/devices/system/memory/probe

will create a new "memoryX" in /sys/devices/system/memory/, and echo
"online" to the 'state' inside its folder will make it online.

There may be some more stuff to care, like the memory block size and
alignment, you can read the related code and document.

Thanks,
Feng



      parent reply	other threads:[~2020-12-04  8:06 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-03 10:51 Deferred Memory Init: How to bring rest of memory online after limiting it with `mem=XG`? Paul Menzel
2020-12-03 12:25 ` David Hildenbrand
2020-12-03 12:52   ` Paul Menzel
2020-12-03 13:06     ` David Hildenbrand
2020-12-03 20:58       ` Daniel Jordan
2020-12-04  7:31         ` Paul Menzel
2020-12-04 19:50           ` Daniel Jordan
2020-12-04  1:17   ` Feng Tang
2020-12-04  8:05 ` Feng Tang [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=20201204080556.GA66896@shbuild999.sh.intel.com \
    --to=feng.tang@intel.com \
    --cc=arjan@linux.intel.com \
    --cc=linux-mm@kvack.org \
    --cc=pmenzel@molgen.mpg.de \
    /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 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.