發表文章

pthread_create 會多建立一個 thread 的原因

之前在執行某個客戶的案子時,被問到一個問題:「你說你們程式開了兩個thread,那為什麼透過 ps 指令觀察到的個數卻是 4 個呢?」(ps 的指令為 ps -L ,可以透過 PID 和 LWP 這兩個欄位看出來),一時之間不知道怎麼回答。之後由同事 York 在 man pthreads找到了下面的答案。  Linux implementations of POSIX threads        Over time, two threading implementations have been provided by the        GNU C library on Linux:        LinuxThreads               This is the original Pthreads implementation.  Since glibc               2.4, this implementation is no longer supported .        NPTL (Native POSIX Threads Library)               This is the modern Pthreads implementation.  By comparison               with LinuxThre...

靈修分享:以賽亞書1:1-3

本來今年有個夢想,就是希望能和老婆一同好好的靈修。當然這個願望是否能成真取決於我們家中的「第三者」。以目前她晚上活碰亂跳的情形來看 ... 恐怕這個願望要在延後了。這篇靈修心得是我和老婆今年第一次(也是唯一的一次)一起查經的心得,盼望很快能有第二次囉。 以賽亞書1:1-3 當烏西雅、約坦、亞哈斯、希西家作猶大王的時候,亞摩斯的兒子以賽亞得默示,論到猶大和耶路撒冷。天哪,要聽!地啊,側耳而聽!因為耶和華說:我養育兒女,將他們養大,他們竟悖逆我。牛認識主人,驢認識主人的槽,以色列卻不認識;我的民卻不留意。 基本上大小先知書對很多基督徒來說都很難閱讀,到也不是有多艱澀難懂的神學(當然如果不包含預言內容的話),而是會覺得這麼這幾個先知一直在罵人啊,你們不煩我們讀者都煩了。其實我也不是不能理解,畢竟某種程度我自己也這麼覺得,除了幾處大家耳熟能詳的經文和故事以外,其他沒印象的地方大多都是在責備南國、北國和外邦人吧。希望這次的閱讀能夠好好去深思每一處的經文。 以賽亞書一開頭就把時間軸給寫了出來,以賽亞的年代橫跨了烏西雅、約坦、亞哈斯和希西家。看到這裡的時候我還蠻訝異的,因為和其他的先知比較起來,以賽亞算是南國先知當中遇到許多好王的呢。 代下26:4,5 烏西雅 行耶和華眼中看為正的事,效法他父亞瑪謝一切所行的;通曉 神默示,撒迦利亞在世的時候,烏西雅定意尋求 神;他尋求耶和華, 神就使他亨通。 代下27:2,6    約坦 行耶和華眼中看為正的事,效法他父烏西雅一切所行的,只是不入耶和華的殿。百姓還行邪僻的事。...約坦在耶和華─他 神面前行正道,以致日漸強盛。 代下28:1    亞哈斯 登基的時候年二十歲,在耶路撒冷作王十六年;不像他祖大衛行耶和華眼中看為正的事, 代下29:2 希西家 行耶和華眼中看為正的事,效法他祖大衛一切所行的。 可以看出來除亞哈斯以外,其他人都算是上帝眼中看為好的王。這樣,以賽亞應該會是先知中比較幸福的人,也比較不需要罵人吧。可是看到第2節第3節,上帝卻嚴嚴地責備以色列的百姓不認識祂。為什麼?理論上這時候的百姓應該是最敬畏上帝的時候不是嗎?理論上這時候上帝所說的應該是讚美、安慰和鼓勵,而不是後面一大堆的刑罰吧?在靈修的時候我第一次感到震驚,我沒想到這麼嚴厲的話居然是...

Netlink Performance 測試

這篇文章的由來在於客戶說的一句話:「Netlink 的效能似乎不太好」客戶口中的不太好指的是 Throughput 只有 10Mbps。本來嘛,我想之後才處理這件事情,但結果我的一個同事 York 抱著追根究底的精神進行了下面的實驗。首先,他用一支 user space 的程式來產生封包到 kernel space 的模組,模組收到以後就將封包打回 user space。簡單來講究是一個 echo 的行為。下面會列出這兩隻程式: 實驗平台:某平台 Kernel 版本:3.10 User Space: #include #include #include #include #include #include #include #include #include #define NETLINK_TEST 18 //#define MAX_PAYLOAD 1024 //#define MAX_PAYLOAD 2048 //#define MAX_PAYLOAD 4096 #define MAX_PAYLOAD 8192 #define MESSAGE_COUNT 1048576 struct sockaddr_nl src_addr, dest_addr; struct msghdr msg; struct nlmsghdr *nlh = NULL; struct iovec iov; int sock_fd; void main() { int _i = 0; time_t startTime = 0; time_t endTime = 0; sock_fd = socket(PF_NETLINK, SOCK_RAW, NETLINK_TEST); memset(&src_addr, 0, sizeof(src_addr)); src_addr.nl_family = AF_NETLINK; src_addr.nl_pid = getpid(); src_addr.nl_groups = 0; bind(sock_fd, (struct sockaddr*)&src_addr, sizeof(src_addr)); memset...

我弟家的新居感恩禮拜分享:善頌善禱

語本禮記·檀弓下:「晉獻文子成室,晉大夫發焉。張老曰:『美哉輪焉!美哉奐焉!歌於斯,哭於斯,聚國族於斯。』文子曰:『武也,得歌於斯,哭於斯,聚國族於斯,是全要領以從先大夫於九京也。』北面再拜稽首。君子謂之:『善頌善禱』。」 不知為什麼,我一直對禮記中的這一篇印象深刻,大概是小時候記憶力比較好,所以一直刻劃在心中吧。之前有天我弟要我把時間留下來,要參加他們家的家庭禮拜,結果到了以後才發現原來是新居感恩禮拜(我說,你們小倆口根本已經搬進去很久了吧),然後居然還要說些祝福的話(喂喂,下次這種事要先講,我本來抱定只聽只吃不說話的態度啊),在想要講什麼的時候,第一個浮出的念頭就是「善頌善禱」的這個故事 ... ㄜ ... 不是聖經經文啊,所以就想找找,在聖經中哪一段有「新居落成」的相關經節,可以作為分享,結果就是以下面這段文章來做分享: 王上9:1-10 所羅門建造耶和華殿和王宮,並一切所願意建造的都完畢了,耶和華就二次向所羅門顯現,如先前在基遍向他顯現一樣,對他說:「你向我所禱告祈求的,我都應允了。我已將你所建的這殿分別為聖,使我的名永遠在其中;我的眼、我的心也必常在那裡。你若效法你父大衛,存誠實正直的心行在我面前,遵行我一切所吩咐你的,謹守我的律例典章,我就必堅固你的國位在以色列中,直到永遠,正如我應許你父大衛說:你的子孫必不斷人坐以色列的國位。倘若你們和你們的子孫轉去不跟從我,不守我指示你們的誡命律例,去事奉敬拜別神,我就必將以色列人從我賜給他們的地上剪除,並且我為己名所分別為聖的殿也必捨棄不顧,使以色列人在萬民中作笑談,被譏誚。這殿雖然甚高,將來經過的人必驚訝、嗤笑,說:耶和華為何向這地和這殿如此行呢?人必回答說:是因此地的人離棄領他們列祖出埃及地之耶和華─他們的神,去親近別神,事奉敬拜他,所以耶和華使這一切災禍臨到他們。」所羅門建造耶和華殿和王宮,這兩所二十年才完畢了。 在列王記上的記載裏面,所羅門花了二十年的時間完成了聖殿和皇宮的建造,而現在上帝來參加這個「新居感恩禮拜」。上帝說:「 我已將你所建的這殿分別為聖,使我的名永遠在其中;我的眼、我的心也必常在那裡。 」感謝上帝,這是上帝同在的保證,這是基督徒最喜歡傳講平安的福音:「以馬內利,上帝與我們同在」,以上帝給的祝福來說,沒有比這更大的。可是等等,接下來的話是新居落成時所該給的祝福嗎?一開始還好,可...

來自林慈信老師的提醒

最近上班時間都會聽些講道,畢竟塞車實在是太嚴重了一點,也希望女兒可以在耳濡目染之下接觸到正統神學信仰的內容(這個可能太早了點)。前陣子下載了林慈信老師的「 章力生 神學講座:基督教與(西方)哲學的相遇 」,如果不是因為有讀過相關的內容,我想就我一個沒受過哲學和神學訓練的人大概聽不了多少吧。 不過裏面林慈信老師有一個很重要的提醒。林慈信老師說:「被歸正神學吸引的人通常會有兩種發展,一種是愈來愈順服在上帝的主權和帶領之下;另一種則是會離歸正神學愈來愈遠。」這裡林慈信老師所說的歸正神學指得是傳統加爾文的改革宗神學。其實這句話就邏輯上來說就和「動物可以分成兩類,一類是人,另一類不是人」一樣毫無意義,但卻讓我頗授震憾也讓我進行了反思。 我開始接觸歸神學是從聽唐崇榮牧師的講道開始,只是為了聽聽什麼叫作講了七八年的希伯來書。聽了以後發現,有好多的問題是我沒有想過的,有好多的經文是我沒有好好思考的,原來當個基督徒不是做一個世人所以為的「好人」外加相信耶穌從死裡復活就好了。我開始對神學以及這個和神學糾纏不清的哲學產生了興趣。插一句題外話,我認為唐牧師常常從哲學的角度切入信仰在現在並不是什麼好方式,因為現在的人愈來愈不讀書,也愈來愈缺乏哲學思辨的訓練(是說我也好不到哪裡去就是了)。被吸引後,開始去讀了神學以後才發現,天啊,這世界上充斥的理論也太驚人了吧 ... 以前許多在教會主日學完全不會被提到、或是被一般基督徒認為是錯誤的理論都有,不是像各種千禧年理論那樣不一定要確信的理論而已,而是像是聖經是不是神的話,因信稱義是不是正確的這些關乎就恩的知識。這些被包裝在學術的外衣之下,雖以神學為名,卻遠離了上帝,把上帝的話當成人類的作品來分析與討論而不以上帝為上帝,這就叫作被吸引進來,卻又被吸引離開吧,而我或多或少,也感受到了有這樣的人存在。 至於我,我只能說:「感謝上帝的保守」。我信上帝,是出於祂的恩,除此以外,我再也想不到任何理由。 弗2:8 你們得救是本乎恩,也因著信。這並不是出於自己,乃是神所賜的。 追根究底, 耶穌愛我我知道,因有聖經告訴我。

Back to Basics:從 mininet 談起

話先說在前面,這篇文章完全不會提到任何和 mininet架設、操作有關係的內容,因為這部份我都請同事代勞了(明明就是威脅加恐嚇還不給胡蘿蔔,誰叫我沒有胡蘿蔔) ,也因為這樣所以我沒有寫任何相關的文章,反正網路上已經一大堆了。 會想寫這篇文章是因為一個學生跟我說的一句話:「我的老師覺得 mininet 只是模擬器,不是很真實,所以他要我們參考網路上的文章,把 openvswitch(縮寫為 ovs)放到 AP 上來進行實驗。」聽到這句話我我第一時間完全不知道該怎麼回答。mininet 是不是模擬器?是!mininet 算是模擬器,既是模擬就有一定程度的不真實性,但是那個老師知道 mininet 的運作原理嗎? mininet 是 Stanford 大學 Brandon Heller 的研發成果,它的概念很單純,就是利用 Linux Kernel 所提供的 network namespace 概念來建制虛擬環境,而每一台的 openflow switch 或是 host,其實就是一個獨立的 namespace。相關的概念可以參考我之前寫過的文章 linux network namespace 。而在 mininet 裏面,OpenFlow switch 的部份就是直接使用 openvswitch ,也就是說,使用 mininet 和把 openvswitch porting 到 AP 上是幾乎一樣的效果。知道這些細節以後,我在使用 mininet 上就會比較放心了。畢竟最後的問題就是一台主機的運算資源能不能負擔這麼多個 namespace 的問題,而這 performance 的議題難道會因為 porting 到 AP 上就不存在嗎? 我在意的地方到不是老師的質疑,而是大部份我看過的學生,在 mininet 的使用上都不會去深入了解它的原理。為什麼被老師問一下就回答不出來,為什麼報告 mininet 只會停留在操作的層及而不會進一步去釐清它的實作技術?只會照著文件一步一步的操作,是很難做到舉一反三。其實我也不是多勤勞的傢伙,會去研究這東西只是因為在某次報告中要介紹相關技術,為了不要讓自己講的很心虛所以就稍微研究了一下。但盼望不要因為當工程師愈來愈久之後,就忘記了最初研究的樂趣。 ... 總的來說,這是我對自己提醒的文章。

我對 OpenFlow APP 的看法

會寫這篇文章最主要的理由在於,我發現很多人(包含我自己的長官以及眾多的指導委員)對於 OpenFlow APP的看法和我不一樣(這是客氣的說法,其實是 我認為他們的想法是錯誤 的)。所以囉,我決定整理一下自己的想法並寫在這裡,希望有興趣的人可以一起參與討論(雖然沒多少人看吧),一方面可以檢討自己的想法;二方面可以宣傳自己的理念。在這邊要先說明一件事,SDN 是一個概念而非實作上的技術,因此幾乎所有的東西都可以套入 SDN 的概念,因此我在這裡不談 SDN APP,而只單單著重在 OpenFlow APP。 很多人都期待 OpenFlow 可以帶來新的網路應用服務,well ... 單單這件事就有點問題,OpenFlow 算是一種 網路基礎建設的新型態架構 ,那麼我要問問,網路基礎建設所負責最主要的功能是什麼?答案很簡單,就是確保網路中的用戶端設備彼此之間能夠順利的連通,不管是 L2 switching 或是 L3 routing,那我們回到最基本的問題,請問目前的網路設備(我是指 L2/L3 的 switch 和 router)沒有辦法達成這一類的功能嗎?答案是,當然可以,不然我們現在用的網路是假的嗎?既然如此,那使用 OpenFlow 到底有什麼好處?使用 OpenFlow 最大的價值在於,我可以用新的想法來處理 L2 switching 和 L3 routing,藉由新的巧思,來達到比過去更好的網路效能或是使用率。有沒有例子?最簡單的一個例子就是 Broadcast 的封包處理概念,相關的細節可以參考下面的連結。 如何利用 OpenFlow 打造一個「無廣播」的網路環境 在這裡我可以斷言, 如果使用了 OpenFlow 的架構卻在思考網路問題上停留在傳統網路的思維,下場是網路的效能只會變得比過去還差。 現在面對的問題是,很多人問說,我可以不可以用 OpenFlow 來做到一些網路應用服務功能,如 Firewall、IDS/IPS 等,然後說用 OpenFlow Switch 會比較便宜,他們的理由是硬體規統、功能統一化,而且不用被網路大廠所把持。事實上,我也看到有台灣廠商投入在這一塊的發展(如果他們問我的話,我一定會加以勸阻),為了不想惹麻煩上身,姑且保留公司名稱不提。我為什麼認為這種發展方向是有問題的呢?第一, 你會期待網路基礎建設中每台設備都...