# Linux 2025 一對一討論 04/17 紀錄 NV Grace Arm CPU / KVM (kernel-based virtual machine) ## Cache Coherence - 什麼是 MESI / MOESI ? - cache coherence protocol 讓多核處理器的 cache 一致 - MESI protocol: - Modified - Exclusive - Shared - Invalid - MESI protocol 的缺點就是每次發送 Probe read 讀到一個狀態為 Modified 的 cacheline 時,就要將資料更新回主記憶體,但將資料寫回主記憶體是非常浪費時間的。 - MOESI protocol: - Owner - 目的是解決要將資料寫回主記憶體的問題 - https://hackmd.io/@qwe661234/r1BDYhVHo ## CPU Pipeline Hazard - Structural hazard - 超過一個指令要存取相同的硬體資源的狀況 - Control hazard - 要做決定時,需要某個結果,但是那個結果並沒有被運算出來 - 通常是branch才會發生,需要知道下一個指令是誰,但還不知道到底要不branch - Data hazard - 需要用到某個資料,但那個資料並沒有被產生 (在那個當下) - https://hackmd.io/@joanne8826/HkT32O85I#4-3%E2%80%934-Data-Hazard-and-forwarding ## DMA (direct memory access) 幾種模式/方向、限制、中斷關聯 ### 存取方向 - Peripheral‑to‑Memory - 由外設讀取資料,寫入記憶體,用於接收資料流(如網卡、介面卡接收) - Memory‑to‑Peripheral - 由記憶體讀取資料,寫入外設,用於傳送資料流(如網卡發送、顯示卡更新) - Memory‑to‑Memory - 記憶體間複製/移動資料,減輕 CPU 大塊記憶體拷貝工作 - Peripheral‑to‑Peripheral - 少見,直接在兩外設間搬資料;某些控制器(例如 Microchip SAM E/S/V 系列)不支援此模式 ### 存取模式 - Burst Mode - 控制器一旦取得總線,就連續傳送整個資料塊,直到完成才讓回 CPU,傳輸效率最高,但會讓 CPU 被鎖住較長時間 - Cycle Stealing Mode - 在每傳送一個資料單位後,立即釋放總線讓 CPU 執行一條指令,再重新請求總線循環往復,使 DMA 與 CPU 工作交錯進行,減少對 CPU 的長時間鎖定 - Transparent Mode - 只有在 CPU 空閒、不使用總線時才執行 DMA 傳輸,對 CPU 幾乎「透明」,但硬體需能偵測 CPU 總線使用狀態,實作較複雜;總體系統效能最佳 ### 存取限制 - 通道數與資源限制 - DMA 控制器內部通道(channel)數量有限,例如 IBM PC 原生 8237 DMA 只有 4 個通道;多通道競爭可能導致排程複雜度提高 - 位址範圍限制 - `dma_attr_addr_lo` 與 `dma_attr_addr_hi` 定義 DMA 可觸及的最低與最高匯流排位址,超出範圍無法存取 - 舊式 8237 DMA 控制器僅能在同一 64 KB 分段內操作,跨段會「回繞」或失敗 - 對齊與邊界限制 - 硬體常要求緩衝區對齊到 4 或 8 位元組邊界,以符合 PCI 或其他總線寬度 - 在 Linux DMA API 中,可指定 dma_attr_seg、dma_attr_burstsizes、頁面邊界(如 4 KB)等限制,確保傳輸片段不跨越不支援的邊界 - DMA 直接存取主記憶體可能使 CPU 快取內容過時,需在傳輸前後由軟體或硬體(如 bus snooping)做快取失效(invalidate)或寫回(flush ### 中斷關聯 - 傳輸完成中斷 - DMA 控制器在完成整個傳輸後會觸發中斷(IRQ),通知 CPU 開啟後續處理(如啟動下一筆傳輸或喚醒等候程序) - 中斷可中斷性 - 標準系統中斷(IRQ)不會中斷正在進行的 DMA 傳輸;這些中斷將保持掛起狀態,待 DMA 完成後才被服務;但若使能非遮蔽中斷(NMI),則可打斷 DMA 操作 - 同步與時序注意事項 - DMA 傳輸通常在匯流排週期邊界觸發,而中斷則在 CPU 指令邊界觸發;軟體中斷處理與 DMA 狀態讀寫必須考慮此差異,避免因操作時機不同而導致資料不一致 ## TODO - 閱讀 [KVM: Linux 虛擬化基礎建設](https://hackmd.io/@sysprog/linux-kvm) 並充分紀錄問題,特別是 arm64 - 目標: 在 Raspberry Pi 4B and/or 5 (NVIDIA Jetson Orin) 上面運作 [kvm-host](https://github.com/sysprog21/kvm-host) (修正中間遇到的問題),允許載入 Linux guest 處理 Arm GIC (generic interrupt controller,注意版本差異), VirtIO, virtio-net 將上述問題紀錄在 [Homework5](https://hackmd.io/@otischung/linux2025-homework5) ## Others RISC-V ? MIPS / Arm / Thumb2 Arm64: multiple load/store instructions => LDMIA (32-bit) simplefs 碩二不需要太執著補完所有欠缺知識,這不現實,也對找工作沒有太多幫助
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up