2011年4月7日

區網升級1000Mbps與Ubuntu查詢網路卡連線速度的方法

以前對區域網路的速度不太注意,只覺得網路線插上去能連線成功就好。日前手邊一台D-Link DIR-300故障,就利用這個機會一次把家裡的工作站和伺服器之間的區網升級。雖然手邊很多閒置的網路分享器,但清一色都是100Mbps/802.11G的舊款機種。

靠著在NOVA工作的阿政兄幫忙,物色到這台TP-LINK WR1043ND,是3T3R支援802.11N/1000Mbps的機種,算是便宜大碗的好物,所以就打消了原本想購買D-Link DIR-655的念頭。

無線網路的部份,這台分享器有3T3R MIMO,實際測試起來,三十多坪的公寓,從最角落的房間將訊號傳送到另一個角落的房間,大概有30-40%的訊號強度。
但我目前比較關心的是,區網速度的提升能有多少。因為家裡兩台主要的工作用的電腦,一台當Server,另一台當Workstation,但透過100Mbps的網路交換資料,仍要浪費不少時間在等待大檔傳輸。

雖然CAT.5e規格的網路線,理論上可以達到1000BASE-T的速率,但實際速度要看線材品質。這種5公尺以下長度的線,CAT.6和CAT.5e價格沒差多少,但CAT.7就比CAT.6貴很多,我最後決定買PowerSync的Cat.6線材。

兩台主機,一台配置的網路卡是INTEL 9130CT,另一台則是接到主機板內建的Realtek 8169,都最高支援1000Mbps的速率。

但是將Gigabits的網路卡,使用CAT.6網路線,接到Gigabits乙太網的分享器之後,怎麼確認作業系統有使用1000Mbps的速度呢?

在INTEL網卡的機器上,使用 dmesg | grep ethX 可以查到連線速率的LOG資料。
e1000e: ethX NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX

但REALTEK網卡的機器,就沒這麼幸運了,除了link up沒顯示別的。
r8169 0000:03:00.0: eth0: link up

這時候就要使用ethtool這個軟體,因為Ubuntu並沒有內建,所以要先apt-get裝上。
sudo apt-get install ethtool

使用ethtool也要root權限,所以一樣用sudo執行。
sudo ethtool ethX

輸出訊息很詳細,但我們只需要看Speed及Duplex。
Settings for ethX:
Supported ports: [ TP MII ]
Supported link modes:   10baseT/Half 10baseT/Full
                       100baseT/Half 100baseT/Full
                       1000baseT/Half 1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes:  10baseT/Half 10baseT/Full
                       100baseT/Half 100baseT/Full
                       1000baseT/Half 1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Link partner advertised link modes:  10baseT/Half 10baseT/Full
                                    100baseT/Half 100baseT/Full
                                    1000baseT/Full
Link partner advertised pause frame use: No
Link partner advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: MII
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: pumbg
Wake-on: g
Current message level: 0x00000033 (51)
Link detected: yes

連線速度顯示1000Mbps,而Full Duplex則表示已開啟全雙工模式,即Income/Outcome可雙向同時進行1000Mbps速率的傳輸。由bit換算成byte,1000Mbps是125MBps(b=bit;B=byte),但這只是理論值,網路卡、線路、TCP資料封包處理、電腦及交換器效能很多因素都會讓實際傳輸速度再低上許多。

在網路傳輸品質良好的情況下,1000Mbps通常有機會達到100MB/sec的實際傳輸速度,但由於硬碟的平均讀取可能沒有這麼快,所以用FTP測試的話,可以發現速度是取決於兩台主機各自硬碟的讀寫速度。

FTP的傳輸算是相當接近網路速度的上限,若是透過SFTP、SAMBA(網路芳鄰),就會再慢一些,尤其是SFTP的傳輸過程資料經過加密,速度就大打折扣。但FTP傳輸時,兩邊若是以傳統硬碟當作儲存媒體,就測不出1000Mbps網路傳輸的極限。

要解決這個問題,其實只要透過兩邊主機的ramdisk即可。但為了測試還要弄個ramdisk?聽起來有點麻煩,但是在Ubuntu上其實並不需要額外的設定,因為/tmp(暫存區)資料夾就是採用tmpfs這個檔案系統,也就是存放在/tmp資料夾底下的檔案,實際都是放在閒置記憶體空間。

預設的情況下,Ubuntu配置1GB的空間給/tmp,若要修改可以編輯/etc/fstab,將size改成需要的大小。
tmpfs /tmp tmpfs size=4096M 0 0

所以我們可以製造2-4G的檔案,用來進行FTP的傳輸測試。在Linux底下「快速」製造超大檔案,可是有撇步的,不需要真的去找一個好幾GB的檔案拷貝到/tmp,在/tmp容量足夠的情況下,可以使用dd指令,若/tmp容量不夠,可以使用qemu-img指令,dd和qemu-img在短短幾秒內產生指定大小的檔案。

使用dd(若/tmp的剩餘容量足夠建立)建立4GB的檔案。
dd if=/dev/zero of=test.img bs=1M count=4096

如果還未安裝qemu,可以先用apt-get裝上。
sudo apt-get install qemu

再來使用qemu-img快速建立一個4GB大小的檔案。
qemu-img create test.img 4G

使用這個檔案進行FTP傳輸,由本地端的/tmp資料夾傳到遠端的/tmp資料夾,由於兩端主機都是讀寫記憶體空間的暫存區,所以測得出1000Mbps的上限(使用LFTP進行傳輸,維持在每秒100M以上)。

結論是,升級到1000Mbps的區域網路,真的可以讓多台主機串起來用;但硬碟、網卡要夠力才能達到的極限的速度,所以升級小型區網用的網路設備,大約只要3000-10000元的預算,但之後就開始需要高價的RAID、SSD、NIC才能繼續提升效能,就會是個錢坑了。

沒有留言:

張貼留言

lyhcode by lyhcode
歡迎轉載,請務必註明出處!