lkml.org 
[lkml]   [2012]   [Oct]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH] mm: memmap_init_zone() performance improvement
    From
    Date
    On Tue, 2012-10-09 at 08:56 -0600, Mike Yoknis wrote:
    > On Mon, 2012-10-08 at 16:16 +0100, Mel Gorman wrote:
    > > On Wed, Oct 03, 2012 at 08:56:14AM -0600, Mike Yoknis wrote:
    > > > memmap_init_zone() loops through every Page Frame Number (pfn),
    > > > including pfn values that are within the gaps between existing
    > > > memory sections. The unneeded looping will become a boot
    > > > performance issue when machines configure larger memory ranges
    > > > that will contain larger and more numerous gaps.
    > > >
    > > > The code will skip across invalid sections to reduce the
    > > > number of loops executed.
    > > >
    > > > Signed-off-by: Mike Yoknis <mike.yoknis@hp.com>
    > >
    > > I do not see the need for
    > > the additional complexity unless you can show it makes a big difference
    > > to boot times.
    > >
    >
    > Mel,
    >
    > Let me pass along the numbers I have. We have what we call an
    > "architectural simulator". It is a computer program that pretends that
    > it is a computer system. We use it to test the firmware before real
    > hardware is available. We have booted Linux on our simulator. As you
    > would expect it takes longer to boot on the simulator than it does on
    > real hardware.
    >
    > With my patch - boot time 41 minutes
    > Without patch - boot time 94 minutes
    >
    > These numbers do not scale linearly to real hardware. But indicate to
    > me a place where Linux can be improved.
    >
    > Mike Yoknis
    >
    Mel,
    I finally got access to prototype hardware.
    It is a relatively small machine with only 64GB of RAM.

    I put in a time measurement by reading the TSC register.
    I booted both with and without my patch -

    Without patch -
    [ 0.000000] Normal zone: 13400064 pages, LIFO batch:31
    [ 0.000000] memmap_init_zone() enter 1404184834218
    [ 0.000000] memmap_init_zone() exit 1411174884438 diff = 6990050220

    With patch -
    [ 0.000000] Normal zone: 13400064 pages, LIFO batch:31
    [ 0.000000] memmap_init_zone() enter 1555530050778
    [ 0.000000] memmap_init_zone() exit 1559379204643 diff = 3849153865

    This shows that without the patch the routine spends 45%
    of its time spinning unnecessarily.

    Mike Yoknis




    \
     
     \ /
      Last update: 2012-10-19 22:41    [W:4.293 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site