[zeromq-dev] To trie or not to trie :)

Dhammika Pathirana dhammika at gmail.com
Wed May 19 08:08:49 CEST 2010


Hi Martin,

Linux and few other packet filters use LC-trie for address lookup,
http://www.csc.kth.se/~snilsson/public/papers/router2/text.pdf
http://www.csc.kth.se/~snilsson/public/papers/trash/trash.pdf



On 5/18/10, Martin Sustrik <sustrik at 250bpm.com> wrote:
> Hi Bhavin,
>
>  I'm reading through the documents...
>
>  One idea I find compelling is using bitmaps and dense pointer arrays at
>  a node rather than min/max values and sparse pointer arrays, i.e.
>
>  struct node_t
>  {
>      unsigned char bitmap [32]; // All 256 possible next bytes,
>                                 // each represented as a single bit.
>      node_t **nodes; // There are no NULL pointers in the array.
>  }
>
>  rather than:
>
>  struct node_t
>  {
>      unsigned char min;
>      unsigned char max;
>      node_t **nodes; //  There may be NULL pointers in the array.
>  }
>
>  The rationale goes like this:
>
>  If there's only one subsequent node, the optimisation already in place
>  uses 'nodes' pointer to point directly to that node rather then
>  one-element long array of pointers to nodes.
>
>  Thus, at each non-trivial node we have at least 2 subsequent nodes. If
>  these are close each to another (say 'a' and 'b') the array has only 2
>  elements and no NULL pointers. However, if the nodes are more far apart,
>  say 'a' and 'm', the array is rather long (13 elements) and contains a
>  lot of (11) NULL pointers.
>
>  If bitmap solution is used instead we loose some memory (30 bytes) by
>  using bitmap (32 bytes) instead of min/max (2 bytes), however, in case
>  such as 'a' and 'm' we gain some memory (88 bytes on 64-bit CPU) by not
>  storing NULL pointers.
>
>  The sweet spot seems to be at subsequent nodes being in average more
>  than 5 positions apart (such as 'a' and 'f') on 64-bit CPU or 9
>  positions apart (such as 'a' and 'k') on 32-bit CPU.
>
>  That seems reasonable...
>
>  Thoughts?
>  Martin
>
>  Bhavin Turakhia wrote:
>  > Hi
>
> >
>  >
>  >
>  > Since my discussion thread with Martin on the efficiency of in-memory
>  > data structures of ZeroMQ, I have been reading up a bit about other data
>  > structures from the perspective of memory utilization. Here is a
>  > compendium of a few other data structures that are considerably more
>  > efficient than a trie –
>  >
>  >
>  >
>  > http://bhavin.directi.com/to-trie-or-not-to-trie-a-comparison-of-efficient-data-structures/
>  >
>  >
>  >
>
> > 0MQ may want to trie ;) some benchmarks with these
>  >
>  > Warm Regards
>  > Bhavin Turakhia
>  > Founder & CEO
>  > Directi
>  > *********************
>
> > Always hiring @ http://careers.directi.com <http://careers.directi.com/>
>  > -----------------------
>  > http://twitter.com/bhavintu
>  > Blog: http://bhavin.directi.com <http://bhavin.directi.com/>
>  > Wiki: http://wiki.directi.com <blocked::http://wiki.directi.com/>
>  > Web: http://www.directi.com <http://www.directi.com/>
>
> > T: +91-22-30797600
>  > M (US): +1 (415) 366 7762
>  > M (IN): +91 9820097557
>  > F: +91-22-30797510
>  > *********************
>  >
>  >
>  >
>  >
>
> > ------------------------------------------------------------------------
>
> >
>  > _______________________________________________
>  > zeromq-dev mailing list
>  > zeromq-dev at lists.zeromq.org
>  > http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>
>  _______________________________________________
>  zeromq-dev mailing list
>  zeromq-dev at lists.zeromq.org
>  http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>



More information about the zeromq-dev mailing list