[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] forward ported James Bulpin's performance counters tool



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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.