|
[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 |