home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 2 / CD ACTUAL VOL 2.iso / docs / kernel.13 / readme.eql < prev    next >
Encoding:
Text File  |  1995-09-10  |  13.3 KB  |  529 lines

  1.   EQL Driver: Serial IP Load Balancing HOWTO
  2.   Simon "Guru Aleph-Null" Janes, simon@ncm.com
  3.   v1.1, Feburary 27, 1995
  4.  
  5.   This is the manual for the EQL device driver. EQL is a software device
  6.   that lets you load-balance IP serial links (SLIP or uncompressed PPP)
  7.   to increase your bandwidth. It will not reduce your latency (i.e. ping
  8.   times) except in the case where you already have lots of traffic on
  9.   your link, in which it will help them out. This driver has been tested
  10.   with the 1.1.75 kernel, and is known to have patched cleanly with
  11.   1.1.86.  Some testing with 1.1.92 has been done with the v1.1 patch
  12.   which was only created to patch cleanly in the very latest kernel
  13.   source trees. (Yes, it worked fine.)
  14.  
  15.   1.  Introduction
  16.  
  17.   Which is worse? A huge fee for a 56K leased line or two phone lines?
  18.   Its probably the former.  If you find yourself craving more bandwidth,
  19.   and have a ISP that is flexible, it is now possible to bind modems
  20.   together to work as one point-to-point link to increase your
  21.   bandwidth.  All without having to have a special black box on either
  22.   side.
  23.  
  24.  
  25.   The eql driver has only been tested with the Livingston PortMaster-2e
  26.   terminal server. I do not know if other terminal servers support load-
  27.   balancing, but I do know that the PortMaster does it, and does it
  28.   almost as well as the eql driver seems to do it (-- Unfortunately, in
  29.   my testing so far, the Livingston PortMaster 2e's load-balancing is a
  30.   good 1 to 2 KB/s slower than the test machine working with a 28.8 Kbps
  31.   and 14.4 Kbps connection.  However, I am not sure that it really is
  32.   the PortMaster, or if its Linux's TCP drivers. I'm told that Linux's
  33.   TCP implementation is pretty fast though.--)
  34.  
  35.  
  36.   I suggest to ISP's out there that it would probably be fair to charge
  37.   a load-balancing client 75% of the cost of the second line and 50% of
  38.   the cost of the third line etc...
  39.  
  40.  
  41.   Hey, we can all dream you know...
  42.  
  43.  
  44.   2.  Kernel Configuration
  45.  
  46.   Here I describe the general steps of getting a kernel up and working
  47.   with the eql driver.    From patching, building, to installing.
  48.  
  49.  
  50.   2.1.    Patching The Kernel
  51.  
  52.   If you do not have or cannot get a copy of the kernel with the eql
  53.   driver folded into it, get your copy of the driver from
  54.   ftp://slaughter.ncm.com/pub/Linux/LOAD_BALANCING/eql-1.1.tar.gz.
  55.   Unpack this archive someplace obvious like /usr/local/src/.  It will
  56.   create the following files:
  57.  
  58.  
  59.  
  60.        ______________________________________________________________________
  61.        -rw-r--r-- guru/ncm    198 Jan 19 18:53 1995 eql-1.1/NO-WARRANTY
  62.        -rw-r--r-- guru/ncm    30620 Feb 27 21:40 1995 eql-1.1/eql-1.1.patch
  63.        -rwxr-xr-x guru/ncm    16111 Jan 12 22:29 1995 eql-1.1/eql_enslave
  64.        -rw-r--r-- guru/ncm    2195 Jan 10 21:48 1995 eql-1.1/eql_enslave.c
  65.        ______________________________________________________________________
  66.  
  67.   Unpack a recent kernel (something after 1.1.92) Someplace convenient
  68.   like say /usr/src/linux-1.1.92.eql. Use symbolic links to point
  69.   /usr/src/linux to this development directory.
  70.  
  71.  
  72.   Apply the patch by running the commands:
  73.  
  74.  
  75.        ______________________________________________________________________
  76.        cd /usr/src
  77.        patch </usr/local/src/eql-1.1/eql-1.1.patch
  78.        ______________________________________________________________________
  79.  
  80.  
  81.  
  82.  
  83.  
  84.   2.2.    Building The Kernel
  85.  
  86.   After patching the kernel, run make config and configure the kernel
  87.   for your hardware.
  88.  
  89.  
  90.   After configuration, make and install according to your habit.
  91.  
  92.  
  93.   3.  Network Configuration
  94.  
  95.   So far, I have only used the eql device with the DSLIP SLIP connection
  96.   manager by Matt Dillon (-- "The man who sold his soul to code so much
  97.   so quickly."--) .  How you configure it for other "connection"
  98.   managers is up to you.  Most other connection managers that I've seen
  99.   don't do a very good job when it comes to handling more than one
  100.   connection.
  101.  
  102.  
  103.   3.1.    /etc/rc.d/rc.inet1
  104.  
  105.   In rc.inet1, ifconfig the eql device to the IP address you usually use
  106.   for your machine, and the MTU you prefer for your SLIP lines.    One
  107.   could argue that MTU should be roughly half the usuall size for two
  108.   modems, one-third for three, one-fourth for four, etc...  But going
  109.   too far below 296 is probably overkill. Here is an example ifconfig
  110.   command that sets up the eql device:
  111.  
  112.  
  113.  
  114.        ______________________________________________________________________
  115.        ifconfig eql 198.67.33.239 mtu 1006
  116.        ______________________________________________________________________
  117.  
  118.  
  119.  
  120.  
  121.  
  122.   Once the eql device is up and running, add a static default route to
  123.   it in the routing table using the cool new route syntax that makes
  124.   life so much easier:
  125.  
  126.  
  127.  
  128.        ______________________________________________________________________
  129.        route add default eql
  130.        ______________________________________________________________________
  131.  
  132.  
  133.   3.2.    Enslaving Devices By Hand
  134.  
  135.   Enslaving devices by hand requires two utility programs: eql_enslave
  136.   and eql_emancipate (-- eql_emancipate hasn't been written because when
  137.   an enslaved device "dies", it is automatically taken out of the queue.
  138.   I haven't found a good reason to write it yet... other than for
  139.   completeness, but that isn't a good motivator is it?--)
  140.  
  141.  
  142.   The syntax for enslaving a device is "eql_enslave <master-name>
  143.   <slave-name> <estimated-bps>".  Here are some example enslavings:
  144.  
  145.  
  146.  
  147.        ______________________________________________________________________
  148.        eql_enslave eql sl0 28800
  149.        eql_enslave eql ppp0 14400
  150.        eql_enslave eql sl1 57600
  151.        ______________________________________________________________________
  152.  
  153.  
  154.  
  155.  
  156.  
  157.   When you want to free a device from its life of slavery, you can
  158.   either down the device with ifconfig (eql will automatically bury the
  159.   dead slave and remove it from its queue) or use eql_emancipate to free
  160.   it. (-- Or just ifconfig it down, and the eql driver will take it out
  161.   for you.--)
  162.  
  163.  
  164.  
  165.        ______________________________________________________________________
  166.        eql_emancipate eql sl0
  167.        eql_emancipate eql ppp0
  168.        eql_emancipate eql sl1
  169.        ______________________________________________________________________
  170.  
  171.  
  172.  
  173.  
  174.  
  175.   3.3.    DSLIP Configuration for the eql Device
  176.  
  177.   The general idea is to bring up and keep up as many SLIP connections
  178.   as you need, automatically.
  179.  
  180.  
  181.   3.3.1.  /etc/slip/runslip.conf
  182.  
  183.   Here is an example runslip.conf:
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.   ______________________________________________________________________
  200.   name        sl-line-1
  201.   enabled
  202.   baud        38400
  203.   mtu        576
  204.   ducmd        -e /etc/slip/dialout/cua2-288.xp -t 9
  205.   command     eql_enslave eql $interface 28800
  206.   address     198.67.33.239
  207.   line        /dev/cua2
  208.  
  209.   name        sl-line-2
  210.   enabled
  211.   baud        38400
  212.   mtu        576
  213.   ducmd        -e /etc/slip/dialout/cua3-288.xp -t 9
  214.   command     eql_enslave eql $interface 28800
  215.   address     198.67.33.239
  216.   line        /dev/cua3
  217.   ______________________________________________________________________
  218.  
  219.  
  220.  
  221.  
  222.  
  223.   3.4.    Using PPP and the eql Device
  224.  
  225.   I have not yet done any load-balancing testing for PPP devices, mainly
  226.   because I don't have a PPP-connection manager like SLIP has with
  227.   DSLIP. I did find a good tip from LinuxNET:Billy for PPP performance:
  228.   make sure you have asyncmap set to something so that control
  229.   characters are not escaped.
  230.  
  231.  
  232.   I tried to fix up a PPP script/system for redialing lost PPP
  233.   connections for use with the eql driver the weekend of Feb 25-26 '95
  234.   (Hereafter known as the 8-hour PPP Hate Festival).  Perhaps later this
  235.   year.
  236.  
  237.  
  238.   4.  About the Slave Scheduler Algorithm
  239.  
  240.   The slave scheduler probably could be replaced with a dozen other
  241.   things and push traffic much faster.    The formula in the current set
  242.   up of the driver was tuned to handle slaves with wildly different
  243.   bits-per-second "priorities".
  244.  
  245.  
  246.   All testing I have done was with two 28.8 V.FC modems, one connecting
  247.   at 28800 bps or slower, and the other connecting at 14400 bps all the
  248.   time.
  249.  
  250.  
  251.   One version of the scheduler was able to push 5.3 K/s through the
  252.   28800 and 14400 connections, but when the priorities on the links were
  253.   very wide apart (57600 vs. 14400) The "faster" modem received all
  254.   traffic and the "slower" modem starved.
  255.  
  256.  
  257.   5.  Tester's Reports
  258.  
  259.   Some people have experimented with the eql device with newer kernels
  260.   kernels (than 1.1.75).  I have since updated the driver to patch
  261.   cleanly in newer kernels because of the removal of the old "slave-
  262.   balancing" driver config option.
  263.  
  264.  
  265.   o  icee from LinuxNET patched 1.1.86 without any rejects and was able
  266.      to boot the kernel and enslave a couple of ISDN PPP links.
  267.  
  268.   5.1.    Randoph Bentson's Test Report
  269.  
  270.  
  271.  
  272.  
  273.  
  274.  
  275.  
  276.  
  277.  
  278.  
  279.  
  280.  
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.   From bentson@grieg.seaslug.org Wed Feb  8 19:08:09 1995
  332.   Date: Tue, 7 Feb 95 22:57 PST
  333.   From: Randolph Bentson <bentson@grieg.seaslug.org>
  334.   To: guru@ncm.com
  335.   Subject: EQL driver tests
  336.  
  337.  
  338.   I have been checking out your eql driver.  (Nice work, that!)
  339.   Although you may already done this performance testing, here
  340.   are some data I've discovered.
  341.  
  342.   Randolph Bentson
  343.   bentson@grieg.seaslug.org
  344.  
  345.   ---------------------------------------------------------
  346.  
  347.  
  348.   A pseudo-device driver, EQL, written by Simon Janes, can be used
  349.   to bundle multiple SLIP connections into what appears to be a
  350.   single connection.  This allows one to improve dial-up network
  351.   connectivity gradually, without having to buy expensive DSU/CSU
  352.   hardware and services.
  353.  
  354.   I have done some testing of this software, with two goals in
  355.   mind: first, to ensure it actually works as described and
  356.   second, as a method of exercising my device driver.
  357.  
  358.   The following performance measurements were derived from a set
  359.   of SLIP connections run between two Linux systems (1.1.84) using
  360.   a 486DX2/66 with a Cyclom-8Ys and a 486SLC/40 with a Cyclom-16Y.
  361.   (Ports 0,1,2,3 were used.  A later configuration will distribute
  362.   port selection across the different Cirrus chips on the boards.)
  363.   Once a link was established, I timed a binary ftp transfer of
  364.   289284 bytes of data.    If there were no overhead (packet headers,
  365.   inter-character and inter-packet delays, etc.) the transfers
  366.   would take the following times:
  367.  
  368.       bits/sec    seconds
  369.       345600    8.3
  370.       234600    12.3
  371.       172800    16.7
  372.       153600    18.8
  373.       76800    37.6
  374.       57600    50.2
  375.       38400    75.3
  376.       28800    100.4
  377.       19200    150.6
  378.       9600    301.3
  379.  
  380.   A single line running at the lower speeds and with large packets
  381.   comes to within 2% of this.  Performance is limited for the higher
  382.   speeds (as predicted by the Cirrus databook) to an aggregate of
  383.   about 160 kbits/sec.    The next round of testing will distribute
  384.   the load across two or more Cirrus chips.
  385.  
  386.   The good news is that one gets nearly the full advantage of the
  387.   second, third, and fourth line's bandwidth.  (The bad news is
  388.   that the connection establishment seemed fragile for the higher
  389.   speeds.  Once established, the connection seemed robust enough.)
  390.  
  391.   #lines  speed    mtu  seconds    theory  actual  %of
  392.      kbit/sec      duration    speed    speed    max
  393.   3    115200  900    _    345600
  394.   3    115200  400    18.1    345600  159825  46
  395.   2    115200  900    _    230400
  396.   2    115200  600    18.1    230400  159825  69
  397.   2    115200  400    19.3    230400  149888  65
  398.   4    57600    900    _    234600
  399.   4    57600    600    _    234600
  400.   4    57600    400    _    234600
  401.   3    57600    600    20.9    172800  138413  80
  402.   3    57600    900    21.2    172800  136455  78
  403.   3    115200  600    21.7    345600  133311  38
  404.   3    57600    400    22.5    172800  128571  74
  405.   4    38400    900    25.2    153600  114795  74
  406.   4    38400    600    26.4    153600  109577  71
  407.   4    38400    400    27.3    153600  105965  68
  408.   2    57600    900    29.1    115200  99410.3 86
  409.   1    115200  900    30.7    115200  94229.3 81
  410.   2    57600    600    30.2    115200  95789.4 83
  411.   3    38400    900    30.3    115200  95473.3 82
  412.   3    38400    600    31.2    115200  92719.2 80
  413.   1    115200  600    31.3    115200  92423    80
  414.   2    57600    400    32.3    115200  89561.6 77
  415.   1    115200  400    32.8    115200  88196.3 76
  416.   3    38400    400    33.5    115200  86353.4 74
  417.   2    38400    900    43.7    76800    66197.7 86
  418.   2    38400    600    44    76800    65746.4 85
  419.   2    38400    400    47.2    76800    61289    79
  420.   4    19200    900    50.8    76800    56945.7 74
  421.   4    19200    400    53.2    76800    54376.7 70
  422.   4    19200    600    53.7    76800    53870.4 70
  423.   1    57600    900    54.6    57600    52982.4 91
  424.   1    57600    600    56.2    57600    51474    89
  425.   3    19200    900    60.5    57600    47815.5 83
  426.   1    57600    400    60.2    57600    48053.8 83
  427.   3    19200    600    62    57600    46658.7 81
  428.   3    19200    400    64.7    57600    44711.6 77
  429.   1    38400    900    79.4    38400    36433.8 94
  430.   1    38400    600    82.4    38400    35107.3 91
  431.   2    19200    900    84.4    38400    34275.4 89
  432.   1    38400    400    86.8    38400    33327.6 86
  433.   2    19200    600    87.6    38400    33023.3 85
  434.   2    19200    400    91.2    38400    31719.7 82
  435.   4    9600    900    94.7    38400    30547.4 79
  436.   4    9600    400    106    38400    27290.9 71
  437.   4    9600    600    110    38400    26298.5 68
  438.   3    9600    900    118    28800    24515.6 85
  439.   3    9600    600    120    28800    24107    83
  440.   3    9600    400    131    28800    22082.7 76
  441.   1    19200    900    155    19200    18663.5 97
  442.   1    19200    600    161    19200    17968    93
  443.   1    19200    400    170    19200    17016.7 88
  444.   2    9600    600    176    19200    16436.6 85
  445.   2    9600    900    180    19200    16071.3 83
  446.   2    9600    400    181    19200    15982.5 83
  447.   1    9600    900    305    9600    9484.72 98
  448.   1    9600    600    314    9600    9212.87 95
  449.   1    9600    400    332    9600    8713.37 90
  450.  
  451.  
  452.  
  453.  
  454.  
  455.   5.2.    Anthony Healy's Report
  456.  
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.   Date: Mon, 13 Feb 1995 16:17:29 +1100 (EST)
  464.   From: Antony Healey <ahealey@st.nepean.uws.edu.au>
  465.   To: Simon Janes <guru@ncm.com>
  466.   Subject: Re: Load Balancing
  467.  
  468.   Hi Simon,
  469.       I've installed your patch and it works great. I have trialed
  470.       it over twin SL/IP lines, just over null modems, but I was
  471.       able to data at over 48Kb/s [ISDN link -Simon]. I managed a
  472.       transfer of upto 7.5 Kbyte/s on one go, but averaged around
  473.       6.4 Kbyte/s, which I think is pretty cool.  :)
  474.  
  475.  
  476.  
  477.  
  478.  
  479.  
  480.  
  481.  
  482.  
  483.  
  484.  
  485.  
  486.  
  487.  
  488.  
  489.  
  490.  
  491.  
  492.  
  493.  
  494.  
  495.  
  496.  
  497.  
  498.  
  499.  
  500.  
  501.  
  502.  
  503.  
  504.  
  505.  
  506.  
  507.  
  508.  
  509.  
  510.  
  511.  
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.