2011年7月6日 星期三

Network speed -- slow SMB

因為客戶抱怨網路 (Save to Server) 的速度
就開始了艱難的旅程

如何增進網路的速度呢? 大哉問
這是個困難的問題
因為網路速度牽扯到很多層面
光 OSI model 就有七層 Layer

AP 啦,Protocol 啦, 網路卡, 網路線, Server,甚至OS 在在都會影響傳輸的速度

一開始從 Network Driver 看起..., bla bla bla 頭暈了,
要先熟悉 NDIS架構,很熟中斷流程,看ISRHandler
看了後 也不知要從何改起

搞了很久,做了一些測試,最後靈感來了,覺得SMB要負起很大的責任

首先
上傳約100MB大小的檔案至 Linux File Server, 大約為 1.8MB/s
共54秒
再來直接連PC 傳至Windows XP, 變得更慢,耗時62~64秒

Why?

Google 了一下 SMB,它是個 Chatty (很囉嗦的) protocol
http://en.wikipedia.org/wiki/Server_Message_Block#cite_note-6

Performance issues

client make request 之後 都要等 server 給予 response
而且Max Block Size 只有64KB
也就是說 最少每64KB就要communicate 一次
這個overhead 不可謂不高,尤其是在High Latency Network中

所以MS 在Vista後推出來 SMB 2.0
可惜的是 WINCE 5大概無緣享受

所以要加快速度 就是要 reduce overhead, increase block size
看看上面,為什麼直接連線至PC 不經過 router 反而比較慢呢
使用 MS Network Monitor 後發現
那是因為 WinXP default MaxBufferSize 為4356
比Linux Server 的16644 還低

所以要加速 SMB(CIFS) Performance
要調大 block size 到極限64KB

http://blogs.msdn.com/b/openspecification/archive/2009/04/10/smb-maximum-transmit-buffer-size-and-performance-tuning.aspx

http://support.microsoft.com/kb/279282/en-us

在 SMB Server (也就是Windows PC) 端


The MaxBufferSize can be configured through the following registry setting:

 HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\SizeReqBuf
Data Type:   REG_DWORD
Range:          1024 to 65535
Default Values (If the key is not present):  

For Windows Server versions of OS (NT server, Windows 2000, Windows 2003, Windows 2008)
     If   Physical Memory < =512M,   default is 4356.
     Else    default value is 16644.

For Windows client versions of OS (Windows 98, NT, 2000, XP and Vista)
     Default value is 4356.


在Client (WINCE)端
目前是9100bytes


上面有錯,not SizeReqBuf 而是 SizReqBuf
更改完後要重開機或者下
net stop server
net start server
http://support.microsoft.com/kb/223140/en-us


Network Monitor 很好用
怎麼看 current smb buffer size 呢 -- R Negotiate
SMB servers return a maximum SERVER buffer size (MaxTransmotBufferSize) in the SMB negotiation response (SMB_COM_NEGOTIATE server response).


而 client 則是在 SetupANDX
The SMB client sends  a maximum CLIENT buffer size  to the server in  SMB Session Setup request (SMB_COM_SESSION_SETUPANDX request)  telling the sever what the maximum buffer size the client can support.






SPNEGO -- Linux Server


SMB Signing


Network Monitor
http://sls.weco.net/node/10698

Network Capture 的 Data,格式清楚
但是不含 Preamble (8Bytes) & CRC (4Bytes)

Preamble 為 0xAA x 7, 0xAB
1.傳送端的adapter(轉接卡)會將IP datagram(IP資料封包)封裝到Ethernet frame中,並將此frame交給physical layer,接收端的adapter會從physical layer收到此frame,取出IP datagram交給network layer。

沒有留言: