Try   HackMD

2025q1 Homework1 (ideas)

contributed by < BennyWang1007 >

作業書寫規範:

  • 無論標題和內文中,中文和英文字元之間要有空白字元 (對排版和文字搜尋有利)
  • 文字訊息 (尤其是程式執行結果) 請避免用圖片來表示,否則不好搜尋和分類
  • 共筆書寫請考慮到日後協作,避免過多的個人色彩,用詞儘量中性
  • 不要在筆記內加入 [TOC] : 筆記左上方已有 Table of Contents (TOC) 功能,不需要畫蛇添足
  • 不要變更預設的 CSS 也不要加入任何佈景主題: 這是「開發紀錄」,用於評分和接受同儕的檢閱
  • 在筆記中貼入程式碼時,避免非必要的行號,也就是該手動將 c=cpp= 變更為 ccpp。行號只在後續討論明確需要行號時,才要出現,否則維持精簡的展現。可留意「你所不知道的 C 語言: linked list 和非連續記憶體」裡頭程式碼展現的方式
  • HackMD 不是讓你張貼完整程式碼的地方,GitHub 才是!因此你在開發紀錄只該列出關鍵程式碼 (善用 diff 標示),可附上對應 GitHub commit 的超連結,列出程式碼是為了「檢討」和「便於他人參與討論」
  • 留意科技詞彙的使用,請參見「資訊科技詞彙翻譯」及「詞彙對照表
  • 不要濫用 :::info, :::success, :::warning 等標示,儘量用清晰的文字書寫。:::danger 則僅限授課教師作為批注使用
  • 避免過多的中英文混用,已有明確翻譯詞彙者,例如「鏈結串列」(linked list) 和「佇列」(queue),就使用該中文詞彙,英文則留給變數名稱、人名,或者缺乏通用翻譯詞彙的場景
  • 在中文敘述中,使用全形標點符號,例如該用「,」,而非 ","。注意書名號的使用,即 ,非「小於」和「大於」符號
  • 避免使用不必要的 emoji 字元

ideas

還政於民的 sched_ext 及機器學習如何幫助 CPU 排程: vax-r

HackMD: 開發紀錄
YouTube: Video

  1. sched-ext 有類似 VFS 的界面,可自定義擴展 BPF 排程器
  2. 要素:
    • 客製化不同的排程,像是影片所述能將特定工作(如原神)的優先級提高。
    • 提昇排程策略的速度
    • 排程效率:可以快訴修改部署,錯誤則會roll-back回去。
  3. 實做使用編譯kernel(CPU-bound) + fio disk I/O tasks(I/O-bound)

問題:

  1. 大量的 CPU-bound + I/O-bound tasks 是否能真正的模擬現實情境,如 machine learning tasks 會先有大量的I/O-bound tasks 才接著 CPU-bound tasks。有測試全都 CPU/IO-bound的情景嗎?
  2. 我不懂最後學長提問的:I/O-bound 會影響 CPU-bound 的問題,在現實環境下 I/O-bound 本來就會佔用一些 CPU 資源,想請此問題對實驗有造成什麼影響?
  3. synchronous I/O 和 async I/O 在此實驗有可能有什麼影響? Tasks的權重不好預估?

EEVDF 相較於 CFS 的量化比較 : ShawnXuanc

HackMD: 開發紀錄
YouTube: Video

  1. CFS 能"公平的"(藉由權重)分配不同 process 的 CPU 時間
  2. Virtual runtime
  3. EEVDF 能藉由 Eligible time 以及 deadline 來進行排程,選擇執行的程序。
  4. 結果表明,EEVDF 在較高的負載下,其 wake-up latency 顯著的比 CFS 低,最大延遲 EEVDF 也明顯的比 CFS 還要短。

問題:

  1. 請問為什麼影片中大量提及的 schedgraph 會發音成 [sync-graph]? 是特殊套件的專屬念法嗎?
  2. 比較結果可發現 EEVDF 在 context switch 上更頻繁?能造成 wake-up latency 顯著提升,但未必都是好事,或許能讓排程器動態的決定排程頻率?

開發具體而微的 Linux 檔案系統 : HotMercury, jason50123

HackMD: 開發紀錄
YouTube: Video

  1. 此專題將 simplefs 移植到 v6.8 版 kernel
  2. 含 journel 功能

因為在大三上的作業系統課程中,我們也有嘗試寫過簡單的檔案系統,有以下問題想問:

  1. 我認為執行 dd if=/dev/zero... 命令時發生的問題有些怪異,在 alloc raw block 的時候理應會順帶將指標存入 extend block,這之中一定有嚴重的實現(implementation)錯誤。
  2. 中間提到的 remove file 的操作,為什麼原本的實作會需要將所有檔案向前移?像常見的檔案系統一樣,使用 bitmap 有什麼阻礙嗎?
  3. 關於 journel 防止 crash 的機制,是否能考慮將每一步操作都寫入一個日誌檔案,等日誌檔案完成寫入後才開始寫入資料、移動指標等,並在每次fs啟動時先檢查日誌的尾部操作是否完成。若日誌寫到一半斷電也不會影響原先的檔案系統。
  4. 在各檔案系統都很小的情況下,請問 simplefs 相較於常見的 ext4、FAT32、NTSF 等檔案系統有什麼關鍵的優勢嗎?(經查詢 kernel module 大小 ls -lh /lib/modules/$(uname -r)/kernel/fs/,例如 exfat 僅佔 56 KB ,而最小的更僅有 8 KB)

運用並行處理來強化網站資料存取的效率 : yeh-sudo

HackMD: 開發紀錄
YouTube: Video

  1. RCU 允許多個 reader 與一個 writer 讀取與更新資料的同步機制

問題

  1. 影片中提及的 lock-free programming 為何?參考 此筆記 後,與傳統的 atomic 實作有何區別?
  2. 簡單的看名稱猜測不同的 RCU,如 Memory-barrier-based 與 Signal-based RCU,和 Linux kernel 的 read/write-lock 真的有顯著的效能差異嗎?
  3. 為何 QSBR 的性能分布會很大?

建構 RISC-V 相容處理器並運作 Linux 核心 : millaker

HackMD: 開發紀錄
YouTube: Video

  1. OpenSBI 是一個 RISC-V runtime

思考:

  1. 這份專題已經遠超我的知識範圍,從 loader 之後都聽不懂,未來需要多補足這方面的知識。

問題:

  1. 與其在不支援 FPU instructions 的處理器上模擬 FPU,如果直接將浮點運算的程式碼轉成整形會有很大的衝擊、影響嗎?

打造具備網路連線的精簡虛擬機器 : jimmylu890303

HackMD: 開發紀錄
YouTube: Video

  1. 虛擬化技術分為:
    1. System VM:包含 CPU, RAM 等周邊裝置,如 VMWare, Virtual-Box
    2. Process VM:提供虛擬化環境給 process,如 JVM。
  2. KVM 是 Linux 核心中的虛擬化模組,讓核心變成虛擬機器管理程式(Hypervisor),並提供API供 User space 呼叫。

問題:

  1. 為何 KMV 會以 open, close 等檔案 system call 進行操作,而不是以 kernel module 或執行檔的身分存在?
  2. 回顧聊天室,為何 Type II hypervisor 有機會比 Type I 快,在系統呼叫與模擬上的 overhead 應該不小?
  3. 為什麼 KVM 本身不實現網路功能?是希望使用者自己擴展嗎?