haproxy public development tree
Go to file
Willy Tarreau 2069704492 [MEDIUM] differentiate between generic LB params and map-specific ones
Since the introduction of server weights, all load balancing algorithms
relied on a pre-computed map. Incidently, quite a bunch of map-specific
parameters were used at random places in order to get the number of
servers or their total weight. It was not architecturally acceptable
that optimizations for the map computation had impact on external parts.
For instance, during this cleanup it was found that a backend weight was
seen as 1 when only the first backup server is used, whatever its weight.

This cleanup consists in differentiating between LB-generic parameters,
such as total weights, number of servers, etc... and map-specific ones.
The struct proxy has been enhanced in order to make it easier to later
support other algorithms. The recount_servers() function now also
updates generic values such as total weights so that it's not needed
anymore to call recalc_server_map() when weights are needed. This
permitted to simplify some code which does not need to know about map
internals anymore.
2007-11-28 14:23:10 +01:00
doc [BUILD] make ebtree headers multiple-include compatible 2007-11-28 14:23:05 +01:00
examples [RELEASE] Released version 1.3.13 with the following main changes : 2007-10-18 22:38:22 +02:00
include [MEDIUM] differentiate between generic LB params and map-specific ones 2007-11-28 14:23:10 +01:00
src [MEDIUM] differentiate between generic LB params and map-specific ones 2007-11-28 14:23:10 +01:00
tests [MEDIUM] make default_backend work in TCP mode too 2007-11-03 14:28:39 +01:00
.gitignore [BUILD] updated .gitignore 2006-12-19 18:03:12 +01:00
CHANGELOG [RELEASE] Released version 1.3.13 with the following main changes : 2007-10-18 22:38:22 +02:00
CONTRIB [DOC] added a CONTRIB file 2007-03-25 22:56:04 +02:00
LICENSE [LICENSE] licensing clarifications 2006-06-15 21:48:13 +02:00
Makefile [MINOR] merge ebtree version 3.0 2007-11-28 14:20:44 +01:00
Makefile.bsd [MINOR] merge ebtree version 3.0 2007-11-28 14:20:44 +01:00
Makefile.osx [MINOR] merge ebtree version 3.0 2007-11-28 14:20:44 +01:00
README Separated OpenBSD build from the main Makefile into a new one. 2006-03-19 20:56:52 +01:00
ROADMAP [MEDIUM] implemented the 'monitor-uri' keyword. 2006-07-09 17:01:40 +02:00
SUBVERS [BUILD] centralize version and date into one file for each 2007-09-09 23:31:11 +02:00
TODO [MINOR] option forwardfor is for frontends too 2007-03-03 20:54:01 +01:00
VERDATE [RELEASE] Released version 1.3.13 with the following main changes : 2007-10-18 22:38:22 +02:00
VERSION [RELEASE] Released version 1.3.13 with the following main changes : 2007-10-18 22:38:22 +02:00

                           -------------------
                             H A - P r o x y
                             How to build it
                           -------------------
                              version 1.2.7
                              willy tarreau
                                2005/10/25


To build haproxy, you will need :
  - GNU make. Neither Solaris nor OpenBSD's make work with this makefile.
  - GCC between 2.91 and 3.4. Others may work, but not tested.
  - GNU ld

Also, you might want to build with libpcre support, which will provide a very
efficient regex implementation and will also fix some badness on Solaris's one.

To build haproxy, you have to choose your target OS amongst the following ones
and assign it to the TARGET variable :

  - linux24  for Linux 2.4 and above (default)
  - linux24e for Linux 2.4 with support for epoll
  - linux26  for Linux 2.6 and above
  - linux22  for Linux 2.2
  - solaris  for Solaris 8 or 10 (others untested)
  - openbsd  for OpenBSD 3.1 to 3.7 (others untested)
  - generic  for any other OS.

You may also choose your CPU to benefit from some optimizations. This is
particularly important on UltraSparc machines. For this, you can assign
one of the following choices to the CPU variable :

  - i686 for intel PentiumPro, Pentium 2 and above, AMD Athlon
  - i586 for intel Pentium, AMD K6, VIA C3.
  - ultrasparc : Sun UltraSparc I/II/III/IV processor
  - generic : any other processor or no specific optimization. (default)

If your system supports PCRE (Perl Compatible Regular Expressions), then you
really should build with libpcre which is between 2 and 10 times faster than
other libc implementations. Regex are used for header processing (deletion,
rewriting, allow, deny). The only inconvenient of libpcre is that it is not
yet widely spread, so if you build for other systems, you might get into
trouble if they don't have the dynamic library. In this situation, you should
statically link libpcre into haproxy so that it will not be necessary to
install it on target systems. Available options for the REGEX variable are :

  - libc to use your OS libc's standard regex implemntation (default).
    Warning! group references on Solaris seem broken. Use static-pcre whenever
    possible.

  - pcre to use libpcre, in whatever form it is available on your system
    (shared or static)

  - static-pcre to use a static version of libpcre even if the dynamic one is
    available. This will enhance portability.

By default, the DEBUG variable is set to '-g' to enable debug symbols. It is
not wise to disable it on uncommon systems, because it's often the only way to
get a complete core when you need one. Otherwise, you can set DEBUG to '-s' to
strip the binary.

For example, I use this to build for Solaris 8 :

    $ make TARGET=solaris CPU=ultrasparc REGEX=static-pcre

And I build it this way on OpenBSD :

    $ make -f Makefile.bsd REGEX=pcre DEBUG= COPTS.generic="-Os -fomit-frame-pointer -mgnu"

If you need to pass other defines, includes, libraries, etc... then please
check the Makefile to see which ones will be available in your case, and
use the ADDINC, ADDLIB, and DEFINE variables for this.

-- end