不同平臺下的網路優化

BTxigua發表於2009-03-30
altibase的replication,對於網路傳輸的速度要求比較高,尤其是在修改量比較大的時候。對於TT也是同樣的。
altibase的rep傳送的包大小為128K,預設tcp傳送視窗大小是小於64K的,在不同的平臺下,我們需要優化一些網路引數的配置。

一、AIX下的網路引數優化
oracle推薦設定:
/usr/sbin/no -p -o udp_sendspace=1048576
/usr/sbin/no -p -o udp_recvspace=1048576
/usr/sbin/no -p -o tcp_sendspace=1048576
/usr/sbin/no -p -o tcp_recvspace=1048576
/usr/sbin/no -p -o rfc1323=1
/usr/sbin/no -p -o sb_max=4194304
/usr/sbin/no -r -o ipqmaxlen=512
上面的修改是針對全域性進行的設定,全域性設定無法應用到具體的網路介面上。還需要針對具體的網路介面進行設定,可以使用下面的命令來進行設定:
chdev -l en0 -a tcparecvspace=1048576 -a rfc1323=1 -a tcp_recvspace=1048576
建議使用smitty命令進行修改,具體的命令如下:
smitty chinet

檢查設定的結果:
no –L 檢查設定結果
ifconfig –a檢查設定結果

針對上面修改的引數說明:
tcp_sendspace ——控制核心中用於緩衝應用程式資料的緩衝區空間大小。您可能希望使其超過預設值,因為如果達到了限制值,傳送應用程式則將掛起資料傳輸,直到 TCP 將資料傳送到緩衝區為止。
tcp_receivespace ——除了控制接收緩衝區所消耗的緩衝區空間總量之外,AIX 還使用這個值來確定其傳輸視窗的大小。
udp_sendspace ——對於UDP,您可以將這個引數設定為不超過 65536 的值,因為每個 IP 資料包的上限為 65536 個位元組。
udp_resvspace ——這個值應該大於 udp_sendpsace,因為它需要處理每套接字的、儘可能多的同步 UDP 資料包。可以簡單地將這個引數設定為 udp_sendspace 值的 10 倍。
sb_max ——可調引數為排隊等待單個套接字的套接字緩衝區數目設定上限,而這個上限可以控制緩衝區(排隊等待傳送者或者接收的套接字)所使用的緩衝區空間總量。這個總量通常應該小於 wall,並且近似於tcp 或者 udp 傳送和接收設定最大值的 4 倍。例如,如果您的 udp_recvspace 是 655360,那麼將其加倍到 1310720 是沒有問題的。
rfc1323 ——可調引數支援 TCP 視窗縮放選項,該選項允許 TCP 使用較大的視窗大小。開啟這個選項,以支援最佳的 TCP 效能。
ipqmaxlen ——Specifies the number of received packets that can be queued on the IP protocol input queue. Default: 150.


二、Linux下的網路優化引數配置:
具體設定,vi /etc/sysctl.conf
# recommended to increase this for 1000 BT or higher
net.core.netdev_max_backlog = 2500
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_wmem = 4096 65536 25165824
net.ipv4.tcp_rmem = 4096 25165824 25165824
net.core.rmem_max = 25165824        
net.core.rmem_default = 25165824   
net.core.wmem_max = 25165824        
net.core.wmem_default = 65536        
net.ipv4.tcp_sack =1
net.ipv4.tcp_window_scaling = 1        
net.ipv4.tcp_fack =1
net.ipv4.tcp_mem 24576 32768 49152


具體的含義介紹如下:
net.core.netdev_max_backlog = 2500
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_wmem = 4096 65536 25165824        #為自動調優定義每個 socket 使用的記憶體。第一個值是為socket 的傳送緩衝區分配的最少位元組數。第二個值是預設值(該值會被 wmem_default 覆蓋),緩衝區在系統負載不重的情況下可以增長到這個值。第三個值是傳送緩衝區空間的最大位元組數(該值會被wmem_max 覆蓋)。
net.ipv4.tcp_rmem = 4096 25165824 25165824        #與 tcp_wmem 類似,不過它表示的是為自動調優所使用的接收緩衝區的值。
net.core.rmem_max = 25165824        #定義最大的TCP/IP棧的接收視窗大小
net.core.rmem_default = 25165824   #定義預設的TCP/IP棧的接收視窗大小
net.core.wmem_max = 25165824        #定義最大的TCP/IP棧的傳送視窗大小
net.core.wmem_default = 65536        #定義預設的TCP/IP棧的傳送視窗大小
net.ipv4.tcp_sack =1                 #啟用有選擇的應答(Selective Acknowledgment),這可以通過有選擇地應答亂序接收到的報文來提高效能(這樣可以讓傳送者只傳送丟失的報文段);(對於廣域網通訊來說)這個選項應該啟用,但是這會增加對 CPU 的佔用。
net.ipv4.tcp_window_scaling = 1        #啟用RFC1323定義,支援超過64K視窗
net.ipv4.tcp_fack =1                 #啟用轉發應答(Forward Acknowledgment),這可以進行有選擇應答(SACK)從而減少擁塞情況的發生;這個選項也應該啟用。
net.ipv4.tcp_mem 24576 32768 49152 確定 TCP 棧應該如何反映記憶體使用;每個值的單位都是記憶體頁(通常是 4KB)。第一個值是記憶體使用的下限。第二個值是記憶體壓力模式開始對緩衝區使用應用壓力的上限。第三個值是記憶體上限。在這個層次上可以將報文丟棄,從而減少對記憶體的使用。對於較大的 BDP 可以增大這些值(但是要記住,其單位是記憶體頁,而不是位元組)。



三、HP下的網路引數優化
ndd -set /dev/tcp tcp_conn_request_max 10240
ndd -set /dev/tcp tcp_syn_rcvd_max 1024
ndd -set /dev/tcp tcp_time_wait_interval 1000
ndd -set /dev/tcp tcp_xmit_hiwater_def 65536  
ndd -set /dev/tcp tcp_recv_hiwater_def 65536  
ndd -set /dev/tcp tcp_xmit_lowater_def 24576  
ndd -set /dev/tcp tcp_fin_wait_2_timeout 60000
ndd -set /dev/tcp tcp_keepalive_interval 60000
ndd -set /dev/tcp tcp_ip_abort_interval 60000
ndd -set /dev/tcp tcp_keepalive_detached_interval 60000
ndd -set /dev/tcp tcp_rexmit_interval_initial 2000
ndd -set /dev/tcp tcp_rexmit_interval_min 1500
ndd -set /dev/tcp tcp_rexmit_interval_max 10000
ndd -set /dev/sockets socket_caching_tcp 1024
上述的修改,將在作業系統重啟後丟失。如果希望在作業系統重啟後還能生效,需要將上述資訊放到下面的配置檔案中。參照下面已經給出的幾條配置,有多少就寫多少。
vi /etc/rc.config.d/nddconf
TRANSPORT_NAME[0]=tcp
NDD_NAME[0]=tcp_conn_request_max
NDD_VALUE[0]=10240
#
TRANSPORT_NAME[0]=tcp
NDD_NAME[1]=tcp_syn_rcvd_max
NDD_VALUE[1]=1024
#
TRANSPORT_NAME[0]=tcp
NDD_NAME[2]=tcp_time_wait_interval
NDD_VALUE[2]=1000
#
TRANSPORT_NAME[1]=tcp
NDD_NAME[3]tcp_fin_wait_2_timeout
NDD_VALUE[3]6000
#
TRANSPORT_NAME[2]=tcp
NDD_NAME[4]=tcp_recv_hiwater_def
NDD_VALUE[4]=1048576
#
TRANSPORT_NAME[3]=tcp
NDD_NAME[5]=tcp_xmit_hiwater_def
NDD_VALUE[5]=1048576
#
TRANSPORT_NAME[3]=tcp
NDD_NAME[6]=tcp_xmit_lowater_def
NDD_VALUE[6]=24576
#
TRANSPORT_NAME[4]=sockets
NDD_NAME[7]=socket_caching_tcp
NDD_VALUE[7]=1024
每個引數具體的含義可以在HP-UX B.11.31使用ndd -h parameter檢視

=============================================================================
四:總結
1)不同平臺下的優化主要是修改tcp大視窗傳送支援。
2)複製的速度,除了優化網路引數,還有更重要的一個因素:物理的交換機連線情況。在專案的優化中,必須要求參與複製的物理鏈路必須連線到同一個交換機上,不能分跨交換機。如果考慮到鏈路冗餘,可以使用雙網路卡繫結,將兩條鏈路分別連線到不同的交換機上,在交換機之間做trunk。
在我的測試中,傳送的資料包大小為128K,兩臺主機(hp11.31)千兆光卡都連線到同一個Foundry SX800上,獲得的資料如下:
=================================================================
   Total : MAX = 103.8 MB / MIN =  95.5 MB / AVG = 102.4 MB
=================================================================
按照(三)給出的優化方法優化之後,速度也沒有提升。因為這基本已經達到千兆光口的極限了。
如果分別連線到兩個Foundry SX800上,速度降低很多:
=================================================================
   Total : MAX =  68.2 MB / MIN =  59.9 MB / AVG =  63.7 MB
=================================================================
如果這時,按照(三)給出的優化方法調整引數,效能可以提升不少:
=================================================================
   Total : MAX =  87.1 MB / MIN =  39.5 MB / AVG =  83.5 MB
=================================================================
當然這個數字不是絕對的,跟你實際的網路關係很大。我舉這個例子只是說明必須要保證複製鏈路不跨交換機。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10867315/viewspace-580614/,如需轉載,請註明出處,否則將追究法律責任。

相關文章