axiom-developer
[Top][All Lists]
Advanced

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

[Axiom-developer] Loading of databases


From: Waldek Hebisch
Subject: [Axiom-developer] Loading of databases
Date: Wed, 15 Nov 2006 20:42:49 +0100 (CET)

The following patch makes caching of databases effective and
reduces startup time of AXIOMsys.  Debian uses similar patch
and claims huge reduction of time needed to run tests, but
for me test time remained effectively unchanged.

diff -ru build-improvements.bb/src/etc/Makefile.in 
build-improvements/src/etc/Makefile.in
--- build-improvements.bb/src/etc/Makefile.in   2006-11-15 13:15:29.000000000 
+0100
+++ build-improvements/src/etc/Makefile.in      2006-11-15 13:46:07.000000000 
+0100
@@ -14,6 +14,7 @@
                $(axiom_target_libdir)/summary \
                $(axiom_target_libdir)/copyright \
                $(axiom_target_bindir)/axiom
+       (cd ../interp && $(ENV) $(MAKE) axiomsys)
        @echo 6 finished $(builddir)
        -rm -f stamp
        $(STAMP) stamp
diff -ru build-improvements.bb/src/etc/Makefile.pamphlet 
build-improvements/src/etc/Makefile.pamphlet
--- build-improvements.bb/src/etc/Makefile.pamphlet     2006-11-15 
13:15:29.000000000 +0100
+++ build-improvements/src/etc/Makefile.pamphlet        2006-11-15 
13:23:43.000000000 +0100
@@ -102,6 +102,7 @@
                $(axiom_target_libdir)/summary \
                $(axiom_target_libdir)/copyright \
                $(axiom_target_bindir)/axiom
+       (cd ../interp && $(ENV) $(MAKE) axiomsys)
        @echo 6 finished $(builddir)
        -rm -f stamp
        $(STAMP) stamp
diff -ru build-improvements.bb/src/interp/daase.lisp.pamphlet 
build-improvements/src/interp/daase.lisp.pamphlet
--- build-improvements.bb/src/interp/daase.lisp.pamphlet        2006-11-15 
13:15:27.000000000 +0100
+++ build-improvements/src/interp/daase.lisp.pamphlet   2006-11-15 
13:44:32.000000000 +0100
@@ -56,9 +56,13 @@
 into the image before it is saved. The system would be easier to
 understand and the interpreter would be faster.
 
-The fastest optimization is to fix the time stamp mechanism
-which is currently broken. Making this work requires a small
-bit of coordination at 'make' time which I forgot to implement.
+The system uses another optimization: database contains a stamp
+(consisting of offset to the main list and build time).  Before
+saving the image selected data is fetched to memory.  When the
+saved image starts it checks if the stamp of saved data matches
+in-core data -- in case of agreement in-core data is used.
+Parts of the datatabase which was not pre-loaded is still
+(lazily) fetched from the filesystem.
 
 \subsection{Database Files}
 
diff -ru build-improvements.bb/src/interp/Makefile.in 
build-improvements/src/interp/Makefile.in
--- build-improvements.bb/src/interp/Makefile.in        2006-11-15 
13:15:27.000000000 +0100
+++ build-improvements/src/interp/Makefile.in   2006-11-15 18:03:42.000000000 
+0100
@@ -365,7 +365,8 @@
 distclean-local: clean-local
 
 $(SAVESYS): $(axiom_build_bindir)
-${SAVESYS}:    ${DEPSYS} ${OBJS} ${OUT}/bookvol5.$(OBJEXT) 
${OUT}/util.$(OBJEXT) \
+
+${OUT}/makeint.lisp:   ${DEPSYS} ${OBJS} ${OUT}/bookvol5.$(OBJEXT) 
${OUT}/util.$(OBJEXT) \
                 nocompil.lisp sys-pkg.lisp \
                ${OUTINTERP} ${OCOBJS} ${OPOBJS} ${BROBJS} 
${OUT}/obey.$(OBJEXT) \
                ${OUT}/database.date ${INOBJS} ${ASCOMP} ${ASAUTO} \
@@ -405,12 +406,11 @@
        @ echo '(load "${OUT}/obey")' >> ${OUT}/makeint.lisp
        @ echo '#+:akcl (setq compiler::*suppress-compiler-notes* t)' >> 
${OUT}/makeint.lisp
        @ echo '#+:akcl (si::gbc-time 0)' >> ${OUT}/makeint.lisp
+
+${SAVESYS}: ${OUT}/makeint.lisp
        @echo '(progn (gbc t) (load "${OUT}/makeint.lisp") (gbc t) 
(user::spad-save "$@"))' | ${LISPSYS}
        @ echo 6 ${SAVESYS} created
        $(mkinstalldirs) $(axiom_target_bindir)
-       @ $(INSTALL_PROGRAM) $(SAVESYS) $(AXIOMSYS)
-       @ echo 6a ${AXIOMSYS} created
-
 depsys_lisp_sources += parsing.lisp metalex.lisp bootlex.lisp \
                        newaux.lisp preparse.lisp postprop.lisp \
                        metameta.lisp fnewmeta.lisp
@@ -483,6 +483,14 @@
        @ echo '(progn (load "makedep.lisp") (spad-save "$@"))' \
                | ${LISPSYS}
        @ echo 4 ${DEPSYS} created
+.PHONY: axiomsys
+
+axiomsys: ${AXIOMSYS}
+
+${AXIOMSYS}: ${OUT}/makeint.lisp
+       @echo '(progn (gbc t) (load "${OUT}/makeint.lisp") (gbc t)' \
+          '(user::spad-save "$@"))' | DAASE=$(axiom_targetdir) ${LISPSYS}
+       @ echo 6a ${AXIOMSYS} created
 ${DEBUGSYS}: ${MID}/debugsys.lisp
        @ echo 7 building debugsys
        @ echo '(progn (gbc t) (load "${MID}/debugsys.lisp") (user::spad-save 
"$@"))' | ${LISPSYS}
diff -ru build-improvements.bb/src/interp/Makefile.pamphlet 
build-improvements/src/interp/Makefile.pamphlet
--- build-improvements.bb/src/interp/Makefile.pamphlet  2006-11-15 
13:15:27.000000000 +0100
+++ build-improvements/src/interp/Makefile.pamphlet     2006-11-15 
17:08:33.000000000 +0100
@@ -1008,7 +1008,8 @@
 
 <<savesys>>=
 $(SAVESYS): $(axiom_build_bindir)
-${SAVESYS}:    ${DEPSYS} ${OBJS} ${OUT}/bookvol5.$(OBJEXT) 
${OUT}/util.$(OBJEXT) \
+
+${OUT}/makeint.lisp:   ${DEPSYS} ${OBJS} ${OUT}/bookvol5.$(OBJEXT) 
${OUT}/util.$(OBJEXT) \
                 nocompil.lisp sys-pkg.lisp \
                ${OUTINTERP} ${OCOBJS} ${OPOBJS} ${BROBJS} 
${OUT}/obey.$(OBJEXT) \
                ${OUT}/database.date ${INOBJS} ${ASCOMP} ${ASAUTO} \
@@ -1048,12 +1049,29 @@
        @ echo '(load "${OUT}/obey")' >> ${OUT}/makeint.lisp
        @ echo '#+:akcl (setq compiler::*suppress-compiler-notes* t)' >> 
${OUT}/makeint.lisp
        @ echo '#+:akcl (si::gbc-time 0)' >> ${OUT}/makeint.lisp
+
+${SAVESYS}: ${OUT}/makeint.lisp
        @echo '(progn (gbc t) (load "${OUT}/makeint.lisp") (gbc t) 
(user::spad-save "$@"))' | ${LISPSYS}
        @ echo 6 ${SAVESYS} created
        $(mkinstalldirs) $(axiom_target_bindir)
-       @ $(INSTALL_PROGRAM) $(SAVESYS) $(AXIOMSYS)
-       @ echo 6a ${AXIOMSYS} created
+@
+
+\section{Building SAVESYS and AXIOMSYS}
 
+We want to cache database data in the final image, so we dump it only
+after databases are build (triggered from \File{etc/Makefile.pamphlet}).
+Note that having dependency on databases is not enough, since databases
+are re-generated after leaving \File{interp/} directory.
+
+<<axiomsys>>=
+.PHONY: axiomsys
+
+axiomsys: ${AXIOMSYS}
+
+${AXIOMSYS}: ${OUT}/makeint.lisp
+       @echo '(progn (gbc t) (load "${OUT}/makeint.lisp") (gbc t)' \
+          '(user::spad-save "$@"))' | DAASE=$(axiom_targetdir) ${LISPSYS}
+       @ echo 6a ${AXIOMSYS} created
 @
 
 \section{Building debugsys}
@@ -4597,6 +4615,7 @@
 
 <<savesys>>
 <<depsys>>
+<<axiomsys>>
 <<debugsys>>
 <<databases>>
 

-- 
                              Waldek Hebisch
address@hidden 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]