盧俊銘

@jimmylu0303

Joined on Jul 4, 2023

  • [x] TODO: 研讀 KVM: Linux 虛擬化基礎建設, 打造以 KVM 為基礎的精簡虛擬機器管理程式, 2022 年報告 和 2023 年報告,以理解 KVM 和 VirtIO 原理,針對電腦網路和 2D 裝置模擬提出方案 [x] TODO: 將 semu 的部分 VirtIO 成果整合到 kvm-hostsemu 已有 virtio-net 和 virtio-gpu,而這些成果若可整合到系統模擬效率更高的 kvm-host,可顯著提高 Linux 系統模擬的可用性實作 virtio-net 任務簡述 在這次專題中,將介紹 KVM 運作原理,並展示一個以 KVM 為基礎的精簡虛擬機器管理程式實作( kvm-host ),它能在 x86-64 及 arm64 平台上運作,提供了基本的 VirtIO 儲存裝置、 serial 裝置 (用來作為 console) ,並且能成功在上面執行 Linux 系統,而目標是在該虛擬機器上實作 Virtio-net 裝置。 KVM KVM (Kernel-based Virtual Machine) 是 Linux 核心提供的系統虛擬機器基礎建設,它是個 Linux 核心模組,能讓 Linux 系統成為一個 Type-2 Hypervisor 。KVM 透過硬體虛擬化支援 (Intel VT, AMD-V) 來提供 CPU 和記憶體虛擬化功能。藉由硬體虛擬化技術,客體作業系統 (Guest OS) 不必經由軟體模擬或轉換指令,即可高效率且安全地直接執行在硬體上。使用者空間的管理程式只要負責模擬周邊裝置、呼叫 KVM API ,即可建立並高效率地執行虛擬機器。 KVM 提供 API 供 User space 呼叫 :
     Like  Bookmark
  • contributed by < jimmylu890303 > 閱讀〈因為自動飲料機而延畢的那一年〉的啟發 閱讀心得 人生就是一連串的選擇。每一次的選擇都像是一場賭注,而在每個選擇中,應當付出百分之百的努力,才能取得成功。如果因為害怕失敗而不敢踏出第一步,就永遠無法品嘗成功的滋味。即使遇到失敗,也能從中獲得寶貴的經驗。最重要的是,在過程中能夠領悟到其中的意義。 人不付出犧牲,就得不到任何回報。如果要得到什麼,就必須付出同等的代價,這就是鍊金術的基本原則,等價交換。當時我們深信著,這就是這世界的真理。------《鋼之鍊金術師》 與作者一樣,我們都是平凡的人,並非天才。然而,與我最大的區別在於他敢於付出。他為了一個突發奇想的想法,願意花費長達14個月的時間去實現它。雖然我們可能不懂硬體也不懂機械,但只要我們願意坦誠面對困難並積極解決,就能克服一切障礙。因此,我認為持之以恆、堅持不懈的心態是最重要的。只要擁有這樣的心態,所有的困難都可以迎刃而解。
     Like  Bookmark
  • contributed by < jimmylu890303> 第一周測驗題 題目 測驗一 程式運作原理 測驗是參考 Optimized QuickSort — C Implementation (Non-Recursive) ,實作非遞迴 (non-recursive; iterative) 的快速排序法。 再使用 list_add
     Like  Bookmark
  • 自我檢查清單 [x] 研讀前述 ==Linux 效能分析== 描述,在自己的實體電腦運作 GNU/Linux,做好必要的設定和準備工作 $\to$ 從中也該理解為何不希望在虛擬機器中進行實驗; [x] 閱讀〈Linux 核心模組運作原理〉並對照 Linux 核心原始程式碼 (v6.1+),解釋 insmod 後,Linux 核心模組的符號 (symbol) 如何被 Linux 核心找到 (使用 List API)、MODULE_LICENSE 巨集指定的授權條款又對核心有什麼影響 (GPL 與否對於可用的符號列表有關),以及藉由 strace 追蹤 Linux 核心的掛載,涉及哪些系統呼叫和子系統?〈Linux 核心模組運作原理〉列出的程式碼較舊,歡迎編輯頁面,更新到 Linux v6.1 以上。 [ ] 閱讀《The Linux Kernel Module Programming Guide》(LKMPG) 並解釋 simrupt 程式碼裡頭的 mutex lock 的使用方式,並探討能否改寫為 lock-free;參照 2021 年的筆記。歡迎貢獻 LKMPG! $\to$ 搭配閱讀〈並行和多執行緒程式設計〉 [ ] 探討 Timsort, Pattern Defeating Quicksort (pdqsort) 及 Linux 核心 lib/sort.c 在排序過程中的平均比較次數,並提供對應的數學證明;對照 fluxsort 和 crumsort 的分析和效能評比方式 [ ] 研讀 CMWQ (Concurrency Managed Workqueue) 文件,對照 simrupt 專案的執行表現,留意到 worker-pools 類型可指定 "Bound" 來分配及限制特定 worker 執行於指定的 CPU,Linux 核心如何做到?CMWQ 關聯的 worker thread 又如何與 CPU 排程器互動?搭配閱讀《Demystifying the Linux CPU Scheduler》 [ ] 解釋 xoroshiro128+ 的原理 (對照〈Scrambled Linear Pseudorandom Number Generators〉論文),並利用 ksort 提供的 xoro 核心模組,比較 Linux 核心內建的 /dev/random 及 /dev/urandom 的速度,說明 xoroshiro128+ 是否有速度的優勢?其弱點又是什麼?$\to$ 搭配閱讀: 不亂的「亂數」 [ ] 解釋 ksort 如何運用 CMWQ 達到並行的排序;
     Like  Bookmark
  • contributed by < jimmylu890303> 第三週測驗題 題目 測驗一 版本一 #include <math.h> int i_sqrt(int N) {
     Like  Bookmark
  • contributed by < jimmylu890303> Reviewed by jujuegg - 建議統一將函式或巨集的名稱加上 `` - 英文與中文之間需有空格 - 感覺可以加入 graphviz 來更詳細的解釋程式碼 你的洞見呢?與其談「心法」,不如設想「如果我是你」,我會怎麼做,示範一次給同學看,而且檢討自己哪裡沒做好,從而呼應原本學員的不足處。 清楚標示學員的 git commits 和敘述的不足處,予以檢討。
     Like  Bookmark