--- title: 2016q1 Homework #5 toc: no ... 預期目標 ------------ * 培養團隊合作默契 * 強化表達能力 * 準備日後可用於研究所推薦甄試和申請工程師職務用途的技術報告 注意須知 -------- * 自 Homework 5 之後,都是分組進行 * 在每次 checkpoint 日的 11:59AM 前,上傳一份時間在 40 分鐘內的錄影,至少涵蓋以下: - 探討背景知識 - 開發進度 - 面臨的問題 - 接下來預計導入的解決方案 * 技術報告的影片經過剪接編輯後,上傳到 YouTube,設定存取權限為「公開」 - 示範: [GUTS channel](https://www.youtube.com/channel/UCIm-u7l65hp5jboSJrB7U5w/videos) - 在共筆中清楚標注技術報告的 YouTube 連結 * 本次作業對應的 checkpoint 為 4 月 26 日 * 開發過程請詳實更新於[分組共筆](https://embedded2016.hackpad.com/2016-c9i9qW6eGpb)中 * **不需要**準備投影片,我們只要詳實清楚的文字 (更新於各組的共筆)、圖表,以及程式碼 (語文能力是本課程的要求項目之一) * 各組預期目標請見下方各節 ## server-framework - 彙整 [2016q1 Homework #3](/embedded/2016q1h3) 的開發成果,詳實分析 server-framework 的架構、系統設計,效能評估,以及效能改進方案 - 說明 async, reactor, protocol-server 彼此之間的關聯 - 探討 epoll, pipe, signals 等系統呼叫,以及 server-framework 如何使用 - 多執行緒設計的議題 - 分析 HTTP request 和 web server 的行為 - 實做與分析 lock-less thread pool - 提出效能分析 (含 HTTP 1.1 Keep-Alive) 以及改善方案 - 需要透過 gnuplot 建立圖表 ## epoll experiments - 研讀 [Benchmarking libevent against libev](http://libev.schmorp.de/bench.html) 和 [Epoll evolving](https://lwn.net/Articles/633422/) - 針對 [libevent](http://libevent.org/) 支援的 POSIX select, poll, epoll 設計效能分析的實驗,並且製作效能分析圖表 * 類似 [no timeouts, 100 and 1000 active clients](http://libev.schmorp.de/dat1.t0.png) * 涵蓋 no timeouts / idle timeouts, 100 and 1000 active clients - 需要解讀數據,以及思考如何進一步提昇效能 ## concurrent B+ tree - 在 GitHub 上,fork [bplus-tree](https://github.com/embedded2016/bplus-tree),研究 [B+ tree](https://en.wikipedia.org/wiki/B%2B_tree) 的實做並解釋其原理 - 驗證 bplus-tree 在各式條件的效能,包含單一執行緒和多執行緒讀寫 * 執行 `./test/bench-multithread-get` - 移植 [2016q1 Homework #1](/embedded/2016q1h1) 的電話簿程式到 `test/` 目錄 * 將 [phonebook/dictionary](https://github.com/embedded2016/phonebook/tree/master/dictionary) 的字典檔案,事先用 `sort -R` 亂數排列 * 設計能夠重複執行的效能分析工具,針對不同的字典排列作為輸入,分析 B+ tree 處理效能 - 比照 [2016q1 Homework #1](/embedded/2016q1h1) 的要求,研究插入、查詢、刪除的效能表現 (含 cache miss),並提出解釋 - 透過 gnuplot 視覺化相關的數據 - 提出改善效能的方法並且著手實做 ## Enhance raytracing program - 彙整 [2016q1 Homework #2(A)](http://wiki.csie.ncku.edu.tw/embedded/2016q1h2) 的開發成果,分析各項效能改善實驗的具體成效 (個別 + 綜合) - 解釋多執行緒程式設計對光線追蹤的影響,需要比較不同的切割方式、執行緒數量的影響 - 使用 OpenMP, SIMD 進一步改善程式效率 - 解讀數據,以及思考如何進一步提昇效能 ## 2016q1 Week #2 試題 - 解答 [2016 年春季班期初基本能力測驗試題](/embedded/2016q1w2) 的以下題目: * 第 9 題 (implementing counting semaphore) * 第 11 題 (bit-wise operator) * 第 13 題 (cache) * 第 15 題 (ARM operation mode) * 第 18 題 (branch predictor) - 需要提供合乎 C99 規範的 C 程式,並且提出驗證正確性和對應效能的機制 - 需要提出必要的解釋 ## web server with CGI - 在 GitHub fork [web-server-cgi](https://github.com/embedded2016/web-server-cgi) - 編譯和測試 [web-server-cgi](https://github.com/embedded2016/web-server-cgi) ``` $ make $ cd bin $ ./cgi_server_test ``` * 然後用瀏覽器開啟 `http://localhost:8080/`,如果不能正常瀏覽網頁,則重複執行 `./cgi_server_test` - 找出 cgi_server_test 發生 Segmentation Fault 的原因並修正 - 指出 [web-server-cgi](https://github.com/embedded2016/web-server-cgi) 實做上的缺陷、可改進之處 ## mini-arm-os - 需求如同 [2015q3 Homework #8](/embedded/2015q3h8),彙整之前學生的成果,整理相關程式碼 - 在 [mini-arm-os](https://github.com/embedded2015/mini-arm-os) 的 07-Threads (不要增加新的目錄!) 基礎上,實做 shell, priority-scheduling, file system * 可參考 tony0620emma (莊彥宣) 的程式碼與共筆 - 需要解釋為何程式碼得以運作,以及闡述整合過程中遇到的困難