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 乾淨地進行了修補。 已經對 v1.1 補丁進行了 1.1.92 的一些測試,該補丁僅是為了在最新的核心原始碼樹中乾淨地進行修補而建立的。 (是的,它工作得很好。)

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 太多可能就有點過分了。 這是一個設定 eql 裝置的 ifconfig 命令示例

ifconfig eql 198.67.33.239 mtu 1006

一旦 eql 裝置啟動並執行,請使用很酷的新路由語法,將靜態預設路由新增到路由表中,這使生活更加輕鬆

route add default eql

3.2. 手動從屬裝置

手動從屬裝置需要兩個實用程式程式:eql_enslave 和 eql_emancipate(-- eql_emancipate 尚未編寫,因為當從屬裝置“死亡”時,它會自動從佇列中取出。我還沒有找到一個編寫它的好理由... 除了完整性,但這並不是一個好的動力嗎?--)

從屬裝置的語法是 “eql_enslave <master-name> <slave-name> <estimated-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 指令碼/系統,用於重新撥打丟失的 PPP 連線以與 eql 驅動程式一起使用,時間是 95 年 2 月 25-26 日的週末(以下稱為 8 小時 PPP 仇恨節)。 也許今年晚些時候。

4. 關於從屬排程程式演算法

從屬排程程式可能會被十幾個其他東西替換,並能更快地推送流量。 驅動程式當前設定中的公式經過調整,可以處理具有截然不同的每秒位元數“優先順序”的從屬裝置。

我所做的所有測試都是使用兩個 28.8 V.FC 調變解調器,一個以 28800 bps 或更慢的速度連線,另一個始終以 14400 bps 連線。

一個版本的排程程式能夠透過 28800 和 14400 連線推送 5.3 K/s,但是當鏈路上的優先順序非常寬(57600 vs. 14400)時,“更快”的調變解調器接收所有流量,“更慢”的調變解調器餓死了。

5. 測試人員報告

有些人使用更新的核心(比 1.1.75)試驗了 eql 裝置。 由於刪除了舊的“從屬平衡”驅動程式配置選項,因此我已更新驅動程式以在更新的核心中乾淨地進行修補。

  • LinuxNET 的 icee 在沒有任何拒絕的情況下修補了 1.1.86,並且能夠啟動核心並從屬幾個 ISDN PPP 鏈路。

5.1. Randolph Bentson 的測試報告

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

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/sec。 下一輪測試將在兩個或多個 Cirrus 晶片上分配負載。

好訊息是,人們幾乎可以充分利用第二條,第三條和第四條線路的頻寬。 (壞訊息是,對於更高的速度,連線建立似乎很脆弱。建立後,連線似乎足夠穩定。)

#行數

速度 kbit/sec

mtu

秒數持續時間

理論速度

實際速度

%of 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 的報告

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.  :)