1  EQL Driver: Serial IP Load Balancing HOWTO
2  Simon "Guru Aleph-Null" Janes, simon@ncm.com
3  v1.1, February 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  It's 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 it's Linux's TCP drivers. I'm told that Linux's
33  TCP implementation is pretty fast though.--)
34
35
36  I suggest to ISPs 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 usual 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.  Testers' Reports
258
259  Some people have experimented with the eql device with newer
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.	Randolph 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 up to 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