---
# System prepended metadata

title: 2024q1 Homework5 (assessment)

---

# 2024q1 Homework5 (assessment)
contributed by < [`Ken-LuWeiRu`](https://github.com/Ken-LuWeiRu) >

## [〈因為自動飲料機而延畢的那一年〉](https://blog.opasschang.com/the-story-of-auto-beverage-machine-1/)的啟發
我很佩服學長的毅力。我在大學主修物理，暑假製作變壓器時幾乎要發瘋。進入資工領域後，我首次體會到「實做」的重要性：所有理論幾乎都可以在電腦上實作和測試。在碩二上學期老師的面試課程後，我下定決心選修 Linux 核心課程。 Lab-0 是我首次撰寫 C 語言的作業，我不斷勉勵自己不要放棄。

## 研讀第 1 到第 6 週「課程教材」和 CS:APP 3/e（至少到第二章）
我已大致翻閱一遍教材，計劃之後再進行深入學習。

## [簡述你想投入的專案](https://hackmd.io/@sysprog/BySwQtt06)
2004 年，[cgroup v1](https://www.kernel.org/doc/Documentation/cgroup-v1/) 主要聚焦於提供靈活的資源管理機制，使系統管理員能夠在不同進程之間限制、分配和優先處理系統資源。cgroup v1 通過多個子系統來管理不同類型的資源，如 CPU、記憶體和 I/O，但這些子系統的獨立性導致了管理上的複雜性。2015 年，[cgroup v2](https://docs.kernel.org/admin-guide/cgroup-v2.html) 提供了一個統一的、層次化的控制界面，使資源管理更為簡化和標準化。v2 版本提高了資源分配的效率，減少了配置的複雜性，並修正了 v1 中的一些不一致性和功能限制。

根據我瀏覽的文獻，現有研究主要集中在提高 cgroup 在各種設定下的性能，特別是在容器化和虛擬化環境中。文獻中也提到，[cgroup 的資源隔離機制可被繞過](https://dl.acm.org/doi/10.1145/3319535.3354227)，導致惡意容器能消耗遠超限制的資源，影響同一主機上其他容器的性能和安全性。基於此，我認為後續研究可以從以下三個方向進行：

1. 跨平台與跨資源的優化：探索 cgroup 在不同運算環境（如雲計算和邊緣計算）中的應用，特別是如何在這些環境下提供跨平台和跨資源類型的資源管理和優化。
2. 更細緻的資源控制與自動化：發展更精細的資源控制策略和自動化工具，以更好地管理和預測資源需求，特別是在大規模系統中。
3. 安全機制的加強：考慮到安全漏洞的影響，加強 cgroup 的安全機制以防止資源竊取和服務拒絕攻擊，將是另一個重要的研究方向。

後續我有興趣的專案依序如下，主要是考慮到我碩二了，希望可以找到一個有助於就業（在台南）且待遇優渥的主題：

1. **虛擬化環境和容器技術中的應用**：探索新的隔離和資源管理機制，提高容器和虛擬機的性能和安全性。此外，研究如何在保持低延遲的同時，增強虛擬化技術的可擴展性和多租戶能力。
2. **Linux 系統虛擬機器開發和改進**：進一步減少虛擬機器的資源開銷，提高虛擬機器的啟動速度和運行效率。此外，開發新的資源分配策略，以更好地支持資源密集型應用在虛擬機器上的運行。
3. **高效網頁伺服器**：根據 [Red Hat 客戶門戶網站](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/resource_management_guide/ch01)與 [LiteSpeed Web Server 的官方文件](https://docs.litespeedtech.com/lsws/cgroups/)中，cgroups 在高效網頁伺服器的應用主要涉及資源分配和限制、性能監控、以及安全性和隔離。後續的研究可以包括以下主題：
    - **自動化資源管理**：隨著機器學習和人工智能技術的進步，未來可以探索自動化的資源管理策略，根據實時數據動態調整資源分配，以最大化性能和資源效率。
    - **更細粒度的資源控制**：研究更細粒度的資源控制機制，如針對特定類型的請求或特定時段的資源優先級調整，以應對高峰時段或重要任務的需求。
    - **擴展到新的資源類型**：目前 cgroup 主要聚焦於 CPU、記憶體和磁盤 I/O，未來的研究可以擴展到更多資源類型，如 GPU 資源管理，特別是對於支持大數據處理和機器學習的 Web 應用。
    - **改善多租戶資源隔離**：隨著容器技術和雲服務的發展，如何更有效地隔離多租戶環境中的資源，防止跨租戶攻擊和資源竊取，將是一個重要的研究方向。
    - **整合和相容性**：研究如何更好地將 cgroup 技術與現有的 Web 服務器和管理工具整合，提高其易用性和相容性，以便更廣泛地應用於不同的服務器和操作系統平台。
4. **kHTTPd 改進**：研究如何優化 kHTTPd，以提升其性能和安全性。這可能包括改善其對現代 Web 標準的支持，以及增強其對異常流量和安全威脅的防護能力。
5. **Linux 排程器研究**：深入探討 Linux 排程器的內部機制，尋找提高其效率和公平性的方法。這可能包括開發新的排程演算法或改進現有演算法，以更好地支持多核心和多執行緒處理。
6. **打造 Linux 虛擬攝影機裝置驅動程式**：由於我目前從事人臉識別的研究，我希望能夠探索與影像相關的技術。開發一個 Linux 虛擬攝影機裝置驅動程式，這將允許我們模擬攝影機輸入，用於測試和開發各種影像處理演算法。



ref:
[2015, Effective Runtime Resource Management Using Linux Control Groups with the BarbequeRTRM Framework](https://dl.acm.org/doi/10.1145/2658990)
[2015, Cgroup++: Enhancing I/O Resource Management of Linux Cgroup on NUMA Systems with NVMe SSDs](http://dx.doi.org/10.1145/2830894.2830901)
[2016, Improving I/O Resource Sharing of Linux Cgroup for NVMe SSDs on Multi-core Systems](https://www.usenix.org/conference/hotstorage16/workshop-program/presentation/ahn)
[2017, Taming memory related performance pitfalls in linux Cgroups](https://doi.org/10.1109/ICCNC.2017.7876184)
[2018, Reducing Memory Interference Latency of Safety-Critical Applications via Memory Request Throttling and Linux Cgroup](https://doi.org/10.1109/SOCC.2018.8618555)
[2019, Houdini's Escape: Breaking the Resource Rein of Linux Control Groups](https://dl.acm.org/doi/10.1145/3319535.3354227)
[2023, LXC Container Between cgroups v1 and v2](https://www.net.in.tum.de/fileadmin/TUM/NET/NET-2023-11-1/NET-2023-11-1_03.pdf)



---

select(2): I/O multiplexing
single-threaded web server
https://hackmd.io/@sysprog/linux-io-model
blocking I/O + select ＝> 短時間內處理多個連線要求
TODO: lab0-c : 如果改用多執行緒，能否提升同時處理連線的數量？
bitwise operation
IEEE 754, assume float is 32-bit width
```c
float float_mul16(float x)
{
    // using bitwise operation; no mul/div operator
    uint32_t bits = *((uint32_t*) &x);
    
    bits += 4 << 23;
    float result = *((float*)&bits); 
             
    return result;
}
```
TODO: 將 16 換成 power of 2，在什麼範圍無法得到預期的結果？

EWMA: 第三週測驗題 Exponentially Weighted Moving Average (EWMA)

TODO: 重作 Homework4 (quiz3+quiz4)，彙整其他學員的成果，強調 Linux 核心的應用案例 (要說明場景、原理，和對應程式碼的行為)