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

Re: [Xen-devel] [PATCH v2] tools/tests/mem-sharing/memshrtool share-all test



At 09:34 -0400 on 18 Mar (1363599276), Tamas Lengyel wrote:
> Update memshrtool test program to allow sharing of all pages of two domains
> with identical memory sizes. Currently the tool only allows sharing of
> specific pages. With this patch we can quickly share all pages between clones
> and check how many pages were successfully deduplicated. The pages' content
> are not checked, therefore this mode is only safe for clone domains.

Cc'ing Andres, who wrote the original tool. 

Tim.

> v2: fix typo of source_info
> 
> Signed-off-by: Tamas Lengyel <tamas.lengyel@xxxxxxxxxxxx>
> ---
>  tools/tests/mem-sharing/memshrtool.c |   58 
> ++++++++++++++++++++++++++++++++++
>  1 files changed, 58 insertions(+), 0 deletions(-)
> 
> diff --git a/tools/tests/mem-sharing/memshrtool.c 
> b/tools/tests/mem-sharing/memshrtool.c
> index db44294..b3fd415 100644
> --- a/tools/tests/mem-sharing/memshrtool.c
> +++ b/tools/tests/mem-sharing/memshrtool.c
> @@ -10,9 +10,12 @@
>  #include <errno.h>
>  #include <string.h>
>  #include <sys/mman.h>
> +#include <inttypes.h>
>  
>  #include "xenctrl.h"
>  
> +#define PAGE_SIZE_KB (XC_PAGE_SIZE/1024)
> +
>  static int usage(const char* prog)
>  {
>      printf("usage: %s <command> [args...]\n", prog);
> @@ -24,6 +27,8 @@ static int usage(const char* prog)
>      printf("  share <domid> <gfn> <handle> <source> <source-gfn> 
> <source-handle>\n");
>      printf("                          - Share two pages.\n");
>      printf("  unshare <domid> <gfn>   - Unshare a page by grabbing a 
> writable map.\n");
> +    printf("  share-all <domid> <source>\n");
> +    printf("                          - Share all pages.\n");
>      printf("  add-to-physmap <domid> <gfn> <source> <source-gfn> 
> <source-handle>\n");
>      printf("                          - Populate a page in a domain with a 
> shared page.\n");
>      printf("  debug-gfn <domid> <gfn> - Debug a particular domain and 
> gfn.\n");
> @@ -131,6 +136,59 @@ int main(int argc, const char** argv)
>              munmap(map, 4096);
>          R((int)!map);
>      }
> +    else if( !strcasecmp(cmd, "share-all") )
> +    {
> +        domid_t domid;
> +        uint64_t handle;
> +        domid_t source_domid;
> +        uint64_t source_handle;
> +        xc_dominfo_t info, source_info;
> +        uint64_t pages, source_pages;
> +        uint64_t total_shared=0;
> +        int ret;
> +        uint64_t share_page;
> +
> +        if( argc != 4 )
> +            return usage(argv[0]);
> +
> +        domid = strtol(argv[2], NULL, 0);
> +        source_domid = strtol(argv[3], NULL, 0);
> +
> +        ret=xc_domain_getinfo(xch, domid, 1, &info);
> +        if(ret!=1 || info.domid != domid)
> +            return usage(argv[0]);
> +        pages=info.max_memkb/PAGE_SIZE_KB;
> +
> +        ret=xc_domain_getinfo(xch, source_domid, 1, &source_info);
> +        if(ret!=1 || source_info.domid != source_domid)
> +            return usage(argv[0]);
> +        source_pages=source_info.max_memkb/PAGE_SIZE_KB;
> +
> +        if(pages != source_pages) {
> +            printf("Page count in source and destination domain doesn't 
> match "
> +                   "(source: %"PRIu64", destination %"PRIu64")\n", 
> source_pages, pages);
> +            return 1;
> +        }
> +
> +        for(share_page=0;share_page<=pages;++share_page) {
> +
> +            ret=xc_memshr_nominate_gfn(xch, domid, share_page, &handle);
> +            if(ret<0) {
> +                continue;
> +            }
> +
> +            ret=xc_memshr_nominate_gfn(xch, source_domid, share_page, 
> &source_handle);
> +            if(ret<0) {
> +                continue;
> +            }
> +
> +            ret=xc_memshr_share_gfns(xch, source_domid, share_page, 
> source_handle, domid, share_page, handle);
> +            if(ret>=0) total_shared++;
> +        }
> +
> +        printf("Shared pages: %"PRIu64" out of %"PRIu64"\n", total_shared, 
> pages);
> +
> +    }
>      else if( !strcasecmp(cmd, "add-to-physmap") )
>      {
>          domid_t domid;
> -- 
> 1.7.2.5
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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