以 Auto Tuning 加速 NcFTP 傳輸
[
package::ncftp] 是歷史悠久而知名的 FTP client,目前的版本號為 3.1.9,而我剛剛試著將 NLANR 的 [
Auto Tuning Enabled FTP Client And Server] 移植過來,有興趣的朋友可取得我的修改 [
ncftp-3.1.9-autotuning.patch]。
這個修改的原理可參考 [
Enabling High Performance Data Transfers],其出發點為 BDP (Bandwidth Delay Product),引用 [
提高 Linux 上 socket 性能] 的說明如下:
TCP 的性能取決於幾個方面的因素。兩個最重要的因素是鏈接帶寬(link bandwidth)(報文在網絡上傳輸的速率)和 往返時間(round-trip time) 或 RTT(發送報文與接收到另一端的響應之間的延時)。這兩個值確定了稱為 Bandwidth Delay Product(BDP)的內容。
給定鏈接帶寬和 RTT 之後,您就可以計算出 BDP 的值了,不過這代表什麼意義呢?BDP 給出了一種簡單的方法來計算理論上最優的 TCP socket 緩衝區大小(其中保存了排隊等待傳輸和等待應用程序接收的數據)。如果緩衝區太小,那麼 TCP 窗口就不能完全打開,這會對性能造成限制。如果緩衝區太大,那麼寶貴的內存資源就會造成浪費。如果您設置的緩衝區大小正好合適,那麼就可以完全利用可用的帶寬。
下面我們來看一個例子:
BDP = link_bandwidth * RTT
如果應用程序是通過一個 100Mbps 的局域網進行通信,其 RRT 為 50 ms,那麼 BDP 就是:
100MBps * 0.050 sec / 8 = 0.625MB = 625KB
注意:此處除以 8 是將位轉換成通信使用的字節。因此,我們可以將 TCP 窗口設置為 BDP 或 1.25MB。但是在 Linux 2.6 上默認的 TCP 窗口大小是 110KB,這會將連接的帶寬限製為 2.2MBps,計算方法如下:
throughput = window_size / RTT
110KB / 0.050 = 2.2MBps
如果使用上面計算的窗口大小,我們得到的帶寬就是 12.5MBps,計算方法如下:
差別的確很大,並且可以為 socket 提供更大的吞吐量。因此現在您就知道如何為您的 socket 計算最優的緩衝區大小了。
而 Auto Tuning 的作法就是適度重新評估 throughput 並調整 BDP,並考慮以下項目:
- TCP Selective Acknowledgments (SACK, RFC2018)
- Large Windows (RFC1323)
- Maximum Buffer Sizes on the host
- Application Buffers
- Path MTU
感謝 freeflying 剛剛在 #ubuntu-tw 的指點,我打包好 Debian/Ubuntu package,可 [
取得測試],注意,因為用到 getsockopt 的進階設定,所以執行檔有 setuid。
要使用 Auto tuning 作 FTP 傳輸的加速,只要在原本的指令加上 "-O" 的選項,比方說原本是:
ncftp -u <user> <server_ip>
現在改成:
ncftp -u <user> -O <server_ip>
或者在 NcFTP 的 CLI (Command Line Interface) 中,在指令後面加上 "-O",如原本:
換成:
即可驅動本加速處理。
由 jserv 發表於 June 13, 2006 03:25 PM