分享到plurk 分享到twitter 分享到facebook

版本 9b7e333d85e8938d2fea8c879391c1a45bbafc34

yeh-sudo (葉承憲)

簡介

  • 國立成功大學 資訊工程學系 113 級 (2020 ~ 2024)

  • GitHub: yeh-sudo

  • HackMD: yeh-sudo

Linux 核心和相關專案貢獻

其他專案貢獻

我覺得我還不只能幫專案改錯字或是修正文法錯誤而已,我還能做得更好,還可以投入其他專案,並改進其中的不足之處。

評分: 5 分。

2024 Linux 核心設計 春季班 自我評量

作業/隨堂測驗

每一次指派作業,我都盡力去完成作業的指定要求,可惜有些作業沒辦法全部完成,這是我的不足之處,還有進步的空間,所以我給我自己這個分數。

評分: 9 分。

期末專題

很驚訝能在期末發表我的專題報告,我覺得我只是做好我應該做的事情,我們最在乎的事情是效能,透過 CPU affinity 與 urcu,在我能力所及範圍內將效能往上提升,並進行測試,除了 mt-redis 這個專案,之後也會嘗試貢獻 ValKey 或是 Dragonfly DB 等相似的 in-memory storage ,雖然我的專題有很多地方可以改進,像是測試方法、 mt-redis 的 tail latency 等,還有報告時的表達能力,都有待加強,不過也讓我有了這次寶貴的經驗,知道哪裡可以改進,讓我往後找工作面試時可以更流暢的表達與介紹自己。

評分: 9 分。

與授課教師的互動

在學期初,我很怕被老師點到名回答問題,因為怕自己回答不出來,在 3/12 進行課堂問答時,我的心情是緊張的,但是在 5/3 一對一討論時,我深深意識到自己的不足之處,經過研究我的期末專題,了解完期末專題的程式碼和架構後,我發現我在 6/13 討論期末專題時,不太會緊張了,反而能回答老師的問題,讓我了解到,只要了解自己所做的東西或是某一個概念,就可以克服緊張的感覺,在面試時也是如此,題目與原理都懂了,就可以自信的回答出來,不會被無知的情緒綁架,在 6/27 課堂上,我更是主動提出自己的疑問,因為想要讓自己的專題更上層樓的求知慾已經比我的緊張感還要大了,經過這學期,我意識到自己的不足,也逐漸成長且理解要如何準備面試,因為在每次問答時我都當作面試來看待,希望我能靠著這份寶貴的經驗繼續成長。

一對一討論紀錄:

老師希望我們藉由這堂課,學到如何舉一反三,在國高中時,可能不太需要這個能力,但是在大學研究所,要學的東西很多,如果沒有辦法把學過的知識拼湊在一起,就會陷入知識焦慮,不管怎樣都學不完,欠下許多技術債,但是如果可以舉一反三,不管遇到什麼困難或是問題,都可以用學過的東西推理出來,不會因為問題沒有遇過就沒辦法解決。

先討論為什麼要有 rwlock ,讓多個 reader 讀取只是表面上的原因,真正的原因是因為 mutex lock 需要的成本太大,以及要應對不同的使用情境,先討論 wild lock ,每個 thread 或是 process 會有競爭的關係,有可能一個 thread 有資格可以拿到鎖,但是拿不到,後來出現 ticket spinlock ,但是因為需要去檢查 ticket ,更新 ticket 之後需要進行廣播,更新每個 CPU 的 ticket ,但是廣播這個操作,會需要很高的成本,可能會有數百至幾千個 cycle ,導致 ticket 的成本過高,所以發展出 MCS spinlock ,在教科書上的 mutex lock 看起來很簡單,很合理,但是實作起來成本太高,面對資料庫這種讀取頻繁的情境,顯然對於效能有很大的傷害,所以才發展出特化的 mutex lock 運用 fast path 、 mid path 以及 slow path ,甚至是 rwlock 或是 RCU 。

評分: 10 分。

所見所聞所感

閱讀〈因為自動飲料機而延畢的那一年〉,「這個領域實在是太過廣博,現實如同真理般,給予和狂妄自負的傢伙相對應的絕望,對於沒有準備好的人毫不留情。我覺得自己像無頭蒼蠅一樣亂撞,做什麼都徒勞無功。」在學習課程教材時,常常讓我有一種無力感,一方面是基礎不夠扎實,經過大學四年,我連最基本的 C 語言都沒有完全掌握,基本的語言特性與規格都沒有完全掌握了,更不用說編譯器的行為,如何最佳化等等議題,從第一週的指標與鏈結串列,到 bitwise 操作以及編譯器,每一個議題都可以再深深的往下挖,可以有許多延伸資料,有許多相關的議題可以討論,但時間總是不夠,看完一個錄影三個小時,就要花上可能一天來理解教材內容,教材內又還會延伸往另一個教材或是連結,怎麼學都學不完,看著教材內容發呆,想著我還要多久才能精通這些東西,讓自己寫出來的東西是可以被這個世界接受的,是安全、優美且可以重複被利用的,另外,看看別人寫的作業,跟我寫的作業,我努力絞盡腦汁想要做出自己想要的成果,或是想要用新的方法測試,但總是有同學可以想到更特別且合理的方法,觀摩同學的作業,也讓我體會到自身的不足,雖然很無力很累,但我開始學著注意細節,注意讓程式碼更安全,這堂課學的東西,可能比我之前每個學期學的還要多。 學期末這門課結束時,是一個全新的開始,因為 Linux 核心每天都在變化,每天都有許多貢獻者貢獻程式碼,這堂課指引我們一個明確探討 Linux 核心與其他系統軟體的方向,這學期結束,我想是時間來好好複習計算機組織、作業系統與編譯器等等課程,到時候再回頭看這門課,一定會有不一樣的感受,搞不好能有機會貢獻程式碼到 Linux 核心。

評分: 9 分。

自我評量 (1 ~ 10)

方案 B: 1 + floor(GEOMEAN) = 9