--- title: RealBigMickey (石維廉) categories: User ... # 簡介 * 國立成功大學 資訊工程學系 116 級 (2023 ~ 2027) * GitHub: [`RealBigMickey`](https://github.com/RealBigMickey) * HackMD: [`BigMickey`](https://hackmd.io/@BigMickeya) * LinkedIn: [`William Stevens`](https://www.linkedin.com/in/william-stevens-twnz/) # 2025 Linux 核心設計 春季班 自我評量 ## 成果發表和貢獻 `我會給自己 6 分` 成果發表與貢獻,是我這學期最大的遺憾。雖然沒能提交 patch,也未在 open source 社群留下痕跡,但這不代表我毫無貢獻。 - 本學期的期末專案可視為我去年打造之專案的「重生」。在正式開始前,我花了一週時間系統性檢討過去設計錯誤,撰寫成一份 [HackMD 紀錄](https://hackmd.io/a8-1pGhKRn2ZxPF8Vout7Q),為新版 DISFS 架構打下基礎,整合 PostgreSQL 與 Discord API,善用 SQL 、write-back local cache、stateless HTTP 等設計 - 作業三 kxo 中,將 AI 與繪圖任務分離於核心與使用者曾,使用 `workqueue` 達成並行執行,同步進行顯著降低 keyboard handler 對 rendering 的阻塞,提升互動性 - 一對一面談中,實作無不依賴 libc 與 FPU 計算 `e^x - 1` 的單精度 float 計算,自己爬文、研究怎麼實作,從 Linux kernel 使用定點數為靈感,利用泰勒展開與 Minimax polynomial 達成接近原生 `expm1f()` 的準確度(最大誤差約 0.05 %),並以 benchmark 驗證精度與效能,詳細紀錄見 [HackMD](https://hackmd.io/@BigMickey/LKD2025_one_on_one) - 《Demystifying the Linux CPU Scheduler》其中第七章 30 頁的內容進行詳細校閱,包括文法錯誤、語病與句構重組等。雖然後來老師表示這些修改大多已在我提出前修正,但我仍相信其中有不少內容在教材更新過程中可能被遺漏。我仍認為這段努力具有實質貢獻價值,特別是在理解與釐清內容上。 (以下與評分項目無關) 我確實錯過學期間對外貢獻的機會,學期一開始的我沒把「短期內做出貢獻」視為首要目標。比起抓些文法錯誤,我更希望能夠扎實建立起自己的基礎,讓未來的貢獻能夠站得穩、走得遠。與其貿然提交 patch,不如先確認自己真的理解系統的脈絡與設計哲學——會走路之後,再學飛也不遲。 目前我已報名下一屆的「RISC-V 晶心杯」,並正在研究我特別感興趣的領域,藏是 sched_ext 可插拔排程器框架,以及正在發展中的 Linux Switch 2 鍵值切換機制。期末專案中有不少同學提出有趣的問題,像是快取的改進面或是引進 partial read write 等,我積極回應同學們提出的想法與問題,深入研究,目前也正在陸續實作到系統中。 ## 作業/隨堂測驗 `我會給自己 10 分` 第一週開始前就略略看過課程教材,心中抱有期待參加這門課。從第一週起就把自己所有多餘的時間貢獻給 Linux 核心設計,每週平均預計至少30小時做作業或是閱讀教材,除了期中與期末少數幾週外從未鬆懈過。 - [2025q1 Homework1 (lab0)](https://hackmd.io/@BigMickey/linux2025-homework1) - Linux 核心中的鏈結串列、自製亂數產生器、Valgrind 分析記憶體問題 - [2025q1 Homework2 (quiz1+2)](https://hackmd.io/@BigMickey/linux2025-homework2) - 研究並實作 quiz1+2 延伸問題 - [2025q1 Homerwork3 (kxo)](https://hackmd.io/@BigMickey/linux2025-homework3) - 核心與使用者層級分工與通訊、AI 對峙圈圈叉叉、引入 coroutine 與排程器完成多遊戲並行、畫面顯示系統 load 與當下時間 - [2025q1 Homework4 (quiz3+4)](https://hackmd.io/@BigMickey/linux2025-homework4) - 研究並實作 quiz3+4 延伸問題 - [2025q1 Homework5 (assessment)](https://hackmd.io/@BigMickey/linux2024-homework5) - 檢討當前課程進度 其中,作業一是進步空間最大的一份,但因為是第一次嘗試許多從未接觸過的東西,我認為最後做到的成果,沒有對不起當時的努力。後續作業一次比一次進步且漸漸完整,作業三也有受到助教的正面回饋,自己也滿意。最後與老師商量後決定放下 homework6 ,轉而投入開發期末專案。 ## 期末專題 `我會給自己 10 分` - [HackMD 專案報告](https://hackmd.io/@sysprog/BJH6UVXZle) - [GitHub repository](https://github.com/RealBigMickey/DisFS) 這學期我將 2024 年原型「Discord Clouding」徹底重構,打造一個完整的雲端檔案系統 DISFS(DISFS Is a Service File System)。此專案以 Discord 作為儲存後端、FUSE 實作 user-space 檔案系統介面,搭配 Python + PostgreSQL 架設的 stateless HTTP 伺服器,總計實作超過 2000 行程式碼,橫跨 kernel syscall 介接、網路 API 操作與資料庫設計,是目前我技術跨度最大、也最具完整性的系統專案。 DISFS 將 POSIX 操作(如 `open`, `read`, `write`, `mkdir`, `rename` 等)轉換為 HTTP 請求,並將檔案分割為 chunks 上傳至 Discord,後端以 closure table 表示檔案階層結構,支援 O(1) 子樹查詢與快速路徑解析。系統具備登入機制(透過 pseudo-file `.ping/{username}` 實現)、快取設計(local write-back + partial cache)、stateless 傳輸協定(每筆請求含完整參數,如 user_id、path、chunk_index)以及錯誤容忍的上傳下載流程。 **技術亮點與挑戰:** - **平台限制對應設計**: - Discord 附件大小限制(10MiB)→ chunked read/write 實作 - 上傳速度與冷啟延遲 → write-back cache 提高互動性 - 快取設計平衡效能與一致性 → cold path 需數秒、warm path 幾乎即時 - **資料結構選型**: - Closure table 相較 adjacency list 更適合高效率遞迴查詢,便於實作 `rm -r`、`mv`、`ls -R` 等操作,也為垃圾桶與版本控制打下基礎。 - **協定與通訊設計**: - 所有 HTTP request 為 stateless,明確參數化,方便未來擴展為 REST-style API(尚未完全符合 RESTful 定義) - login/auth 透過 shell 命令實作,我稱之「登陸即檔案」,簡潔直觀不需外部介面登入 - **未完成部分與後續規劃**: - 因背景上傳、非同步寫入與 API 限速等特性,尚未完成正式效能 benchmark,但已規劃測試方法,包含 cache-hit/miss 延遲、tree traversal latency、cold vs warm 啟動延遲等。 - chunk 傳輸若改為由 client 直取 Discord attachments,將有效減少 server-side 壓力與提升速度 - 預期將整合登入 session、擴展 partial write 支援、加入使用者 session 與多工處理等功能 這個專案的價值不在於性能極限,而在於從 0 到 1 構築一套具備真實接口與實驗精神的雲端檔案系統。我完整參與了從 kernel FUSE handler、cache policy、user/kernel IPC、後端儲存、資料庫 schema 設計,到網路協定與限制處理等各層面。這份成果也公開發表,並獲得多位同學實測與回饋(weiso131、rota1001、EricccTaiwan 等),簡報與影片亦公開發表。 完成的操作如下: `{ .getattr .readdir .read .mkdir .open .release .create .write .truncate .unlink .rmdir .rename }` 我認為專案算有趣且概念不會很難理解,若有興趣建議看共筆中提供的介紹影片。 ## 與授課教師的互動 `我會給自己 10 分` - 2025-03-04 課堂問答 - 對 Linux 核心做出貢獻時,若找不到 Maintainer 或是 Maintainer 消極,乃至意見與 Maintainer 答不成共識時,該採取的行動。 - 延伸探討如何有效聯繫 Maintainer、無回應時時往上找的流程 - 2025-04-29 課堂問答 - 回頭看作業三 [kxo](https://hackmd.io/@sysprog/linux2025-kxo) 的設計與實作細節 - 探討 user-space 與 kernel-space 溝通之通訊成本、page size 差異與其背後的架構原理。 - NULL == (void *) 0 在核心中如何解讀 - 研究為何不同架構的 page size 不盡相同的原因 - 2025-05-15 一對一面談 - 約 3 小時,確切感覺到老師的真誠與熱情 - 被點出自己最大的問題,總是在尋找捷徑,從而略過細節而不扎實 - 被問了四個問題,後續花一週認真研究+紀錄,其中由 `e^x - 1 no FPU no libc` 實做最為印象深刻,有挑戰且有趣的實做+理論題,詳細過程: [2025 Linux 核心設計 一對一面談](https://hackmd.io/@BigMickey/LKD2025_one_on_one) - 上述成果在 Github 第一週獲得了 6 個 git clone - 2025-05-27 課後一對一面談 - 約 1 小時 - 談期末專案方向 - review 一對一做出來的研究成果,執行時間結果圖表與老師預期不同 - 2025-06-10 課後一對一面談 - 約 1 小時多 - 檢討 DISFS 前身作品 Discord Clouding 種種問題 - 談期末專案實做的可行性 - 給予更多意見與鼓勵 - 學期間不間斷的與助教保持聯繫,討論每次作業與期末專案,獲得許多即時的回饋 ## 所見所聞所感 `我會給自己 10 分` 起初在選這堂課時其實是猶豫不決的。 我不像系上那些 coding 強者,早早就踏入資訊領域,一切是從大學才開始的,一步一腳印、腳踏實地學習。當時大二剛修完資料結構,種種核心課程都還沒修,`e.g. 機率與統計、計算機組織、作業系統、演算法`等等,連 Markdown 都不會,不禁懷疑自己會不會還不夠資格。 學期結束回頭看,確實是段吃力的旅程。 面對自己的不足,才發現原來自己如此渺小。當初為了學習而退掉必修,諷刺的是,最大的挑戰也來自「學習」本身。每次面對的是全新的概念、新的工具,新的系統,被炸的體無完膚。但也正因如此,我從起初盲人摸象,到後來逐漸能加快閱讀教材的速度、理解課堂內容,看到自己慢慢有進步,那份成就與喜悅是藏不住的。因為這個莽撞的決定而成長,累積起來的東西不會背叛自己。 與老師的一對一中,也感悟許多,不只是因為講到期末專案,更是些故事像是台文系學生後來去台大資工所,或是 500 萬的 6 頁 pdf 等。當時老師講了一句留下深刻的印象:「我的知識是拿來解決問題的,但有些人的知識只是拿來取得分數的,之後就不再往前走了。」 課堂中另一個讓我印象深刻的是〈自動販賣機而延畢的那一年〉,講述一位交大的學生為了天馬行空而延畢故事,勵志之中也帶著一絲辛酸。我一直很崇拜那些能被熱誠吞噬、為理想燃燒殆盡的人。也在想,有沒有那麼一天,我也能成為那樣的人?星空中不一定會有流星,但如果一直低著頭,就一定看不見。 未來充滿著未知,但這學期的經歷,已深深烙印在我心上。透過數據、論點與邏輯,去解決「真實世界的問題」,這樣的學習過程讓我著迷。接下來的路上,我希望能繼續碰到 Linux,繼續變強!最後,想引用 Jserv 老師在第一堂課說過、我非常喜歡的一句話作結:「就算跌倒,也要抓一把沙。」 ## 自我評量 (1 ~ 10): $GEOMEAN = ( 6 \times 10 \times 10 \times 10 \times 10 )^{1/5} = 9.028804514$ 方案 B :$1 + floor(GEOMEAN) = 1 + 9 = 10$