[Openmcl-cvs-notifications] r15014 - in /trunk/source/lisp-kernel: darwinx8632/ darwinx8632/Makefile darwinx8664/ darwinx8664/Makefile gc-common.c os-darwin.h probes.d thread_manager.c

rme at clozure.com rme at clozure.com
Tue Oct 11 12:49:24 CDT 2011


Author: rme
Date: Tue Oct 11 12:49:23 2011
New Revision: 15014

Log:
Add a few experimental DTrace probes to the lisp kernel on
Darwin x86 systems.

Added:
    trunk/source/lisp-kernel/probes.d
Modified:
    trunk/source/lisp-kernel/darwinx8632/   (props changed)
    trunk/source/lisp-kernel/darwinx8632/Makefile
    trunk/source/lisp-kernel/darwinx8664/   (props changed)
    trunk/source/lisp-kernel/darwinx8664/Makefile
    trunk/source/lisp-kernel/gc-common.c
    trunk/source/lisp-kernel/os-darwin.h
    trunk/source/lisp-kernel/thread_manager.c

Propchange: trunk/source/lisp-kernel/darwinx8632/
---------------------------------------------------------------------------=
---
--- svn:ignore (added)
+++ svn:ignore Tue Oct 11 12:49:23 2011
@@ -1,0 +1,1 @@
+probes.h

Modified: trunk/source/lisp-kernel/darwinx8632/Makefile
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/source/lisp-kernel/darwinx8632/Makefile (original)
+++ trunk/source/lisp-kernel/darwinx8632/Makefile Tue Oct 11 12:49:23 2011
@@ -32,7 +32,7 @@
 M4 =3D gm4
 M4FLAGS =3D -DDARWIN -DX86 -DX8632
 ASFLAGS =3D -arch i386 -g
-CDEFINES =3D -DDARWIN -DX86 -DX8632 -DSVN_REVISION=3D$(SVN_REVISION) -D_DA=
RWIN_NO_64_BIT_INODE
+CDEFINES =3D -DDARWIN -DX86 -DX8632 -DSVN_REVISION=3D$(SVN_REVISION) -D_DA=
RWIN_NO_64_BIT_INODE -DUSE_DTRACE
 CDEBUG =3D -g
 COPT =3D -O2
 # Once in a while, -Wformat says something useful.  The odds are against t=
hat,
@@ -44,7 +44,9 @@
 .s.o:
 	$(M4) $(M4FLAGS) -I../ $< | $(AS) $(ASFLAGS) -o $@
 .c.o:
-	$(CC) -include ../$(PLATFORM_H) -c -arch i386 $< $(CDEFINES) $(CDEBUG) $(=
COPT) $(MDYNAMIC_NO_PIC) $(WFORMAT) -mmacosx-version-min=3D$(OSVERSION) -is=
ysroot $(SDKROOT) -o $@
+	$(CC) -include ../$(PLATFORM_H) -c -arch i386 $< $(CDEFINES) \
+	$(CDEBUG) $(COPT) $(MDYNAMIC_NO_PIC) $(WFORMAT) \
+	-I. -mmacosx-version-min=3D$(OSVERSION) -isysroot $(SDKROOT) -o $@
 =

 SPOBJ =3D x86-spjump32.o x86-spentry32.o x86-subprims32.o
 ASMOBJ =3D x86-asmutils32.o imports.o
@@ -90,9 +92,11 @@
 =

 $(SPOBJ): $(SPINC)
 $(ASMOBJ): $(SPINC)
-$(COBJ): $(CHEADERS)
+$(COBJ): $(CHEADERS) probes.h
 $(DEBUGOBJ): $(CHEADERS) lispdcmd.h
 =

+probes.h: probes.d
+	dtrace -h -s $<
 =

 =

 thread_manager.o: thread_manager.c =


Propchange: trunk/source/lisp-kernel/darwinx8664/
---------------------------------------------------------------------------=
---
--- svn:ignore (added)
+++ svn:ignore Tue Oct 11 12:49:23 2011
@@ -1,0 +1,1 @@
+probes.h

Modified: trunk/source/lisp-kernel/darwinx8664/Makefile
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/source/lisp-kernel/darwinx8664/Makefile (original)
+++ trunk/source/lisp-kernel/darwinx8664/Makefile Tue Oct 11 12:49:23 2011
@@ -52,7 +52,7 @@
 M4FLAGS =3D -DDARWIN -DX86 -DX8664 -DTCR_IN_GPR
 ASFLAGS =3D -arch x86_64 -g
 CDEFINES =3D -DDARWIN -DX86 -DX8664 -DTCR_IN_GPR -DSVN_REVISION=3D$(SVN_RE=
VISION) \
-	   -D_DARWIN_NO_64_BIT_INODE
+	   -D_DARWIN_NO_64_BIT_INODE -DUSE_DTRACE
 CDEBUG =3D -g
 COPT =3D -O2
 # Once in a while, -Wformat says something useful.  The odds are against t=
hat,
@@ -65,7 +65,7 @@
 .c.o:
 	$(CC) -include ../$(PLATFORM_H) -c $< -arch x86_64 $(CDEFINES) \
 	$(CDEBUG) $(COPT) $(WFORMAT) $(MDYNAMIC_NO_PIC) \
-	 -mmacosx-version-min=3D$(OSVERSION) -isysroot $(SDKROOT) -o $@
+	 -I. -mmacosx-version-min=3D$(OSVERSION) -isysroot $(SDKROOT) -o $@
 =

 SPOBJ =3D x86-spjump64.o x86-spentry64.o x86-subprims64.o =

 ASMOBJ =3D x86-asmutils64.o imports.o
@@ -112,9 +112,11 @@
 =

 $(SPOBJ): $(SPINC)
 $(ASMOBJ): $(SPINC)
-$(COBJ): $(CHEADERS)
+$(COBJ): $(CHEADERS) probes.h
 $(DEBUGOBJ): $(CHEADERS) lispdcmd.h
 =

+probes.h: probes.d
+	dtrace -h -s $<
 =

 thread_manager.o: thread_manager.c =

 =


Modified: trunk/source/lisp-kernel/gc-common.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/source/lisp-kernel/gc-common.c (original)
+++ trunk/source/lisp-kernel/gc-common.c Tue Oct 11 12:49:23 2011
@@ -1446,6 +1446,21 @@
     fprintf(dbgout, ", %s bytes allocated.\n", buf);
   }
 =

+#ifdef USE_DTRACE
+  if (GCephemeral_low) {
+    if (CCL_EGC_START_ENABLED()) {
+      natural bytes_used =3D area_dnode(oldfree, a->low) << dnode_shift;
+      unsigned generation =3D (from =3D=3D g2_area) ? 2 : (from =3D=3D g1_=
area) ? 1 : 0;
+      CCL_EGC_START(bytes_used, generation);
+    }
+  } else {
+    if (CCL_GC_START_ENABLED()) {
+      natural bytes_used =3D area_dnode(oldfree, a->low) << dnode_shift;
+      CCL_GC_START(bytes_used);
+    }
+  }
+#endif
+
   get_time(start);
 =

   /* The link-inverting marker might need to write to watched areas */
@@ -1766,6 +1781,22 @@
         (header_subtag(header_of(val)) =3D=3D subtag_macptr)) {
       long long justfreed =3D oldfree - a->active;
       *( (long long *) ptr_from_lispobj(((macptr *) ptr_from_lispobj(untag=
(val)))->address)) +=3D justfreed;
+
+#ifdef USE_DTRACE
+      if (note =3D=3D tenured_area) {
+	if (CCL_GC_FINISH_ENABLED()) {
+	  natural bytes_freed =3D justfreed <=3D heap_segment_size ? 0 : justfree=
d;
+	  CCL_GC_FINISH(bytes_freed);
+	}
+      } else {
+	if (CCL_EGC_FINISH_ENABLED()) {
+	  natural bytes_freed =3D justfreed <=3D heap_segment_size ? 0 : justfree=
d;
+	  unsigned generation =3D (from =3D=3D g2_area) ? 2 : (from =3D=3D g1_are=
a) ? 1 : 0;
+	  CCL_EGC_FINISH(bytes_freed, generation);
+	}
+      }
+#endif
+
       if (GCverbose) {
         char buf[16];
         paging_info paging_info_stop;

Modified: trunk/source/lisp-kernel/os-darwin.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/source/lisp-kernel/os-darwin.h (original)
+++ trunk/source/lisp-kernel/os-darwin.h Tue Oct 11 12:49:23 2011
@@ -20,3 +20,8 @@
 #define SIG_SUSPEND_THREAD SIGUSR2
 =

 #define SIG_KILL_THREAD SIGEMT
+
+#ifdef USE_DTRACE
+#include "probes.h"
+#endif
+

Added: trunk/source/lisp-kernel/probes.d
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/source/lisp-kernel/probes.d (added)
+++ trunk/source/lisp-kernel/probes.d Tue Oct 11 12:49:23 2011
@@ -1,0 +1,17 @@
+provider ccl {
+    probe gc__start(uint64_t);
+    probe gc__finish(uint64_t);
+    probe egc__start(uint64_t, unsigned);
+    probe egc__finish(uint64_t, unsigned);
+    probe create__thread(unsigned long);
+};
+
+/*
+
+gc-start(uint64_t bytes_allocated)
+gc-finish(uint64_t bytes-freed)
+egc-start(uint64_t bytes-allocated, unsigned generation)
+egc-finish(uint64_t bytes-freed, unsigned generation)
+create-thread(unsigned-long thread-id)
+
+*/

Modified: trunk/source/lisp-kernel/thread_manager.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/source/lisp-kernel/thread_manager.c (original)
+++ trunk/source/lisp-kernel/thread_manager.c Tue Oct 11 12:49:23 2011
@@ -1737,6 +1737,13 @@
     SEM_WAIT_FOREVER(activation.created);	/* Wait until thread's entered i=
ts initial function */
   }
   destroy_semaphore(&activation.created);  =

+
+#ifdef USE_DTRACE
+  if (CCL_CREATE_THREAD_ENABLED() && activation.tcr) {
+    CCL_CREATE_THREAD(activation.tcr->osid);
+  }
+#endif
+
   return TCR_TO_TSD(activation.tcr);
 }
 =




More information about the Openmcl-cvs-notifications mailing list