[Raw Msg Headers][Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

My (recent) musings about router script language..




I have written into the ChangeLog following thing:

1999-05-30  Matti Aarnio  <mea@mea.tmt.tele.fi>

	* libsh/expand.c + include/listutils.h, libsh/builtins.c,
	  libsh/interpret.c, libsh/listmalloc.c, libsh/listtrees.c,
	  libsh/variables.c, router/db.c, router/functions.c,
	  router/shliaise.c:
	    After much wondering about profiles (-pg), realized that
	    about 20% of total runtime is spent in fairly complicated
	    recursive list object copying, while the default case of it
	    is a linear list, which should be really simple...  Also,
	    there is absolutely *no* reason to copy CAR() branch in
	    most cases!  In fact we seem NEVER have need for full TREE
	    copying, just current CDR chain!

	    This turned up to supply router speedup of about factor 1.14
	    with vger.rutgers.edu's workloads. (about 12 %)

	    expand(), and its subroutines, are still consuming about
	    16.8% of the total runtime. (860 recipient addresses in the
	    test set, with crossbar() total of 1737 $(router ..) calls,
	    228k calls of expand() -- after all, one for each function
	    call within the script.)  Out of that, perhaps about 7% of
	    the total runtime is amendable to changes without changeing
	    overall system semantics radically...
	    ... for that matter, perhaps for security point of view it
	    could be better to explicitely execute calls that invoke
	    subroutine IO redirection, and shell glob expansion..  With
	    that, the shell script language could be turned into more
	    secure one, and perhaps this 16% could be eliminated entirely ?

	    A historical note from about 1994 shows that router speed for
	    a reasonable test run was about 120 k messages per 24h, or
	    1.39 recipients per second at a SparcStation-10/50.  Syslog
	    monitoring and load factor estimating  at vger.rutgers.edu
	    with (on average) 50 recipient messages seems to indicate
	    a speed of about 18-23 recipients per second at similar
	    hardware, although 1) compiler has evolved, 2) workload is
	    different, 3) router internal machinery has had *radical*
	    changes.

	--------------

These musings would mean that current

	for x in [1-9]*
	do
		process $x
	done

would not work, but following would:

	for x in $(glob [1-9]*)
	...

For traditionalists, the parameter(s) to the glob function
could be enclosed in quotes:

	for x in $(glob "[1-9]*")
	...

For the back-tick processing I noticed eventually that it happens
only at  "eval", which is implicitely done to every input line one
enters at the (interactive) prompt, but in what situations those
evals happen, that I can't cover quite so easily..  (yet)

/Matti Aarnio