電腦效能應用與安全研究室 Performance, Applications and Security Lab


我們的研究範圍很廣,從嵌入式系統、手機應用、一直到雲端計算、商務應用、資訊安全都有做。
我們的合作研究夥伴很多,包括聯發科、IBM、中研院、資策會,還有和台大、清大、交大的教授合組研發團隊
,包括高階應用處理器架構研究、虛擬化技術、異質計算、系統軟體等重要技術的研究與創新,我們很關切台灣人才與產業的未來。

2015年11月5日 星期四

開源系統軟體的教學與研究計畫

這是我接下來幾年在技術和學術上想努力推動的目標,希望有共同興趣的學界、業界朋友有機會能一起來打拼。目前,我已與台大徐慰中教授、成大黃敬群教授有了一些初步的討論和共識,我也很歡迎對上述構想有興趣的教授、長官、朋友們提出建議和參與行動。我正在徵求對於開源系統軟體有興趣的(全職或兼職)研究助理和行政助理,有意者請與我聯絡。

注意到,這裡談的是「系統軟體」,而不是一般的開源碼計畫,目標不是創造新的開源碼計畫,而是探究如何善用、改造、特殊化既有的開源系統軟體去創造高品質的系統和應用。

【開源系統軟體的教學與研究計畫】

開源軟體(open-source software),對於資訊科技的發展扮演非常重要的角色。尤其在系統軟體的領域,開源碼計畫更是遍地開花。90年代以Linux作業系統為核心開始集結各種開源碼軟體,顛覆商用軟體壟斷的世界,乃至於有00年代的雲端運算的普及 -- Android手機作業環境和OpenStack伺服器作業環境均採用了大量的開源碼。

近年,更有許多專為物聯網和大數據應用設計的開源系統軟體計畫,例如ARM推出給物聯網使用的mbed平台(註一),用於大數據儲存與分析的Hadoop(註二)。作為使用這些系統與中介軟體的一般應用開發人員,或許只需要略為了解其原理,搞清楚程式設計介面(API),應該不會太難上手。但是要如何針對應用的需求和系統的特性進行效能調校(performance tuning)、客製化(customization)、特殊化(specialization),則必須深入理解系統的工作原理和實地耕耘相關的系統軟體。

放眼國內業界,很多的高階、前瞻的資訊科技研發項目,都需要上述具備足夠能力來發揮與開拓開源系統軟體的潛力和價值。能夠好好調校Hadoop,善用新的系統架構,產生十倍以上的效能,或是解決十倍大的問題,以千萬等級的設備達成他人億元設備所不能達成的功能,這樣的機會隨處可見,如果國內有更多兼通理論與實務的系統人才,那麼台灣會有更多的機會將長年投注於硬體產業所產生的優勢轉型提升至系統層次,例如專為某類型大數據應用特殊化的大數據專用系統(big data appliance)。

但問題是,我們該如何訓練這類兼通理論與實務的系統人才呢? 在資工系的「作業系統」「計算機結構」這兩門課程中教授了不少系統的工作原理,但大多數的學生不容易將原理加以運用;到了業界後,也不大容易透過零碎的訓練課程和單一的工作經驗來整合出完整的系統理論與實務能力。

因此,我想利用「開源系統軟體」作為主題和媒介,展開一系列的教學和研究活動。我希望能邀集到國內通曉開源系統軟體的專家學者,到我下學期開設的【開源系統軟體概論與實務】課程中教授重要領域中具代表性的開源系統軟體,一方面探討這些軟體幕後的原理和設計的方法,一方面要求修課學生瞭解與實地接觸這些開源碼計畫,帶領學生們探討這些計畫的未來發展方向,並且鼓勵學生在期末專題中提出可行的研究計畫。

同時,我想這也是很多學校和業界所注重的領域,因此我希望盡量將課程和研究的資源與學界和業界分享,並且也希望業界來幫忙推展開源系統軟體的教學與研究。我希望利用這幾年的時間與大家一起來深耕開源系統軟體的領域,厚植技術開發與學術研究的基礎,基於開源碼的精神,打造出一個以貢獻和互助為宗旨的技術交流和分享平台,再以此平台培育優秀系統人才以及幫助業界開拓未來。

目前構想中的一學期(18周)的課程概要如下,課程內容可能需要進一步做取捨或修改,如果內容太多,無法割捨,只好考慮開成上下學期兩門課。我們的下一步則是規劃一個【為期兩到三周的暑期密集訓練課程】,如果進度順利的話,將在明年暑假提供給學界和業界參與。講課的部分,錄下來上網應該沒問題,但課程的重點是實做的部分,這也是系統人才不易培養的原因,我希望有辦法設計出容易上手又有深度的實作課程,加上開源硬體,看看能否解決這個問題。

【課程概述】

開源系統軟體的重要性,如上述,不再贅述。

由於重要的開源系統軟體很多,我們將選擇IoT與Big Data領域為當前的重點,挑選具代表性的軟體,製作教學模組。每一模組針對特定領域,教導學生學會使用該領域的代表性軟體,同時鼓勵學生深入探索該領域其他的開源系統軟體,訓練學生舉一反三,進而引導學生思考如何研究改進開源系統軟體。學習使用、多方探索、研究改進,是成為高手的三部曲。我們希望以這門課程帶領學生入門,也希望藉此建構強而有力的開源系統軟體社群,吸引更多高手來教與學,共同來提升臺灣的開源系統軟體的水準。

【課程目標】

在於讓研究所與大學部高年級修課同學:(1) 瞭解開源系統軟體的背景技術知識 (2)  學習使用開源系統軟體開發應用 (3)探索相關的開源系統軟體 (4) 探討如何改進開源系統軟體

【課程大綱】

1.  Introduction to Open-Source Software
1.1 History and concept of open-source software
1.2 Use of open-source software
1.3 Value of open-source software

2. Open-source development tools
2.1 Project and version control system (github)
2.2 Compiler tools (gcc, LLVM)
2.3 Performance analysis tools (perf, Oprofile, valgrind)

3. Open Source Hardware
3.1 Arduino
3.2 Raspberry Pi/Banana Pi
3.3 RISC-V

4.  Open-source Operating Systems
4.1 Linux kernel
4.2 Linux application development
4.3 Android
4.4 Real-time OS
4.5 ARM mbed
5. Open-Source Virtualization Software
5.1 KVM
5.2 QEMU
5.3 Docker

6.  Network Services and Security
6.1 HTTP servers
6.2 WebKit
6.3 OpenSSL
6.4 OpenStack

7. Software Defined Network
7.1 OpenFlow
7.2 Network Function Virtualization
7.3 Software Defined Storage

8. Distributed Systems
8.1 Apache Hadoop and MapReduce
8.2 Apache Spark
8.3  Apache Kafka

9. Machine Learning
9.1 Support Vector Machine
9.2 Caffe Deep Neural Network
9.3 Apache Mahout

10. Project Presentation and Demo
成果發表會

(註一) ARM mbed OS, https://www.mbed.com/en/development/software/mbed-os/
(註二) Apache Hadoop Homepage, https://hadoop.apache.org/

沒有留言:

張貼留言