星期一, 6月 29, 2009
公司演講 The story of H.264 and MPEG serial
星期六, 6月 27, 2009
FileZilla 所使用的 GUI Library
- tinyxml.x86_64 0:2.5.3-4.fc11
- wxBase.x86_64 0:2.8.10-1.fc11
- wxGTK.x86_64 0:2.8.
星期一, 6月 22, 2009
Surveillance terms
- ONVIF - Open Network Video Interface Forum.
- WSDL - Web Service Description Language. [WSDL1.1]
- WDR - Wide Dynamic Range.
- SOAP - Simple Object Access Protocol [SOAP 1.2, Part 1]
- NVC - Network Video Client.
- NVT - Network Video Transmitter.
- OASIS WS-BaseNotification
星期五, 6月 12, 2009
HyperV and VMWare 測試報告
這幾天研究了一下要跑 Virtualization Technology的軟硬需求:
HOST OS: 就是主要掌管 Guest 的主要 OS
GUEST OS: 子 OS 被 HOST 管/的 OS
哈! 這樣清楚明白瞭解喔~~ 不懂??
For Example:
- 在 Win Server 2008 下灌 xp 32 + Linux Fedora ... xp32/Fedora 就叫 guest os, Server 2008叫 host os.
硬體需求:
- 主機板Bios 要有Support :詳細名稱不知道,不過我的是 Execute Disable Bit,有可能是Enable Intel-V / AMD-V 之類的,我的主版是P5B-VM SE,CPU:Intel E6420 Ram:DDR2 8G
- 北橋 Memory Remap Feature 要開,開了才能突破 4G.
- OS : 跑VMWare Server/Workstation 不管那種OS,但 ESXi & HyperV 要跑 XP 64bit or Server 2008,這兩個都是獨立OS,而且硬體Driver抓不到很麻煩,但有支援半虛擬化,效能上會較好。
- 至於為何要64bit,因32Bit 定址問題,只能定到3G多我看跑VM也是吃力。
- 目前是打Host / Guest 的 虛擬記憶體通通關掉,因為還蠻大的 ;)
- Windows XP 64 bit + VMWare Server 2.0
- Workstation 6.5- 要錢的
- Server 2.0 - 免費的:
- 這是用網頁來呈現控制中心,Host端龜龜的,Guest端開Full Screen 還ok 蠻順的。
- Guest 開三個都還能接受,每個1 cpu , 2G Ram,至少滑鼠是順的
- Windows XP 64 跑
- Windows XP 32 跑暗黑II
- Fedora 11 64bit
- Windows XP 64 跑
- ESXi - 也是免費的,跟HyperV 類似的做法,要有Bios/CPU 的 Intel-V or AMD-V Support
- Windows 2008 Server + HyperV
- HyperV Server 2008 - 這套是微軟大放送的,免費,不過只有文字介面,我裝好後竟然抓不到網卡,又只有文字介面,不知道要用甚麼Command 去搞,又抓不到網卡,有點難搞,放棄。
- Windows Server 2008 - 內建HyperV,這個有內建Desktop,用WINDOW 操作會好些,這個模式下感覺Windows Server還蠻穩的,不知道是不是錯覺,整個不像XP了,也不像2000 Server,我落伍了-.-
- 慘!Server 2008 內建DirectX 10,我顯卡是內建的Intel GMA3000,只支援到DirectX 9,所以也沒得測了,前幾天看到燦X賣一塊 Nvidia 9600GT 2GDDR2 2780 @@真想敗下去,跑個HyperV + 雙螢幕來瞧瞧。
- Host 端的 Server Manager的管理介面在 Collecting data 一樣要等,比VMware好的是,滑鼠不會卡死,整個系統卡著的感覺,不過安裝XP32時....Guest超龜,VMWare都沒這個問題,原本裝XP32只要半小時,裝了一小時才好,感覺上是 IO 龜住了。
- 打開 Host 的 Resource Overview看,Disk overHead很高,奇怪了,VMWare也是用 Virtual File 來做就不會這樣,讀取好像正常,寫入就很龜了。
- 終於灌好了,失望,沒有別的了,光滑鼠都輸人家。
- 嘗試著更新所有東西看看有沒救。
- KB950050 HyperV update.
- update all
- 通通最新了,重裝一次XP 32.....結論是,我要趕快殺掉 Server 2008 + HyperV ....爛爆了,光XP32一開始的安裝藍畫面就龜到爆,後面的操作就不用講了,本還想多試幾個東西,跑成這樣.....放棄。【微軟】果然是名不虛傳。
- KB950050 HyperV update.
- Windows 2008 Server +VMWare Workstation 6.5
- 首先要將剛剛裝的HyperV 弄走,移除又很龜,順便看看Workstation跑的如何。
- 拿之前在XP64 + VMWare server 2.0做的 XP 64/32 Image 跑看看。
- 金頂電池的兔子!我只想到這個,我的滑鼠像是裝了這個電池,【筋蹦】!!。
- 超順,比Server 2.0還順,不知道是不是錯覺,打暗黑的時候,哭簍怪跑好快,感覺像開了加速器,真的很快,不過D3D還是沒開,不知為何,設定檔也改了。
- 不過這可能是Server 2.0 / Workstation 6.5 的差異,不一定是 XP 64 / 2008 Server的差異,因為有兩個變數。
- XP64下試了一下 一樣快。
- Fedora 11 64bit + VMWare Server
- 這個模式有點難搞還要Compile,想到就暈。
- Linux 下還有KVM/Xen 等可以弄,請參閱鳥哥。
- 推薦一下Fedora 11 剛出喔~~ 開機20秒,畫面還ok。
- 裝ESXi 發生怪問題,HyperV 也是。
Failed to load lvmdriver: 看來是網卡問題導致。 - 暈倒,完到最後發生一個麻煩的事情,灌了太多OS,整個MBR 及 OS 亂掉,出現 Ntldr is Missing 導致不能開機,解決方式如下:
- 找回原廠CD 按 R 進CONSOLE修。
- CP [CD DRIVE]:\I386\NTLDR C:\
- CP [CD DRIVE]:\I386 \NTDETECT.COM C:\
- fixmbr, fixboot, bootcfg 等命列斟酌用。 不知道怎用就辜一下吧 or HELP.
- 要打Game 另外割一塊好,我用 Host: XP64 + Guest : XP64 打暗黑很順(VMWare Server 2.0),但要跑Direct3D能解但有問題,粉龜,使用DirectDraw 的Game 沒問題,Direct3D則要開選項,並加大顯卡memory,也就是要吃Ram啦。
- 實在是沒有那麼多時間都玩一次,只依我的需求去看,結論是 XP64 + VMWare 來跑最佳。
- 我是一個Embedded Linux 的工程師,平常也都在Linux下環境操作,攪了那麼久,雖然 不愛在Windows 上Coding,但它真的是...讓人容易操作,這應該是為啥Linux一直為何搶不下的原因,先不管Open office的問題,操作上一下子那有問題一下子缺啥的,MicroXXX在這塊真的是做的比較好,雖然他甚麼都沒有,只有一個OS + IE,加灌個Office其實一般人要的只是上網跟文書吧。
Reference:
To be continue...
星期三, 6月 03, 2009
13年前的 零分
2009/6/3 (三)
今天早上是博士班逕讀口試的日子,教授這個 【為甚麼那麼多零分】 的問題真的是讓我印象深刻。
13年前當我再就讀二專時,其實算是一個不用功的學生,還記得當時所使用的Linux 是 Slackware,為了灌這套 OS,花了一整天用十幾片 5.25 的磁片在灌(因為我的電腦是 386sx-16Mhz),為了就只是他的多工(雖然當初只會ls) ^^,因為當時只有DOS好用,翹課在家打電腦,所以拿了一個 0 分。
13年前,家中沒有ADSL,上網只能用1200 modem 撥接,為了上Internet打MUD,提升等級,達到巫師的等級可以用C語言撰寫房間,翹課到計算機中心打MUD,所以又拿了一個 0 分。
13年前,由於學費要貸款,要半工半讀,還兼差幫同學寫期末程式(當時一個人收5000塊,一次收了四個,一個人寫了 4 個Project),導致連考試都放棄了,有些課都翹掉了,又一個 0 分。
...那麼多藉口,不過還是很多 0 分,哈。
問我後悔以前不學好,拿了那麼多 0 分嗎? 不 ! 這些 0 分是有代價的。
沒有這個 0分,我不會那麼早接觸 Linux。
沒有這個 0分,我不會那麼早接觸 Internet。
沒有這個 0分,我不會知道原來以前我 0 分......。
星期六, 5月 23, 2009
Using cwrsync for synchronization data
There are no GUI for now, all Text interface。
- Windows Side RSYNC client/server: SourceForge DOWNLOAD.
After download then install it。 - Upload
- Windows:
rsync -avrHS --progress --delete ./go 192.168.1.100::test - Linux:
The same as Windows.
- Windows:
- Download
- Windows:
rsync -avzHS username@FROM_IP:/SOURCE_PATH /TARGET_PATH - Linux:
rsync -avzHS -e "ssh -p SOURCE_PORT" username@FROM_IP:/SOURCE_PATH TARGETPATH
- Windows:
- --delete,Be Care!!! It will be delete files, using it when u know what r u doing。
- Install and start SSH in Target machine。It will ask u password during procedure。
- Install and find execution file below \Program files\ICW.
- Create rsyncd.conf and put to bin.
- mkdir.exe /etc; cp.exe rsyncd.conf /etc
- rsync --daemon
- ps.exe aux (check it! is rsyncd running? ).
- Finished.
Reference:
- RSYNC (rsync.samba.org)
- man rsync
- rsync.exe /?
星期五, 5月 22, 2009
Windows 下 L2 Cache
- 首先要知道你的 CPU L2 有多大.
- 打開 regedit
- 修改下面的值 (單位)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\SecondLevelDataCache - OK , 重開機.
星期一, 5月 18, 2009
學乖
期間參考到一篇 政大 莫建清先生 所寫的【研究論文撰寫的方法與技巧】,不看還好,看了發現寫文章更是另一門學問。文中提到美國應用語言學家Hatch與Farhady (1982:1)給「研究」所下的定義是:「用有系統的方法與步驟,找出問題的答案(a systematic approach to finding answers to questions)」。工作上的程式撰寫與做研究也有相同之處:觀察問題、假設、猜測發生原因、求證,而文件就是要讓這一系列的動作能讓他人複製出相同的結果,雖然我們的重點放在學科的研究上,對於未來Paper 發表上,還是要在平常多花點時間練習。
學一次乖!未來的課業寧可一學期只出一份能拿的出檯面的報告,也不要草草了事的交出 5 份作業,至少還有一份讓人能看的點頭。
星期五, 4月 24, 2009
SecuTech Expo 2009 台北國際安全博覽會 觀後感
在SecuTech Expo 2009 台北國際安全博覽會,參觀了不少Surveillance 廠商,其中當然免不了有一些賣奇怪東西的廠商,例如:消防器材、防身電擊槍…etc,還有極少數的廠商如學校單位提供技術轉移,PTZ機構馬達等週邊廠。
在場的DVR的廠商,大多所展出的商品都還停留在 Resolution D1/CIF的規格,由於近年來LCD電視規格提升至1920x1080,畫面輸出部份已有頃向將數個D1 or CIF 的小畫面組合成 1080p/I 再輸出至Full HD 的電視畫面。就Video Server的功能性,其實跟DVR相去不遠,除了少了顆硬碟與儲存功能,幾乎跟DVR沒甚麼兩樣,也造就了如:NVR( Network Video Recorder)等許多的怪名詞。
IPCam 的部份,今年所主打的Mega 級H.264 的廠商也不算少,但看的人都集中在某些攤位,然而公司的產品也還是有不少人去看,當場看到了幾個現像是值得注意的。
Surveillance:
l 某些小公司一樣有Demo H.264的IPCAM 卻沒人駐足,攤位小連看的人都沒有,不過我在那看,其實畫質及操控並不輸我們的產品,雖然產品好很重要,但畢竟我們還不是世界大廠,攤位大小、門面也非常重要。
l UI 的簡化是一個驅勢,旁邊偷聽了一些在詢問廠商設計問題的客戶,很多都是畫面操作的問題,而會場上所展示的畫面,大多也幾近無設定的畫面,畢竟大多數的使用者設定完後就不太會去動了,實在是很少使用設定。
l Object Tracking、Video contain analysis 不少,但大多是Windows plateform下以Software Application 模式下運算,極少數以Hardware 方式實現。
l
Digital Home:
l Home care :
不少整合商將數種異質性產品整合,朝居家安控發展,雖然這已推廣多年,但都是換湯不換藥,一樣的東西,沒有一點創新,跟中X保全、新X保全所能提供的沒啥兩樣。
l New Item:
其中在會場中遇到一間叫Netvox,雖然那個看起來像經理的愛理不理,態度極差,不過我還是追著他猛問,這家在做ZigBee( IEEE 802.15.4) RF Module,其中有另一間KOBI IZEX-KOBI Technology Co., Ltd.也引入ZigBee的概念,目前項應用在監控甚少看到人整合。ZigBee,可將週遭的Sensor 狀態,透過低功率無線傳輸至ZigBee AP,再由AP 上Internet,然而只需要用電池就可以維持 1~ 2年的使用時間,目前要使用無線I/O 這個低價又可以無線傳輸,更有綁規格的機會,成本又低,不知道為何沒有幾家在整。
l Door phone:
有幾間在做Door phone,其中有簡易型,有搭配MID(Mobile Internet Device),利用MID可隨處上網的特性,直接將Stream/家電/Sensor 等納入,達到Digital Home Controller Center 的概念,但不論是簡易型還是高級型,由於MID or mini LCD都約為5 ~ 9吋畫面且不易關看,畫面UI 看起來都是需要美工處理,而非文字型態,在Embedded Linux下侼為棘手,有時甚至會受限平台,故平台需慎選。
Plateform Design:
l H.264 SOC chip:
這次有看到TI TMS320DM3xx 系列,由歐普羅代理,該RD指出 IP Camera Reference Design要到六月份才有,現在買Board沒甚麼用。不過要是跟他們買,Windows 端AP 沒有Source Code,我看一點也沒用 @@,有問題又不能改,看來要用源頭還是在TI。
l 據DM指出 Vivotek 其中有一款型號如下,不過沒看到機器:
型號: IP8161:
CPU: TI DM365 Soc
Flash:
Ram:
OS:Linux 2.6
Format: H.264/MPEG4/MJPEG
MAX Resolution: 1600x1200x
Conclusion:
1. 會場中不乏MPEG4產品,也有人在比較Performance議題,然而在 CMS整合廠商中,多組IPCam/DVR影像的輸入所耗費的CPU資源直接影響到CMS所呈現的效果,雖然H.264在儲存空間、使用頻寬等皆佔有許多優勢,然而在 Windows plateform 下Software Decode效能、價格與MPEG4相較卻略遜一截。
2. 同第1點所述,PM及業務方面是否有釐清目前公司方向,H.264平台客戶的需求,亦或客戶群皆為價格導向,對於壓縮平台是否著重於H.264/MPEG4 的差異,IPCam本身的特性並不提供錄影儲存媒體,然而在Windows Client端,目前Storage Size 也日趨龐大,價格也幾近論斤賣,若能以低價取得相同的畫質,MPEG4也不失為一個選擇。但H.264也代表著公司開發技術能力,如何在有限資源下達到相同的效果,也是屬於一種不可缺少的指標性產品。
3. 將IPCAM 作到幾近DVR的強大功能,使得Spec能條列出多功能亦是不錯,但倘若將火力集中於開發大多數客戶想要的功能,是否能發揮更大效益,是否遠比開發出數十個沒用的小功能更具有賣像?
4. 爾後的展覽應派遣RD駐場,雖然大多的問題公司內FAE/PM等都能回答,但在會場觀察了幾個小時,不論是公司大小,大多的公司在被詢問到較專業性問題時,該公司即派當場RD回覆,除了能提升公司專業領導的品牌形像,對於客戶再次詢問詳細問題的意願也較高。
5. 人臉及行為模式的辨認似乎有不少買家(掛菊色的牌子)在看,這個功能在Windows端也能做到,是不是要在Server端處理就只能看Plateform provider了,雖然目前公司沒有人力做這塊,然而這很像是趨勢,需要高度觀察。
星期一, 4月 20, 2009
NoneBlock sendfile
- 從HW 的資料透過DMA 搬移至Kernel
- 再從 Kernel 搬至User space,送到Socket 時再搬依次。
- CPU Copy x 2 + DMA x 2
- 從HW 的資料透過DMA 搬移至Kernel
- 直接從 Kernel space 將Buffer搬至Socket buffer。
- 缺點:當User/Kernel space 兩塊同時操作時須有解決方案,多了sendfile 一次的context switch。
- 優點:當要送至socket時有sendfile的效能,user space也能存取資料。
- 花費:CPU Copy x 1 + DMA x 2
- 從HW 的資料透過DMA 搬移至Kernel
- 直接從 Kernel space 將Buffer搬至Socket buffer。
- 缺點: User space 無法取得資料。
- 花費:CPU Copy x 1 + DMA x 2
- 從HW 的資料透過DMA 搬移至Kernel
- 利用HW support gather 的方式,直接從 socket/kernel dscr pointer 利用DMA gather的方式將資料直送底層。
- 這個步驟目前還不確定方式,目前看來從AP層好像沒有現成的,要從Driver request DMA channel,setup, start 等動作,要找一下。
asfd - 缺點: 需要HW support。
- 花費:DMA x 2
- request_dma()
- dma_setup_handlers()
- dma_config_src()
- dma_config_dst()
- dma_setup_single
- dma_enable
- ==> wait for transfer complete event
- dma_disable
- dma_free
- MultiBlock 的話還需要設定 setup_sg or setup_mlist

- Client 端 connect target ip = 192.168.1.85 or 127.0.0.1
- Server端收到就丟棄。
- Server端收到後存檔。
- Server端收到後印出收到Size。
#include <stdio.h>
#include <stdlib.h>
#include <socketServer.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int fd, times=0;
void callback( int fd, unsigned char *buf, int size ){
// printf("MyFunction:\n FD[%d] str=%s size=%d\n", fd, buf, size );
// printf("[%d] MyFunction:\n FD[%d] size=%d\n", times, fd, size );
// fd = open("server.dat", O_WRONLY | O_APPEND );
// write( fd, buf, size );
// close( fd );
times++;
}
int main( int argc, char ** arg ) {
SOCKET_SERVER server;
int ret;
system("rm server.dat;touch server.dat");
// use User Define Callback
#if 1
ret = server.initServer( 9600, callback );
#else
ret = server.initServer( 9600);
#endif
printf(" server ret =%d\n", ret );
while ( 1 ) {
server.clientList();
sleep(3);
}
return EXIT_SUCCESS;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <socketClient.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/sendfile.h>
#include <errno.h>
int main( int argc, char ** arg ) {
SOCKET_CLIENT client;
int ret;
int fd;
//init sock
//ret = client.initClient( "127.0.0.1", 9600 );
ret = client.initClient( "192.168.1.85", 9600 );
if( ret != EXIT_SUCCESS ){
printf("Client create FAIL ret=%d\n", ret );
}
//send mydata
fd = open( "mydata", O_RDONLY);
int times=0;
size_t r;
off_t offset = 0;
struct timeval tv;
fd_set wfds;
while( 1 ){
FD_ZERO( &wfds );
FD_SET( client.m_iFD, &wfds);
tv.tv_sec = 1; tv.tv_usec = 0;
ret = select( client.m_iFD+1, NULL, &wfds, NULL, &tv);
if ( ret <= 0 ) printf("timeout or ret=%d\n", ret );
r = sendfile( client.m_iFD, fd, &offset, 1024*1024);
if( r == 0 ) break;
if( r == -1 ){//&& errno == EAGAIN ){
printf("EAGAIN\n");
continue;
}
printf("[%d]sendfile offset=%d r=%d \n", times,(int)offset, r);
times++;
}
return EXIT_SUCCESS;
}
Run: 可以看到連下兩道後的結果並不相同,但Server端是相同的,且不會出EAGAIN,EAGAIN發生的時機點為連下兩道sendfile才會發生,select 當次即使是送不完也不會發生。也就是說EAGAIN這個flag 是在ret = -1 時產生,buf 裡的位置為0 才會發生。
[root@192 ipSock_noneblock_sendfile]# ./client
[0]sendfile offset=1048576 r=1048576
[1]sendfile offset=2097152 r=1048576
[2]sendfile offset=2179072 r=81920
[3]sendfile offset=2785280 r=606208
[4]sendfile offset=2949120 r=163840
[5]sendfile offset=3112960 r=163840
[6]sendfile offset=3276800 r=163840
[7]sendfile offset=3440640 r=163840
[8]sendfile offset=3604480 r=163840
[9]sendfile offset=3768320 r=163840
[10]sendfile offset=3932160 r=163840
[11]sendfile offset=4096000 r=163840
[12]sendfile offset=4259840 r=163840
[13]sendfile offset=4423680 r=163840
[14]sendfile offset=4538368 r=114688
[15]sendfile offset=4685824 r=147456
[16]sendfile offset=4833280 r=147456
[17]sendfile offset=4964352 r=131072
[18]sendfile offset=5095424 r=131072
[19]sendfile offset=5226496 r=131072
[20]sendfile offset=5554176 r=327680
[21]sendfile offset=5898240 r=344064
[22]sendfile offset=6045696 r=147456
[23]sendfile offset=6193152 r=147456
[24]sendfile offset=6324224 r=131072
[25]sendfile offset=6455296 r=131072
[26]sendfile offset=6586368 r=131072
[27]sendfile offset=6717440 r=131072
[28]sendfile offset=6848512 r=131072
[29]sendfile offset=6979584 r=131072
[30]sendfile offset=7110656 r=131072
[31]sendfile offset=7241728 r=131072
[32]sendfile offset=7372800 r=131072
[33]sendfile offset=7503872 r=131072
[34]sendfile offset=7634944 r=131072
[35]sendfile offset=7766016 r=131072
[36]sendfile offset=7897088 r=131072
[37]sendfile offset=8028160 r=131072
[38]sendfile offset=8159232 r=131072
[39]sendfile offset=8191034 r=31802
[root@192 ipSock_noneblock_sendfile]# ./client
[0]sendfile offset=1048576 r=1048576
[1]sendfile offset=2097152 r=1048576
[2]sendfile offset=3145728 r=1048576
[3]sendfile offset=4194304 r=1048576
[4]sendfile offset=4538368 r=344064
[5]sendfile offset=5586944 r=1048576
[6]sendfile offset=6635520 r=1048576
[7]sendfile offset=7684096 r=1048576
[8]sendfile offset=8191034 r=506938
- 查了一下原因,也許跟下面有關,不確定,把wmem_max值加大,當busy時send出去的值就會接近設定的值。
cat /proc/sys/net/core/wmem_max
131071 - 為何要用sendfile
1.減少TLB cache flush,使用read/write function會導致 cashe 異動。
2.減少kernel/user space context switch 次數。
3.Copy 次數減少。 - 長遠來看 IPCam/ DVR 長時間處理影像傳輸,應該使用第四種方式,減少CPU Loading,除了增加Performance,還可以增加 Client 的 Throughput。



