2011年7月22日 星期五

Qt

今天在尋找Qt 時
找到以下網頁
http://doc.qt.nokia.com/latest/templates.html
解釋了為什麼Qt 要用 moc 的方式而不改用 template 方式來實現
signal/slot

太多人在論壇上 argue moc 的方式不標準 bla bla bla
其實那是種無聊的完美主義 或標準主義
任何東西好用的就是好用 不管標準與否
任何東西越多人使用 它就是標準 不僅如此 它還超越了標準
相反的 任何標準 如果不好用 或少人使用
那麼標準也只是 useless standard
比如說 JPEG2000

所以標準與否 並不是那麼重要
工程師應該要以實用主義為優先
所謂的不管白貓黑貓 會抓老鼠的就是好貓
不要被標準 或完美所沖昏了頭

世上並沒有完美的事物 很多事都是妥協的結果
換個角度來看 真實存在的東西 就是完美的
不存在的東西 只是虛幻

想一想 一開始標準的設定 也是為了讓大家更方便 能夠互通
事情更好做 而非硬性規定完全得符合 standard.
Standard 只是個範本,而實際上的運用,必須因時地而修改或變通。

2011年7月21日 星期四

FTP on WINCE, WININET

用VS2008 寫了一個ftp 的程式,但是很奇怪的 無法正常run
會顯示 cannot execute XXX.EXE
而且只要有 call InternetOpen() 就會顯示 cannot execute \USB Disk\Ftpce.exe
如果隨便亂打 abcd.exe 只會顯示 cannot execute abcd.exe
甚至連第一行的 printf 都不會執行
但是把InterOpen() 等函式拿掉
就可正常執行

try 很多方法,最後發現原因在於System Image 中沒有 include wininet 的元件

InternetOpen(),  InternetConnect(), FtpOpenFile() 都要include wininet.lib
而 WinInet 在 Browser componet (IE6) 下面,叫做 Windows Internet Services

加入之後就ok了
總之 要使用 WinInet functions,要先加入 Windows Internet Services.
然後
#include
link wininet.lib ( at \WINCE500\PUBLIC\IE\OAK\LIB\....)

可以正常Link & Run 之後
就開始寫 ftp program
前面很順利,但是用到 FtpPutFile 時
卻回傳 550 Forbidden filename

卡住了好久後發現 forbidden filename 是因為
1. 在那個目錄裏沒有權限寫入
2. 路徑不對 在Linux 下的路徑要用 / 而不是 \
所以要指定 /Public/test.wav 而不是 \\Public\\test.wav
或 /test.wav

然後使用 FtpPutFile 之後 發現速度甚至比SMB還要慢
應該是內部處理很差的關係(或者是buffer 太小)
改用 FtpOpenFile + InternetWriteFile,  buffer size 512K之後就正確了
比SMB還要快一些 ~ 10%-15%

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。

2011年7月1日 星期五

WINCE 7 的新特色

WINCE 7 新的特色

* Support for ARM v7
* New developer and designer tools
* New technology for creating user interfaces
* New SMP (symmetric multiprocessing) support for x86 & ARM, MIPS
* New multimedia player, with customizable UI
* New version of Internet Explorer (which is based on IE 7 with some “performance updates” from IE 8)
* Flash 10.1 support (which requires an Adobe license by OEMs who want to include that feature)
* Silverlight for Embedded support
* Improved Connectivity to PCs, servers (NDIS 6.1 support)