MOO-cows Mailing List Archive

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

Fixing a 1.8.0p5 performance misdesign (was Re: FUP)



Pavel writes (around a year ago):

> Fozzie writes:
>> (Some of us can't upgrade to 1.8.0p?? since it uses too much CPU
>> time.)

> Can you say more about your basis for believing 1.8.0 to be
> significantly slower than 1.7.9?  I am unaware of any field reports to
> this effect.  Armed with a substantial report, I could at least check
> into the reasons for any loss in speed and, perhaps, discover a
> straightforward fix.

Ben Jackson and I discovered that property lookups of
$server_options.protected_foo were responsible for a substantial chunk
of builtin function execution time.  One test showed 66% of all time
spent in builtins going to this lookup.

Since the .protected_foo properties have an average change rate of
maybe one every couple months, I created a new entry in the builtin
function structure to keep track of the protectedness, and added a new
builtin, load_server_options(), that must be called after changes to
$server_options.

No whining about how gross load_server_options() is unless you have an
alternative solution that isn't as gross.

Jay  

*** MOO-1.8.0p5/functions.c	Thu Apr 18 21:20:48 1996
--- MOO-1.8.0p5steak/functions.c	Mon Feb 10 00:38:13 1997
***************
*** 78,83 ****
--- 78,84 ----
      bf_type             func;
      bf_read_type	read;
      bf_write_type	write;
+     int protected;
  };
  
  static struct bft_entry bf_table[MAX_FUNC];
***************
*** 109,114 ****
--- 110,116 ----
      bf_table[top_bf_table].func = func;
      bf_table[top_bf_table].read = read;
      bf_table[top_bf_table].write = write;
+     bf_table[top_bf_table].protected = 0;
  
      if (num_arg_types > 0)
  	bf_table[top_bf_table].prototype =
***************
*** 198,204 ****
  	/*
  	 * Check permissions, if protected
  	 */
! 	if (caller() != SYSTEM_OBJECT && server_flag_option(f->protect_str)) {
  	    /* Try calling #0:bf_FUNCNAME(@ARGS) instead */
  	    enum error e = call_verb(SYSTEM_OBJECT, f->verb_str, arglist, 0);
  
--- 200,207 ----
  	/*
  	 * Check permissions, if protected
  	 */
! 	/* if (caller() != SYSTEM_OBJECT && server_flag_option(f->protect_str)) { */
! 	if (caller() != SYSTEM_OBJECT && f->protected) { 
  	    /* Try calling #0:bf_FUNCNAME(@ARGS) instead */
  	    enum error e = call_verb(SYSTEM_OBJECT, f->verb_str, arglist, 0);
  
***************
*** 417,426 ****
--- 420,461 ----
      return make_var_pack(r);
  }
  
+ static void
+ load_server_protect_flags(void)
+ {
+   int i;
+ 
+   for (i = 0; i < top_bf_table; i++) {
+     bf_table[i].protected = server_flag_option(bf_table[i].protect_str);
+   }
+   oklog("Loaded protect cache for %d builtins\n", i);
+ }
+ 
+ void
+ load_server_options(void)
+ {
+   load_server_protect_flags();
+ }
+ 
+ static package
+ bf_load_server_options(Var arglist, Byte next, void *vdata, Objid progr)
+ {
+   free_var(arglist);
+   
+   if (!is_wizard(progr)) {
+     return make_error_pack(E_PERM);
+   }
+ 
+   load_server_options();
+ 
+   return no_var_pack();
+ }
+ 
  void
  register_functions(void)
  {
      register_function("function_info", 0, 1, bf_function_info, TYPE_STR);
+     register_function("load_server_options", 0, 0, bf_load_server_options);
  }
  
  char rcsid_functions[] = "$Id: functions.c,v 2.6 1996/04/19 01:20:49 pavel Exp $";
*** MOO-1.8.0p5/functions.h	Thu Apr 18 21:22:03 1996
--- MOO-1.8.0p5steak/functions.h	Mon Feb 10 00:27:58 1997
***************
*** 87,92 ****
--- 87,94 ----
  				  Byte *bi_func_pc);
  extern Byte    *pc_for_bi_func_data(void);
  
+ extern void 	load_server_options(void);
+ 
  #endif
  
  /* $Log: functions.h,v $
*** MOO-1.8.0p5/server.c	Sun May 12 17:26:11 1996
--- MOO-1.8.0p5steak/server.c	Mon Feb 10 00:26:22 1997
***************
*** 1244,1250 ****
  
      if (!db_load())
  	exit(1);
!     
      SRANDOM(time(0));
  
      parent_pid = getpid();
--- 1244,1252 ----
  
      if (!db_load())
  	exit(1);
! 
!     load_server_options();
! 
      SRANDOM(time(0));
  
      parent_pid = getpid();


Follow-Ups:

Home | Subject Index | Thread Index