blob: 0f1550150f052c4b447719f9726613f0d14a8cdd [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001 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