qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] vl: Adjust the place of calling mlockall to spe


From: Hu Tao
Subject: Re: [Qemu-devel] [PATCH] vl: Adjust the place of calling mlockall to speedup VM's startup
Date: Tue, 23 Sep 2014 16:35:55 +0800
User-agent: Mutt/1.5.21 (2010-09-15)

On Tue, Sep 23, 2014 at 11:30:26AM +0300, Michael S. Tsirkin wrote:
> On Tue, Sep 23, 2014 at 03:57:47PM +0800, zhanghailiang wrote:
> > If we configure mlock=on and memory policy=bind at the same time,
> > It will consume lots of time for system to treat with memory,
> > especially when call mbind after mlockall.
> > 
> > Adjust the place of calling mlockall, calling mbind before mlockall
> > can remarkably reduce the time of VM's startup.
> > 
> > Signed-off-by: zhanghailiang <address@hidden>
> 
> The idea makes absolute sense to me:
> bind after lock will force data copy of
> all pages. bind before lock gives us an
> indication where to put data on fault in.

Agreed.

> 
> Acked-by: Michael S. Tsirkin <address@hidden>
> 
> 
> > ---
> > Hi,
> > 
> > Actually, for mbind and mlockall, i have made a test about the time 
> > consuming 
> > for the different call sequence. 
> > 
> > The results is shown below. It is obviously that mlockall called before 
> > mbind is 
> > more time-consuming.
> > 
> > Besides, this patch is OK with memory hotplug.
> > 
> > TEST CODE:
> >     if (mbind_first) {
> >         printf("mbind --> mlockall\n");
> >         mbind(ptr, ram_size/2, MPOL_BIND, &node0mask, 2,
> >               MPOL_MF_STRICT | MPOL_MF_MOVE);
> >         mbind(ptr + ram_size/2, ram_size/2, MPOL_BIND, &node1mask, 2,
> >               MPOL_MF_STRICT | MPOL_MF_MOVE);
> >         mlockall(MCL_CURRENT | MCL_FUTURE);
> >     } else {
> >         printf("mlockall --> mbind\n");
> >         mlockall(MCL_CURRENT | MCL_FUTURE);
> >         mbind(ptr, ram_size/2, MPOL_BIND, &node0mask, 2 ,
> >               MPOL_MF_STRICT | MPOL_MF_MOVE);
> >         mbind(ptr + ram_size/2, ram_size/2, MPOL_BIND, &node1mask, 2,
> >               MPOL_MF_STRICT | MPOL_MF_MOVE);
> >     }
> > 
> > RESULT 1:
> > #time /home/test_mbind 10240 0
> > memroy size 10737418240
> > mlockall --> mbind
> > 
> > real    0m11.886s
> > user    0m0.004s
> > sys     0m11.865s
> > #time /home/test_mbind 10240 1
> > memroy size 10737418240
> > mbind --> mlockall
> > 
> > real    0m5.334s
> > user    0m0.000s
> > sys     0m5.324s
> > 
> > RESULT 2:
> > #time /home/test_mbind 4096 0
> > memroy size 4294967296
> > mlockall --> mbind
> > 
> > real    0m5.503s
> > user    0m0.000s
> > sys     0m5.492s
> > #time /home/test_mbind 4096 1
> > memroy size 4294967296
> > mbind --> mlockall
> > 
> > real    0m2.139s
> > user    0m0.000s
> > sys     0m2.132s
> > 
> > Best Regards,
> > zhanghailiang
> > ---
> >  vl.c | 11 +++++------
> >  1 file changed, 5 insertions(+), 6 deletions(-)
> > 
> > diff --git a/vl.c b/vl.c
> > index dc792fe..adf4770 100644
> > --- a/vl.c
> > +++ b/vl.c
> > @@ -134,6 +134,7 @@ const char* keyboard_layout = NULL;
> >  ram_addr_t ram_size;
> >  const char *mem_path = NULL;
> >  int mem_prealloc = 0; /* force preallocation of physical target memory */
> > +int enable_mlock = false;

Why not bool?

Regards,
Hu



reply via email to

[Prev in Thread] Current Thread [Next in Thread]