[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [RFC PATCH 2/2] tools/misc: Add xen-stats tool
Add a demostration tool that uses the stats_table resource to query vcpu time for a DomU. Signed-off-by: Matias Ezequiel Vara Larsen <matias.vara@xxxxxxxx> --- tools/misc/Makefile | 5 +++ tools/misc/xen-stats.c | 83 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 tools/misc/xen-stats.c diff --git a/tools/misc/Makefile b/tools/misc/Makefile index 2b683819d4..b510e3aceb 100644 --- a/tools/misc/Makefile +++ b/tools/misc/Makefile @@ -135,4 +135,9 @@ xencov: xencov.o xen-ucode: xen-ucode.o $(CC) $(LDFLAGS) -o $@ $< $(LDLIBS_libxenctrl) $(APPEND_LDFLAGS) +xen-stats.o: CFLAGS += $(CFLAGS_libxenforeginmemory) + +xen-stats: xen-stats.o + $(CC) $(LDFLAGS) -o $@ $< $(LDLIBS_libxenctrl) $(LDLIBS_libxenforeignmemory) $(APPEND_LDFLAGS) + -include $(DEPS_INCLUDE) diff --git a/tools/misc/xen-stats.c b/tools/misc/xen-stats.c new file mode 100644 index 0000000000..5d4a3239cc --- /dev/null +++ b/tools/misc/xen-stats.c @@ -0,0 +1,83 @@ +#include <err.h> +#include <errno.h> +#include <error.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/mman.h> +#include <signal.h> + +#include <xenctrl.h> +#include <xenforeignmemory.h> +#include <xen-tools/libs.h> + +static sig_atomic_t interrupted; +static void close_handler(int signum) +{ + interrupted = 1; +} + +int main(int argc, char **argv) +{ + xenforeignmemory_handle *fh; + xenforeignmemory_resource_handle *res; + size_t size; + int rc, nr_frames, domid, frec, vcpu; + uint64_t * info; + struct sigaction act; + + if (argc != 4 ) { + fprintf(stderr, "Usage: %s <domid> <vcpu> <period>\n", argv[0]); + return 1; + } + + // TODO: this depends on the resource + nr_frames = 1; + + domid = atoi(argv[1]); + frec = atoi(argv[3]); + vcpu = atoi(argv[2]); + + act.sa_handler = close_handler; + act.sa_flags = 0; + sigemptyset(&act.sa_mask); + sigaction(SIGHUP, &act, NULL); + sigaction(SIGTERM, &act, NULL); + sigaction(SIGINT, &act, NULL); + sigaction(SIGALRM, &act, NULL); + + fh = xenforeignmemory_open(NULL, 0); + + if ( !fh ) + err(1, "xenforeignmemory_open"); + + rc = xenforeignmemory_resource_size( + fh, domid, XENMEM_resource_stats_table, + vcpu, &size); + + if ( rc ) + err(1, " Fail: Get size: %d - %s\n", errno, strerror(errno)); + + if ( (size >> XC_PAGE_SHIFT) != nr_frames ) + err(1, " Fail: Get size: expected %u frames, got %zu\n", + nr_frames, size >> XC_PAGE_SHIFT); + + res = xenforeignmemory_map_resource( + fh, domid, XENMEM_resource_stats_table, + vcpu, 0, size >> XC_PAGE_SHIFT, + (void **)&info, PROT_READ, 0); + + if ( !res ) + err(1, " Fail: Map %d - %s\n", errno, strerror(errno)); + + while ( !interrupted ) { + sleep(frec); + printf("running cpu_time: %ld\n", *info); + } + + rc = xenforeignmemory_unmap_resource(fh, res); + if ( rc ) + err(1, " Fail: Unmap %d - %s\n", errno, strerror(errno)); + + return 0; +} -- 2.25.1
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |