EQL 驱动程序:串行 IP 负载均衡 HOWTO¶
Simon “Guru Aleph-Null” Janes, simon@ncm.com
v1.1, 1995 年 2 月 27 日
这是 EQL 设备驱动程序的手册。EQL 是一种软件设备,可让您对 IP 串行链路(SLIP 或未压缩的 PPP)进行负载均衡,以提高您的带宽。除了在您的链路上已经有很多流量的情况下,它可以帮助它们之外,它不会降低您的延迟(即 ping 时间)。这个驱动程序已经使用 1.1.75 内核进行了测试,并且已知可以与 1.1.86 干净地打补丁。在 1.1.92 上进行了一些使用 v1.1 补丁的测试,该补丁仅是为了在最新的内核源代码树中干净地打补丁而创建的。(是的,它工作正常。)
1. 简介¶
哪个更糟糕?一条 56K 租用线路的巨额费用还是两条电话线?很可能是前者。如果您发现自己渴望更高的带宽,并且有一个灵活的 ISP,现在可以将调制解调器绑定在一起以作为一个点对点链路工作,从而提高您的带宽。所有这些都不需要在任何一侧都有特殊的黑盒子。
eql 驱动程序仅使用 Livingston PortMaster-2e 终端服务器进行了测试。我不知道其他终端服务器是否支持负载均衡,但我知道 PortMaster 可以做到,并且几乎和 eql 驱动程序所做的一样好(--不幸的是,在我目前的测试中,Livingston PortMaster 2e 的负载均衡比使用 28.8 Kbps 和 14.4 Kbps 连接的测试机器慢了 1 到 2 KB/s。但是,我不确定它是否真的是 PortMaster,还是 Linux 的 TCP 驱动程序。我被告知 Linux 的 TCP 实现速度非常快。--)
我建议 ISP 可能应该向负载均衡客户端收取第二条线路费用的 75% 和第三条线路费用的 50% 等等...
嘿,我们都可以做梦,你知道的...
2. 内核配置¶
在这里,我描述了使用 eql 驱动程序启动并运行内核的一般步骤。从打补丁、构建到安装。
2.1. 打补丁内核¶
如果您没有或无法获得包含 eql 驱动程序的内核副本,请从 ftp://slaughter.ncm.com/pub/Linux/LOAD_BALANCING/eql-1.1.tar.gz 获取驱动程序的副本。将此存档解压缩到诸如 /usr/local/src/ 之类的显眼位置。它将创建以下文件
-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将最近的内核(1.1.92 之后的版本)解压缩到诸如 /usr/src/linux-1.1.92.eql 之类的方便位置。使用符号链接将 /usr/src/linux 指向此开发目录。
通过运行以下命令应用补丁
cd /usr/src patch </usr/local/src/eql-1.1/eql-1.1.patch
2.2. 构建内核¶
在打完内核补丁后,运行 make config 并为您的硬件配置内核。
配置完成后,按照您的习惯进行 make 和安装。
3. 网络配置¶
到目前为止,我只将 eql 设备与 Matt Dillon 的 DSLIP SLIP 连接管理器一起使用(--“如此快速地将自己的灵魂出卖给代码的人。”--)。您如何为其他“连接”管理器配置它取决于您。我看到的大多数其他连接管理器在处理多个连接时都做得不是很好。
3.1. /etc/rc.d/rc.inet1¶
在 rc.inet1 中,将 eql 设备 ifconfig 到您通常用于机器的 IP 地址,以及您为 SLIP 线路首选的 MTU。有人可能会认为,对于两个调制解调器来说,MTU 应该大约是通常大小的一半,对于三个调制解调器来说是三分之一,对于四个调制解调器来说是四分之一,等等...但是如果低于 296 太多,可能就有点过头了。这是一个 ifconfig 命令示例,用于设置 eql 设备
ifconfig eql 198.67.33.239 mtu 1006一旦 eql 设备启动并运行,请使用使生活更轻松的酷炫的新路由语法,在路由表中向其添加静态默认路由
route add default eql
3.2. 手动绑定设备¶
手动绑定设备需要两个实用程序:eql_enslave 和 eql_emancipate(--eql_emancipate 尚未编写,因为当被绑定的设备“死机”时,它会自动从队列中取出。我还没找到编写它的好理由...除了为了完整性之外,但这并不是一个好的动机,是吗?--)
绑定设备的语法是 “eql_enslave <主设备名称> <从设备名称> <估计的 bps>”。以下是一些绑定示例
eql_enslave eql sl0 28800 eql_enslave eql ppp0 14400 eql_enslave eql sl1 57600当您想将设备从奴役的生活中解放出来时,您可以使用 ifconfig 禁用该设备(eql 将自动埋葬死去的从设备并将其从队列中删除),或者使用 eql_emancipate 释放它。(--或者直接使用 ifconfig 禁用它,eql 驱动程序将为您取出它。--)
eql_emancipate eql sl0 eql_emancipate eql ppp0 eql_emancipate eql sl1
3.3. 为 eql 设备配置 DSLIP¶
一般的想法是自动启动并保持尽可能多的 SLIP 连接。
3.3.1. /etc/slip/runslip.conf¶
这是一个 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. 使用 PPP 和 eql 设备¶
我还没有对 PPP 设备进行任何负载均衡测试,主要是因为我没有像 SLIP 的 DSLIP 那样的 PPP 连接管理器。我从 LinuxNET:Billy 那里找到了一个关于 PPP 性能的好技巧:确保将 asyncmap 设置为某个值,以便不转义控制字符。
我试图修复一个 PPP 脚本/系统,以便在 2 月 25-26 日的那个周末(以下称为 8 小时 PPP 仇恨节)用于 eql 驱动程序重新拨号丢失的 PPP 连接。也许今年晚些时候。
4. 关于从设备调度算法¶
从设备调度程序可以用十几种其他东西代替,并可以更快地推送流量。驱动程序当前设置中的公式经过调整,可以处理具有差异很大的每秒比特“优先级”的从设备。
我所做的所有测试都是使用两个 28.8 V.FC 调制解调器,一个以 28800 bps 或更低的速度连接,另一个始终以 14400 bps 的速度连接。
一个版本的调度程序能够通过 28800 和 14400 连接推送 5.3 K/s,但是当链路上的优先级相差很大时(57600 对 14400),“更快”的调制解调器接收所有流量,“更慢”的调制解调器会饿死。
5. 测试人员的报告¶
有些人已经使用较新的内核(比 1.1.75 更新)试验了 eql 设备。由于删除了旧的“从设备均衡”驱动程序配置选项,我已更新驱动程序以在较新的内核中干净地打补丁。
来自 LinuxNET 的 icee 在没有任何拒绝的情况下修补了 1.1.86,并且能够启动内核并绑定几个 ISDN PPP 链接。
5.1. Randolph Bentson 的测试报告¶
From [email protected] Wed Feb 8 19:08:09 1995 Date: Tue, 7 Feb 95 22:57 PST From: Randolph Bentson <[email protected]> To: [email protected] 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 [email protected]
Simon Janes 编写的伪设备驱动程序 EQL 可用于将多个 SLIP 连接捆绑到看起来像是单个连接的内容中。这使人们可以逐步改进拨号网络连接,而无需购买昂贵的 DSU/CSU 硬件和服务。
我进行了一些此软件的测试,目的是:首先,确保它确实如所述那样工作;其次,作为锻炼我的设备驱动程序的一种方法。
以下性能测量结果来自在两个 Linux 系统 (1.1.84) 之间运行的一组 SLIP 连接,一个使用带有 Cyclom-8Ys 的 486DX2/66,另一个使用带有 Cyclom-16Y 的 486SLC/40。(使用了端口 0、1、2、3。以后的配置将在板上的不同 Cirrus 芯片之间分配端口选择。)建立链接后,我定时传输了 289284 字节的数据的二进制 ftp 传输。如果没有开销(数据包头、字符间和数据包间的延迟等),则传输将花费以下时间
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以较低速度和大数据包运行的单条线路达到此值的 2% 以内。对于更高的速度,性能受到限制(正如 Cirrus 数据手册所预测的那样),总计约为 160 kbits/秒。下一轮测试将在两个或多个 Cirrus 芯片之间分配负载。
好消息是,人们几乎可以充分利用第二条、第三条和第四条线路的带宽。(坏消息是,对于更高的速度,连接建立似乎很脆弱。一旦建立,连接就显得足够健壮。)
#线路
速度 kbit/秒
mtu
持续时间(秒)
理论速度
实际速度
最大值的 %
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 的报告¶
Date: Mon, 13 Feb 1995 16:17:29 +1100 (EST) From: Antony Healey <[email protected]> To: Simon Janes <[email protected]> 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. :)