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

Re: [Xen-devel] [PATCH] tools: fix build after recent xenpaging changes



On Fri, Jun 24, Ian Campbell wrote:

> On Fri, 2011-06-24 at 15:35 +0100, Olaf Hering wrote:
> > On Fri, Jun 24, Ian Campbell wrote:
> > 
> > > > The break exits the for() loop, not the while(1). In the next iteration
> > > > page 1 may still be in paging->bitmap and tried again.
> > > 
> > > I'd missed the interrupted -> 1 in the while loop. I presume there is
> > > some other exit condition which triggers once everything has been paged
> > > back in and actually causes the daemon to exit?
> > 
> > If the for() loop found nothing, then this triggers:
> > 
> > 775             /* If no more pages to process, exit loop */
> > 776             if ( i == paging->domain_info->max_pages )
> > 777                 break;
> 
> Oh yes.
> 
> It's a bit counter intuitive to have a for loop which only processes the
> first thing it finds and then relying on going round another outer loop
> to pickup the second etc. It's at least O(N^2), isn't it?
> 
> Why not 
>       count = 0;
>       for ( i = 0; i < paging->domain_info->max_pages; i++ )
>             {
>                 if ( test_bit(i, paging->bitmap) )
>                 {
>                     page_in_trigger(i);
>                     count++
>                 }
>             }
>             /* If no more pages to process, exit loop */
>             if ( !count )
>                 break;
> 
> That will at least process as many pages as it can on each iteration
> through the outer loop. Although it will most likely exacerbate the
> locking issue I pointed to earlier.

I think an early version of my change had something like that, but it
did not fillup the ringbuffer for some reason.
I will look at this change again and see what can be improved.

Olaf

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.