Sysmem 是一項 FIDL 服務,可分配共用記憶體給 由多個應用程式和硬體區塊使用本文件提供 主要功能,以及其提供給系統的內容。
提振精神
現代系統有特殊硬體區塊,可執行相關作業 儲存的資料包括:
- 使用 GPU 轉譯電腦圖形。
- 使用硬體轉碼器對影片編碼或解碼。
- 使用相機和 DSP 拍攝高畫質相片。
- 使用顯示控制器的疊加功能將圖片合成到螢幕 。
- 使用 TPU 評估類神經網路。
我們通常會想建立管道 硬體區塊以下列舉部分範例:
- 使用硬體轉碼器解碼影片,並將影片合成至螢幕 以及使用者介面上轉譯的內容
- 將類神經網路套用至即時攝影機畫面。
為了有效率地達成此目標,並避免複製內容,駕駛與應用程式都必須同意 格式資料,以及資料在記憶體中的位置。這個 協議允許下一個單元的輸出內容供下一個單元使用。 硬體單元對這類屬性設有嚴格限制, 哪些資料配置能帶來最佳效能。
Sysmem 是一項全域服務,可依據應用程式及 分配緩衝區,確保符合所有限制。如果多種格式 便可根據預期成效選擇其中一種。
Sysmem 緩衝區通常用於代表圖片,Symem 則具有特殊功能 支援協商圖片格式不過,Symem 介面也可以 用於音訊或任何其他類型的資料
在分配緩衝區後,Sysmem 並不會管理資料流。 管道中的應用程式會負責協調 以確保同步處理。
分配程序 (簡易版)
- 參與者則會連線至 fuchsia.sysmem2.Allocator 服務
- 一位參與者 (稱為發起者) 建立初始 緩衝區收集符記。
- 參與者複製符記,並將重複符記傳送給其他參與者 位參與者。
- 這些參與者也能以遞迴方式複製及傳送符記,直到 所有參與者都已收到一個符記。
- 每個參與者都會繫結自己的權杖,以取得緩衝區集合。
- 每位參與者都會在緩衝區集合上設定限制
- Sysmem 選擇符合所有限制的格式。這可以 只有在每個參與者繫結其權杖並設定限制後才會發生 收藏了!
- Sysmem 使用該格式分配多個「緩衝區」。
- 參與者從 sysmem 擷取緩衝區以及資訊 關於分配格式
sysmem 傳回的資訊是一組限制圖片 必須符合該緩衝區的格式
此時,參與者可以使用已分配的格式使用緩衝區, 在不同管道間的資料流動受到特定管道限制 位參與者。由於可在緩衝區中使用多種圖片大小, 參與者必須先共同選擇圖片大小 判斷精確的圖片格式讓管道切換映像檔 快速調整尺寸 不需重新分配緩衝區
如需將新參與者加入現有集合,且 已經過協商和分配,新的權杖可以 附加到緩衝區集合。新參與者的 都必須使用已分配的緩衝區集合滿足限制條件。 或邏輯分配 (從新參與者的角度起算) 失敗。 如要提升新參與者成功加入的機率, 初始分配期間的參與者可以標記符記 dispensable。這樣一來,權杖就能用於 獨立限制,以便緩衝區收集之後能 納入具有相同限制的新參與者。
緩衝區銷毀
必須先移除緩衝區的所有參照,sysmem 才能將其刪除 以便重複使用以下是符合規定的功能:
詞彙解釋
緩衝區
緩衝區代表應用程式的單張圖片或其他記憶體 相輔相成Sysmem 目前針對每個緩衝區使用一個 VMO。用戶端可以 將記憶體對應至 CPU,或將其固定至 CPU 使用 封鎖。
參與者
參與者是指要存取緩衝區的任何應用程式或驅動程式庫。所有語言 參與者必須連線至 sysmem 來交涉記憶體格式
圖片格式
圖片格式是指 用戶端就能將記憶體解讀為一組像素。舉例來說,它包含 像素格式、寬度和高度、資料列之間以位元組為單位 以及色彩空間
緩衝區設定
緩衝區設定是 緩衝區的屬性。當中包含快取資訊 但參與者需要存取記憶體所需的屬性圖片: 緩衝區設定也會提供圖片格式。
緩衝區設定不會包含特定的記憶體位址,因此多個 不同的緩衝區可能具有相同的緩衝區設定。
堆積
堆積代表系統中的特定記憶體類型。A 罩杯 系統可能可以有多個效能特性的堆積 應用程式部分堆積可能只能透過部分硬體使用 系統上的裝置
部分堆積可能無法從 CPU 存取。對於這些堆積而言,VMO 代表緩衝區無法直接使用,而是用作金鑰。 要使用緩衝區的應用程式必須將其 VMO 控制代碼傳送至堆積 驅動程式庫和堆積驅動程式庫可以傳回要使用的記憶體相關資訊。
堆積範例:
- 主系統記憶體。
- 透過獨立 GPU 取得 VRAM。
- 系統記憶體的雕刻區域,僅供部分機器使用 硬體
限制
限制條件會指定 參與者可以使用的 BufferSettings。 參與者通常會在單一集合中指定多個可能的緩衝區設定 這讓 sysmem 能夠彈性選擇其中任何一項設定 降低沒有設定符合限制條件的風險 參與會議。
協商
「交涉」是 sysmem 檢視所有 並選擇適用於所有參與者的緩衝區設定。如果 多項設定可能正常運作,sysmem 可以根據客戶 會使用緩衝區和系統架構來選擇 可以管理叢集設定,像是節點 資源調度、安全性和其他預先設定項目
緩衝區集合
緩衝區集合是一組多個緩衝區,且 使用相同的緩衝區設定Sysmem 分配整個緩衝區集合 一次。多位參與者都可能會在同一個緩衝區中開啟 FIDL 頻道 集合。
緩衝區收集權杖
符記用於 才會分配記憶體權杖可重複 會在最後繫結至緩衝區前,程序之間傳遞 集合。