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 <zhang.zhanghaili...@huawei.com> > > 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 <m...@redhat.com> > > > > --- > > 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