WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] [PATCH 6 of 9] xenpaging: add evict_pages function

To: Olaf Hering <olaf@xxxxxxxxx>
Subject: Re: [Xen-devel] [PATCH 6 of 9] xenpaging: add evict_pages function
From: Ian Campbell <Ian.Campbell@xxxxxxxxxx>
Date: Thu, 15 Sep 2011 10:16:41 +0200
Cc: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Delivery-date: Thu, 15 Sep 2011 01:17:23 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <3a3a5979b799d9488021.1316067394@xxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Organization: Citrix Systems, Inc.
References: <patchbomb.1316067388@xxxxxxxxxxxx> <3a3a5979b799d9488021.1316067394@xxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
On Thu, 2011-09-15 at 02:16 -0400, Olaf Hering wrote:
> # HG changeset patch
> # User Olaf Hering <olaf@xxxxxxxxx>
> # Date 1316067230 -7200
> # Node ID 3a3a5979b799d948802183d10d65894ee84a872f
> # Parent  6beca8cbc2c92900859712f8738db17084bcebdb
> xenpaging: add evict_pages function
> 
> Add new function to evict a couple of pages.

Do you really mean "a couple" here? (that generally means exactly two).
>From the implementation I think you mean evict a batch of pages?

> Allocate all possible slots in a paging file to allow growing and
> shrinking of the number of paged-out pages. Adjust other places to
> iterate over all slots.
> 
> This change is required by subsequent patches.
> 
> Signed-off-by: Olaf Hering <olaf@xxxxxxxxx>
> 
> diff -r 6beca8cbc2c9 -r 3a3a5979b799 tools/xenpaging/xenpaging.c
> --- a/tools/xenpaging/xenpaging.c
> +++ b/tools/xenpaging/xenpaging.c
> @@ -597,6 +597,30 @@ static int evict_victim(xenpaging_t *pag
>      return ret;
>  }
>  
> +/* Evict a couple of pages and write them to a free slot in the paging file 
> */
> +static int evict_pages(xenpaging_t *paging, int fd, xenpaging_victim_t 
> *victims, int num_pages)
> +{
> +    xc_interface *xch = paging->xc_handle;
> +    int rc, slot, num = 0;
> +
> +    for ( slot = 0; slot < paging->max_pages && num < num_pages; slot++ )
> +    {
> +        /* Slot is allocated */
> +        if ( victims[slot].gfn != INVALID_MFN )
> +            continue;
> +
> +        rc = evict_victim(paging, &victims[slot], fd, slot);
> +        if ( rc == -ENOSPC )
> +            break;
> +        if ( rc == -EINTR )
> +            break;
> +        if ( num && num % 100 == 0 )
> +            DPRINTF("%d pages evicted\n", num);
> +        num++;
> +    }
> +    return num;
> +}
> +
>  int main(int argc, char *argv[])
>  {
>      struct sigaction act;
> @@ -639,7 +663,12 @@ int main(int argc, char *argv[])
>          return 2;
>      }
>  
> -    victims = calloc(paging->num_pages, sizeof(xenpaging_victim_t));
> +    /* Allocate upper limit of pages to allow growing and shrinking */
> +    victims = calloc(paging->max_pages, sizeof(xenpaging_victim_t));
> +
> +    /* Mark all slots as unallocated */
> +    for ( i = 0; i < paging->max_pages; i++ )
> +        victims[i].gfn = INVALID_MFN;
>  
>      /* ensure that if we get a signal, we'll do cleanup, then exit */
>      act.sa_handler = close_handler;
> @@ -653,18 +682,7 @@ int main(int argc, char *argv[])
>      /* listen for page-in events to stop pager */
>      create_page_in_thread(paging);
>  
> -    /* Evict pages */
> -    for ( i = 0; i < paging->num_pages; i++ )
> -    {
> -        rc = evict_victim(paging, &victims[i], fd, i);
> -        if ( rc == -ENOSPC )
> -            break;
> -        if ( rc == -EINTR )
> -            break;
> -        if ( i % 100 == 0 )
> -            DPRINTF("%d pages evicted\n", i);
> -    }
> -
> +    i = evict_pages(paging, fd, victims, paging->num_pages);
>      DPRINTF("%d pages evicted. Done.\n", i);
>  
>      /* Swap pages in and out */
> @@ -690,13 +708,13 @@ int main(int argc, char *argv[])
>              if ( test_and_clear_bit(req.gfn, paging->bitmap) )
>              {
>                  /* Find where in the paging file to read from */
> -                for ( i = 0; i < paging->num_pages; i++ )
> +                for ( i = 0; i < paging->max_pages; i++ )
>                  {
>                      if ( victims[i].gfn == req.gfn )
>                          break;
>                  }
>      
> -                if ( i >= paging->num_pages )
> +                if ( i >= paging->max_pages )
>                  {
>                      DPRINTF("Couldn't find page %"PRIx64"\n", req.gfn);
>                      goto out;
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel



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