Message ID | 1498807291-3356-2-git-send-email-dongli.zhang@oracle.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Fri, Jun 30, 2017 at 03:21:31PM +0800, Dongli Zhang wrote: > + > +int main(int argc, char *argv[]) > +{ > + xc_interface *xch; > + int domid, rc, c; > + struct gnttab_query_size query; > + > + while ( (c = getopt(argc, argv, "h")) != -1 ) > + { > + switch ( c ) > + { > + case 'h': > + show_help(); > + return 0; > + } > + } > + > + domid = (argc > 1) ? strtol(argv[1], NULL, 10) : 0; This is too simplistic. It basically means ./query -x 100 will not report an error. You should use optind instead. See man 3 getopt for examples.
On Fri, Jun 30, 2017 at 03:21:31PM +0800, Dongli Zhang wrote: > As both xen-netfront and xen-blkfront support multi-queue, they would > consume a lot of grant table references when there are many paravirtual > devices and vcpus assigned to guest. Guest domU might panic or hang due to > grant allocation failure when nr_grant_frames in guest has reached its max > value. > > This utility would help the administrators to monitor the guest grant table > frame usage on dom0 side so that it is not required to debug on guest > kernel side for crash/hang analysis anymore. > > Signed-off-by: Dongli Zhang <dongli.zhang@oracle.com> > --- > tools/misc/Makefile | 4 ++++ > tools/misc/xen-gnttab-query.c | 45 +++++++++++++++++++++++++++++++++++++++++++ Would this be better name 'xen-diag' or such? And in the future more diagnostic pieces could be added in? For example I can see parts of xen-hptool moving in there. > 2 files changed, 49 insertions(+) > create mode 100644 tools/misc/xen-gnttab-query.c > > diff --git a/tools/misc/Makefile b/tools/misc/Makefile > index 8152f7b..d081b4b 100644 > --- a/tools/misc/Makefile > +++ b/tools/misc/Makefile > @@ -31,6 +31,7 @@ INSTALL_SBIN += xenperf > INSTALL_SBIN += xenpm > INSTALL_SBIN += xenwatchdogd > INSTALL_SBIN += xen-livepatch > +INSTALL_SBIN += xen-gnttab-query > INSTALL_SBIN += $(INSTALL_SBIN-y) > > # Everything to be installed in a private bin/ > @@ -108,4 +109,7 @@ xen-lowmemd: xen-lowmemd.o > xencov: xencov.o > $(CC) $(LDFLAGS) -o $@ $< $(LDLIBS_libxenctrl) $(APPEND_LDFLAGS) > > +xen-gnttab-query: xen-gnttab-query.o > + $(CC) $(LDFLAGS) -o $@ $< $(LDLIBS_libxenctrl) $(APPEND_LDFLAGS) > + > -include $(DEPS) > diff --git a/tools/misc/xen-gnttab-query.c b/tools/misc/xen-gnttab-query.c > new file mode 100644 > index 0000000..3f93a6c > --- /dev/null > +++ b/tools/misc/xen-gnttab-query.c > @@ -0,0 +1,45 @@ Please add Oracle's copyright (see the xen-livepatch.c for example). > +#include <stdio.h> > +#include <stdlib.h> > +#include <err.h> > +#include <xenctrl.h> > + > +void show_help(void) > +{ > + fprintf(stderr, > + "xen-gnttab-query: query grant table info\n" > + "Usage: xen-gnttab-query [domid (default 0)]\n"); > +} > + > +int main(int argc, char *argv[]) > +{ > + xc_interface *xch; > + int domid, rc, c; > + struct gnttab_query_size query; > + > + while ( (c = getopt(argc, argv, "h")) != -1 ) > + { > + switch ( c ) > + { > + case 'h': > + show_help(); > + return 0; > + } > + } > + > + domid = (argc > 1) ? strtol(argv[1], NULL, 10) : 0; > + > + xch = xc_interface_open(0, 0, 0); > + if ( !xch ) > + errx(1, "failed to open control interface"); > + > + query.dom = domid; > + rc = xc_gnttab_query_size(xch, &query); > + > + if ( rc == 0 && (query.status == GNTST_okay) ) > + printf("domid=%d: nr_frames=%d, max_nr_frames=%d\n", > + query.dom, query.nr_frames, query.max_nr_frames); > + > + xc_interface_close(xch); > + > + return 0; > +} > -- > 2.7.4 > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > https://lists.xen.org/xen-devel
diff --git a/tools/misc/Makefile b/tools/misc/Makefile index 8152f7b..d081b4b 100644 --- a/tools/misc/Makefile +++ b/tools/misc/Makefile @@ -31,6 +31,7 @@ INSTALL_SBIN += xenperf INSTALL_SBIN += xenpm INSTALL_SBIN += xenwatchdogd INSTALL_SBIN += xen-livepatch +INSTALL_SBIN += xen-gnttab-query INSTALL_SBIN += $(INSTALL_SBIN-y) # Everything to be installed in a private bin/ @@ -108,4 +109,7 @@ xen-lowmemd: xen-lowmemd.o xencov: xencov.o $(CC) $(LDFLAGS) -o $@ $< $(LDLIBS_libxenctrl) $(APPEND_LDFLAGS) +xen-gnttab-query: xen-gnttab-query.o + $(CC) $(LDFLAGS) -o $@ $< $(LDLIBS_libxenctrl) $(APPEND_LDFLAGS) + -include $(DEPS) diff --git a/tools/misc/xen-gnttab-query.c b/tools/misc/xen-gnttab-query.c new file mode 100644 index 0000000..3f93a6c --- /dev/null +++ b/tools/misc/xen-gnttab-query.c @@ -0,0 +1,45 @@ +#include <stdio.h> +#include <stdlib.h> +#include <err.h> +#include <xenctrl.h> + +void show_help(void) +{ + fprintf(stderr, + "xen-gnttab-query: query grant table info\n" + "Usage: xen-gnttab-query [domid (default 0)]\n"); +} + +int main(int argc, char *argv[]) +{ + xc_interface *xch; + int domid, rc, c; + struct gnttab_query_size query; + + while ( (c = getopt(argc, argv, "h")) != -1 ) + { + switch ( c ) + { + case 'h': + show_help(); + return 0; + } + } + + domid = (argc > 1) ? strtol(argv[1], NULL, 10) : 0; + + xch = xc_interface_open(0, 0, 0); + if ( !xch ) + errx(1, "failed to open control interface"); + + query.dom = domid; + rc = xc_gnttab_query_size(xch, &query); + + if ( rc == 0 && (query.status == GNTST_okay) ) + printf("domid=%d: nr_frames=%d, max_nr_frames=%d\n", + query.dom, query.nr_frames, query.max_nr_frames); + + xc_interface_close(xch); + + return 0; +}
As both xen-netfront and xen-blkfront support multi-queue, they would consume a lot of grant table references when there are many paravirtual devices and vcpus assigned to guest. Guest domU might panic or hang due to grant allocation failure when nr_grant_frames in guest has reached its max value. This utility would help the administrators to monitor the guest grant table frame usage on dom0 side so that it is not required to debug on guest kernel side for crash/hang analysis anymore. Signed-off-by: Dongli Zhang <dongli.zhang@oracle.com> --- tools/misc/Makefile | 4 ++++ tools/misc/xen-gnttab-query.c | 45 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 tools/misc/xen-gnttab-query.c