[ANNOUNCE] Keepalived 1.1.0

Alexandre Cassen <[email protected]> Tue, 22 Jul 2003 00:43:11 +0200
Newsgroups gmane.linux.keepalived.announce
Message-ID <5.2.1.1.2.20030722002910.00cb1080__9865.93839847974$1058827893@mail>
Hi all,

After a big hacking time, new Keepalived release is now finally available 
on Keepalived website. This release is focused on High performances 
extensions. Lot of work has been done to optimize and reduce to the max 
both scheduling jitter and CPU. The code has been profiled and tested on a 
big env. The main benefit with this new release is the extended scheduling 
design that now support o(1) class lookup speed using a customized hash 
index. All other lookup has been extended to support same kind of o(1) 
complexity. Lot of others addon has been added that push this new release 
to high perf and optimized grad (I hope !). This code has been tested with 
succes with a conf running over 500 VRRP instances on 500vlaned interfaces. 
Due to a scheduling auto-recalibration design and with the o(1) lookup 
speed, the scheduling jitter observed for this code is quite inexistant :) 
Others things has been extended and optimized (cf changelog).

The ChangeLog for this release is :

2003-07-22  Alexandre Cassen  <[email protected]>
         * keepalived-1.1.0 released.
         * The release focus is : "High Performance"
         * Name cleanup for the healthchecking directory. use check
           instead of healthcheck to be in conformance with watchdog and
           global software architecture.
         * updated the SYNOPSIS file for documenting the table arg inside
           virtual/static_routes declaration. You can set routes refering
           to a specific TABLE-ID.
         * Added a dummy debug var in the genhash declaration code to
           support compilation when compilation is done with debug flag.
         * Added a set flag inside the real_server declaration correctly
           relfect the IPVS topology when inhibit_on_failure is used.
         * fixed a daemon.h include depandency on signal.h
         * VRRP : Added support to a global shared buffer for incoming
           advert handling. A new buffer is no longer allocated each time
           processing incoming advert, instead a shared room is used.
         * VRRP : Added support to pre-allocated shared buffer for
           outgoing adverts. Each vrrp instance use a 'one time'
           allocated buffer instead of a 'all time' one.
         * VRRP : Extended the socket pool design to support shared fd
           for the outbound channel. Now, socket pool create a sending
           socket and affect the fd returned to vrrp instances. This
           forces instances to use a shared socket instead of creating
           new socket for each outgoing adverts. The error detection
           is based on the incoming socket, so that outgoing socket is
           not created as long as incoming socket can not be created.
         * Added support to netlink ipaddress as global keyword
           "static_ipaddress".
           look at doc/samples/keepalived.conf.static_ipaddress.
           IP addresses specified into this block will be added during
           daemon bootstrap and removed during daemon shutdown.
           Differential conf parsing is enabled for this block,
           removing/adding static_ipaddress can be done on the fly
           sending SIGHUP signal to daemon.
         * VRRP : Extended track_interface to support multiple interface
           tracking. For those familiar with Nokia monitored circuit,
           this extention provide the same functionality.
           look at doc/samples/keepalived.conf.track_interface.
         * VRRP : The VRRP instance lookup framework has been extended
           to use a o(1) scheduling design. Rewrote the whole instance
           lookup to use o(1) lookup instead of previous o(n^2). When
           receiving incoming adverts vrrp_scheduler performs a lookup
           over the VRID received to get local instance representation.
           Since the internal instance representation is an non-sorted
           linked list, then we run a lookup at o(n^2) complexity that
           introduce lantency and scheduling jitter side effect when
           runing large number of instances. To avoid this limitation
           a static hash table of 255 buckets were created. Since
           lookup is performed over VRID and since VRID is 8bit fixed,
           then the hashkey will be VRID. In order to extend code the
           hashkey is based on incoming fd too. Internally, a NIC is
           represented by a 2 fds : sending socket and receiving socket.
           Those fds are NIC specific so we are using them as a hash
           table lookup collision resolver. With this design we can now
           use the same VRID on different NICs. The collision design
           is a linked list so lookup is o(n^2) but due to low number
           of entries we can consider o(1) speed. But to reach best
           perf, differents VRID on all instance must be used. The
           design can be sumed by :

           VRID hash table :

              +---+---+---+---+---+---+.........+-----+
              | 1 | 2 | 3 | 4 | 5 | 6 |.........| 255 |
              +---+---+---+---+---+---+.........+-----+
                    |       |
                  +---+   +---+
                  |fd3|   |fd1|
                  +---+   +---+
                            |
                          +---+
                          |fd5|
                          +---+

           This hash table is filled during configuration parsing and
           VRRP instances are not duplicated but dynamically pointed
           to optimize memory.
         * VRRP : The VRRP synchronization group lookup has been
           extended. During bootstrap a VRRP instance index is built upon
           sync_group instance name. This extension speed up
           synchronization since while synchronizing it perfoms the
           instance index instead of lookup by instance_name. The
           previous synchornization code has been rewritten to use this
           'list visiting' design for FAULT/BACKUP/MASTER states
           synchronization.
         * VRRP : Optimized the vrrp_timer_vrid_timeout(...) to speed
           up vrid lookup over timeouted fd using a one pass lookup.
         * Bradley Baetz, <[email protected]> extended
           the scheduler framework to support child process handling.
           Adding support to new thread child facility for handling
           child processes, and modifying the scheduling select
           loop & signal handling to catch SIGCHLD, and call the
           appropriate process.
         * Bradley Baetz, <[email protected]> fixed
           the misc_check healthchecker using new thread child
           scheduling facility. Introduced a new keyword
           "misc_timeout" to kill processes which take too long
           time (default is delay_loop). SIGKILL is send to processes
           if they take too long time to shutdown.
         * Bradley Baetz, <[email protected]> extended
           daemon framework to block SIGCHLD to only receive it
           whn its unblocked in the scheduling loop.
         * Extended healthchecker delay_loop to support long
           delay (ie: >1000s).
         * VRRP : Added support to a shared kernel netlink command
           channel for setting ip address and routes.
         * Extended the genhash code to support verbose output
           selection. command arg '-v' will generate a very verbose
           output.
         * VRRP : Extended the logging code to select verbose log
           output or not. This selection is done by passing the
           '-D' option to command line while starting daemon.
           By default the output is silent.
         * VRRP : Extended the gratuitous ARP framework to support
           shared buffer and shared socket. This increase performances
           for instances owning a bunch of VIP.
         * VRRP : Extended the scheduling timer computation to support
           timer auto-recalibrating. While computing next instance
           timer, the scheduler will substract the time taken by
           previous advert handling. This provide software overhead
           adaptation. The recalibration is performed over usec timer
           to not pertube global scheduler.
         * VRRP : Fixed a gratuitous ARP issue. Extended the
           ipaddress framework to point directly to interface
           reflected by netlink channel instead of storing device
           index. Extended the gratuitous ARP code to use new
           ipaddress structure and for sending garp over device
           ipaddess belong to. Needed if you run an instance on
           one device interface and set VRRP VIP on different
           interface.
         * Extended watchdog framework to support polling delay
           selection via daemon command line. Created two new
           cmdline options :
                --wdog-vrrp  -R  Define VRRP watchdog polling
                                 delay. (default=5s)
                --wdog-check -H  Define checkers watchdog
                                 polling delay. (default=5s)
         * Extended SMTP code to support bigger buffer while
           processing remote mta messages.
         * Erik Barker, <[email protected]> extended initscript
           to support native redhat init functions.
         * Extended the autoconf scripts and Makefile(s) to support
           code profiling. New configure option : --enable-profile
         * list library has been extended to support multi-sized list &
           specific element deletion. Extended to return when list is
           empty. This reduce duplicated code to test is list is empty
           while processing.
         * VRRP : Extended VRRP scheduler to support fd hash
           table design. Speed up instance lookup while
           computing instance sands. This offer o(1) design
           if we consider limited number of instances per
           device.
         * VRRP : Extended vrrp new socket creation to replace
           refreshed instance fd into fd hash table index.
         * VRRP : Extended vrrp framework to support
           blank virtual_ipaddress block, can be usefull
           if someone want to use just the VRRP advert
           as hello monitoring channel.
         * Some code cleaning.

Any comments are welcome,

Best regards,
Alexandre




-------------------------------------------------------
This SF.net email is sponsored by: VM Ware
With VMware you can run multiple operating systems on a single machine.
WITHOUT REBOOTING! Mix Linux / Windows / Novell virtual machines at the
same time. Free trial click here: http://www.vmware.com/wl/offer/345/0