[Olsr-dev] SPF refactoring
Hannes Gredler
(spam-protected)
Thu Jun 21 14:21:57 CEST 2007
hi olsr developers,
find attached a patch that reworks the SPF implementation of olsrd.
the patch works twofold to get to a decent N*lg(N) runtime performance
of the SPF algorithm and result processing.
1. use of an AVL tree
as a means for efficient sorting.
(the etx metric is used as the key in the candidate tree)
2. next-hop propagation
rather than tracking the previous node in olsr_relax()
i have changed that model and pre-populate all one-hop neighbors
with their own IP adress as 'next-hop' and pull that
pointer up once new paths are explored.
as a result no walker for counting hops and extracting next-hops
is required - it turns out at this is slighly more efficient
than the existing behaviour (even with the cache applied).
--
find below some runtime measurements taken on a 1300Mhz celeron
based on the funkfeuer.at topology with > 350 nodes.
explanation:
init: the time for synthesizing the vertices from the TC messages
and neighbor tables.
run: basic dijkstra runtime
route: host route processing
han: hna route processing.
-->olsrd-current
--- SPF-stats: init 662us, run 302us, route 248us, hna 335us
--- SPF-stats: init 637us, run 303us, route 234us, hna 327us
--- SPF-stats: init 680us, run 302us, route 271us, hna 445us
--- SPF-stats: init 721us, run 303us, route 286us, hna 363us
--- SPF-stats: init 704us, run 302us, route 270us, hna 353us
--- SPF-stats: init 671us, run 304us, route 254us, hna 555us
--- SPF-stats: init 658us, run 303us, route 246us, hna 332us
--- SPF-stats: init 705us, run 304us, route 271us, hna 443us
--- SPF-stats: init 726us, run 305us, route 282us, hna 363us
--- SPF-stats: init 707us, run 304us, route 271us, hna 352us
--- SPF-stats: init 708us, run 304us, route 269us, hna 347us
--- SPF-stats: init 724us, run 304us, route 282us, hna 403us
--- SPF-stats: init 673us, run 304us, route 253us, hna 334us
-->olsrd-spf-refactoring
--- SPF-stats: init 667us, run 168us, route 213us, hna 398us
--- SPF-stats: init 676us, run 170us, route 227us, hna 443us
--- SPF-stats: init 644us, run 170us, route 203us, hna 287us
--- SPF-stats: init 677us, run 180us, route 232us, hna 454us
--- SPF-stats: init 665us, run 169us, route 214us, hna 455us
--- SPF-stats: init 660us, run 169us, route 215us, hna 455us
--- SPF-stats: init 719us, run 169us, route 233us, hna 276us
--- SPF-stats: init 715us, run 168us, route 241us, hna 575us
--- SPF-stats: init 700us, run 168us, route 239us, hna 374us
--- SPF-stats: init 680us, run 168us, route 224us, hna 525us
--- SPF-stats: init 709us, run 168us, route 239us, hna 279us
--- SPF-stats: init 659us, run 169us, route 209us, hna 413us
--- SPF-stats: init 688us, run 181us, route 227us, hna 347us
--- SPF-stats: init 646us, run 170us, route 220us, hna 342us
<-- as you can see there is still some headroom for improvement,
my next target is the route and hna_route processing.
asking for inclusion in the CVS and testing based on large topologies.
tx,
/hannes
P.S.
many thanks to thomas lopatic for extending the avl library
to fit my needs (most notable deletion and thread walking support)
and bernd petrovitch/aaron kaplan for making the funkfeuer.at
topology available for testing.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: spf-refactoring.diff.gz
Type: application/octet-stream
Size: 8770 bytes
Desc: not available
URL: <http://lists.olsr.org/pipermail/olsr-dev/attachments/20070621/044ed9a1/attachment.obj>
More information about the Olsr-dev
mailing list