Ethereal-dev: Re: [Ethereal-dev] Performance. Ethereal is slow when usinglargecaptures.

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

From: Richard Sharpe <rsharpe@xxxxxxxxxxxxxxxxx>
Date: Sat, 15 Nov 2003 19:57:14 -0800 (PST)
On Sun, 16 Nov 2003, Ronnie Sahlberg wrote:

> 
> ----- Original Message ----- 
> From: "Biot Olivier"
> Sent: Sunday, November 16, 2003 12:50 PM
> Subject: RE: [Ethereal-dev] Performance. Ethereal is slow when
> usinglargecaptures.
> 
> 
> > A second performance increase proposal I had in mind is to use hash lookup
> > instead of sequential lookup for large value_string tables. Part of this
> can
> > be done with #define's (where either the existing linear lookup or the the
> > yet-to-define hash lookup can be chosen), and the remaining part can be
> > produced with scripts (similar to makeregdotc). But if we're eliminating
> the
> > number of (re)dissection passes this may not be relevant anymore...
> 
> Excellent suggestion.

Can I suggest that we only change those things that gprof indicates are a 
problem?

> Both SMB and DCE have value strings for the response code that are huge.
> Both of these protocols are very common.
> But there are also a lot of (the majority) value_strings that only contain a
> small number of entries.
> 
> We could do something like
> 
> create :
> struct val_string {
>    int num_items;    /*initially set to 0 */
>    bin_tree *tree;  /* binary tree holding  value and string values */
>    value_string      /* the original value string tree */
> }
> 
> Then we could create alternate functions to access the val_string that are
> functionally equivalent to the ones accessing value_string.
> Lots of work but will probably be worth it.
> 
> Each time val_to_string() is called we also do :
>    if(val_string->num_items==0){   /* we have not converted this one yet */
>      val_string->num_items=count_num_items_in(val_string->value_string);
>      if(val_string->num_items>8){   /* only create the tree if it holds >8
> (arbitrary value) items, if less items its probably not worth it */
> 
> val_string->tree=create_a_binary_tree_of_all_value_string_values(val_string-
> >value_string);  /* make sure the tree is perfectly balanced */
>      }
>   }
>   if(val_string->tree){  /* do we have a quick access tree or not ? */
>     look_it_up_in_the_tree();
>   } else {
>     do_the_normal_lookup_walking_value_string_sequentially();
>   }
> 
> 
> We do our own binary tree handler.   We dont have to worry about
> inserting/removing values or deleting the tree since it will never change.
> We only implement an optimized function to build a tree given a value_string
> and to look up a value in the tree.
> 
> 
> Then we just convert all the value_string declarations one by one into
> val_string declarations.
> 
> _______________________________________________
> Ethereal-dev mailing list
> Ethereal-dev@xxxxxxxxxxxx
> http://www.ethereal.com/mailman/listinfo/ethereal-dev
> 

-- 
Regards
-----
Richard Sharpe, rsharpe[at]ns.aus.com, rsharpe[at]samba.org, 
sharpe[at]ethereal.com, http://www.richardsharpe.com