[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |