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