ChangeSet 1.1242, 2005/03/02 17:18:39+00:00,
rneugeba@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
forward ported James Bulpin's performance counters tool
Signed-off-by: michael.fetterman@xxxxxxxxxxxx
libxc/xc.h | 5
libxc/xc_misc.c | 33 +
misc/Makefile | 3
misc/cpuperf/Makefile | 51 ++
misc/cpuperf/README.txt | 371 ++++++++++++++++++++
misc/cpuperf/cpuperf.c | 301 ++++++++++++++++
misc/cpuperf/cpuperf_perfcntr.h | 41 ++
misc/cpuperf/cpuperf_xeno.h | 38 ++
misc/cpuperf/module/Makefile | 16
misc/cpuperf/module/perfcntr.c | 730 ++++++++++++++++++++++++++++++++++++++++
misc/cpuperf/p4perf.h | 382 ++++++++++++++++++++
11 files changed, 1971 insertions(+)
diff -Nru a/tools/libxc/xc.h b/tools/libxc/xc.h
--- a/tools/libxc/xc.h 2005-04-05 12:06:31 -04:00
+++ b/tools/libxc/xc.h 2005-04-05 12:06:31 -04:00
@@ -370,6 +370,11 @@
u32 op,
xc_perfc_desc_t *desc);
+/* read/write msr */
+long long xc_msr_read(int xc_handle, int cpu_mask, int msr);
+int xc_msr_write(int xc_handle, int cpu_mask, int msr, unsigned int low,
+ unsigned int high);
+
/**
* Memory maps a range within one domain to a local address range. Mappings
* should be unmapped with munmap and should follow the same rules as mmap
diff -Nru a/tools/libxc/xc_misc.c b/tools/libxc/xc_misc.c
--- a/tools/libxc/xc_misc.c 2005-04-05 12:06:31 -04:00
+++ b/tools/libxc/xc_misc.c 2005-04-05 12:06:31 -04:00
@@ -97,3 +97,36 @@
return (rc == 0) ? dop.u.perfccontrol.nr_counters : rc;
}
+
+long long xc_msr_read(int xc_handle, int cpu_mask, int msr)
+{
+ int rc;
+ dom0_op_t op;
+
+ op.cmd = DOM0_MSR;
+ op.u.msr.write = 0;
+ op.u.msr.msr = msr;
+ op.u.msr.cpu_mask = cpu_mask;
+
+ rc = do_dom0_op(xc_handle, &op);
+
+ return (((unsigned long long)op.u.msr.out2)<<32) | op.u.msr.out1 ;
+}
+
+int xc_msr_write(int xc_handle, int cpu_mask, int msr, unsigned int low,
+ unsigned int high)
+{
+ int rc;
+ dom0_op_t op;
+
+ op.cmd = DOM0_MSR;
+ op.u.msr.write = 1;
+ op.u.msr.msr = msr;
+ op.u.msr.cpu_mask = cpu_mask;
+ op.u.msr.in1 = low;
+ op.u.msr.in2 = high;
+
+ rc = do_dom0_op(xc_handle, &op);
+
+ return rc;
+}
diff -Nru a/tools/misc/Makefile b/tools/misc/Makefile
--- a/tools/misc/Makefile 2005-04-05 12:06:31 -04:00
+++ b/tools/misc/Makefile 2005-04-05 12:06:31 -04:00
@@ -21,18 +21,21 @@
all: $(TARGETS)
$(MAKE) -C miniterm
+ $(MAKE) -C cpuperf
install: all
[ -d $(DESTDIR)/usr/bin ] || $(INSTALL_DIR) $(DESTDIR)/usr/bin
[ -d $(DESTDIR)/usr/sbin ] || $(INSTALL_DIR) $(DESTDIR)/usr/sbin
$(INSTALL_PROG) $(INSTALL_BIN) $(DESTDIR)/usr/bin
$(INSTALL_PROG) $(INSTALL_SBIN) $(DESTDIR)/usr/sbin
+ $(MAKE) -C cpuperf install
# No sense in installing miniterm on the Xen box.
# $(MAKE) -C miniterm install
clean:
$(RM) *.o $(TARGETS) *~
$(MAKE) -C miniterm clean
+ $(MAKE) -C cpuperf clean
%.o: %.c $(HDRS) Makefile
$(CC) -c $(CFLAGS) -o $@ $<
diff -Nru a/tools/misc/cpuperf/Makefile b/tools/misc/cpuperf/Makefile
--- /dev/null Wed Dec 31 16:00:00 196900
+++ b/tools/misc/cpuperf/Makefile 2005-04-05 12:06:31 -04:00
@@ -0,0 +1,51 @@
+#
+# Make Performance counter tool
+#
+# $Id: Makefile,v 1.1 2003/10/13 16:49:44 jrb44 Exp $
+#
+# $Log: Makefile,v $
+# Revision 1.1 2003/10/13 16:49:44 jrb44
+# Initial revision
+#
+#
+
+INSTALL = install
+INSTALL_PROG = $(INSTALL) -m0755
+INSTALL_DIR = $(INSTALL) -d -m0755
+
+# these are for Xen
+XEN_ROOT=../../..
+include $(XEN_ROOT)/tools/Rules.mk
+
+CC = gcc
+CFLAGS = -Wall -O3
+
+HDRS = $(wildcard *.h)
+SRCS = $(wildcard *.c)
+OBJS = $(patsubst %.c,%.o,$(SRCS))
+
+TARGETS = cpuperf-xen cpuperf-perfcntr
+
+INSTALL_BIN = $(TARGETS)
+
+
+all: $(TARGETS)
+
+clean:
+ $(RM) *.o $(TARGETS)
+
+%: %.c $(HDRS) Makefile
+ $(CC) $(CFLAGS) -o $@ $<
+
+cpuperf-xen: cpuperf.c $(HDRS) Makefile
+ $(CC) $(CFLAGS) -I $(XEN_LIBXC) -L$(XEN_LIBXC) -lxc -L$(XEN_LIBXUTIL)
-lxutil -DXENO -o $@ $<
+
+cpuperf-perfcntr: cpuperf.c $(HDRS) Makefile
+ $(CC) $(CFLAGS) -DPERFCNTR -o $@ $<
+
+install: all
+ $(INSTALL_PROG) $(INSTALL_BIN) $(DESTDIR)/usr/bin
+
+
+# End of $RCSfile: Makefile,v $
+
diff -Nru a/tools/misc/cpuperf/README.txt b/tools/misc/cpuperf/README.txt
--- /dev/null Wed Dec 31 16:00:00 196900
+++ b/tools/misc/cpuperf/README.txt 2005-04-05 12:06:31 -04:00
@@ -0,0 +1,371 @@
+Usage
+=====
+
+Use either xen-cpuperf, cpuperf-perfcntr as appropriate to the system
+in use.
+
+To write:
+
+ cpuperf -E <escr> -C <cccr>
+
+ optional: all numbers in base 10 unless specified
+
+ -d Debug mode
+ -c <cpu> CPU number
+ -t <thread> ESCR thread bits - default is 12 (Thread 0 all rings)
+ bit 0: Thread 1 in rings 1,2,3
+ bit 1: Thread 1 in ring 0
+ bit 2: Thread 0 in rings 1,2,3
+ bit 3: Thread 0 in ring 0
+ -e <eventsel> Event selection number
+ -m <eventmask> Event mask bits
+ -T <value> ESCR tag value
+ -k Sets CCCR 'compare' bit
+ -n Sets CCCR 'complement' bit
+ -g Sets CCCR 'edge' bit
+ -P <bit> Set the specified bit in MSR_P4_PEBS_ENABLE
+ -V <bit> Set the specified bit in MSR_P4_PEBS_MATRIX_VERT
+ (-V and -P may be used multiple times to set multiple bits.)
+
+To read:
+
+ cpuperf -r
+
+ optional: all numbers in base 10 unless specified
+
+ -c <cpu> CPU number
+
+<cccr> values:
+
+ BPU_CCCR0
+ BPU_CCCR1
+ BPU_CCCR2
+ BPU_CCCR3
+ MS_CCCR0
+ MS_CCCR1
+ MS_CCCR2
+ MS_CCCR3
+ FLAME_CCCR0
+ FLAME_CCCR1
+ FLAME_CCCR2
+ FLAME_CCCR3
+ IQ_CCCR0
+ IQ_CCCR1
+ IQ_CCCR2
+ IQ_CCCR3
+ IQ_CCCR4
+ IQ_CCCR5
+ NONE - do not program any CCCR, used when setting up an ESCR for tagging
+
+<escr> values:
+
+ BSU_ESCR0
+ BSU_ESCR1
+ FSB_ESCR0
+ FSB_ESCR1
+ MOB_ESCR0
+ MOB_ESCR1
+ PMH_ESCR0
+ PMH_ESCR1
+ BPU_ESCR0
+ BPU_ESCR1
+ IS_ESCR0
+ IS_ESCR1
+ ITLB_ESCR0
+ ITLB_ESCR1
+ IX_ESCR0
+ IX_ESCR1
+ MS_ESCR0
+ MS_ESCR1
+ TBPU_ESCR0
+ TBPU_ESCR1
+ TC_ESCR0
+ TC_ESCR1
+ FIRM_ESCR0
+ FIRM_ESCR1
+ FLAME_ESCR0
+ FLAME_ESCR1
+ DAC_ESCR0
+ DAC_ESCR1
+ SAAT_ESCR0
+ SAAT_ESCR1
+ U2L_ESCR0
+ U2L_ESCR1
+ CRU_ESCR0
+ CRU_ESCR1
+ CRU_ESCR2
+ CRU_ESCR3
+ CRU_ESCR4
+ CRU_ESCR5
+ IQ_ESCR0
+ IQ_ESCR1
+ RAT_ESCR0
+ RAT_ESCR1
+ SSU_ESCR0
+ SSU_ESCR1
+ ALF_ESCR0
+ ALF_ESCR1
+
+
+Example configurations
+======================
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|