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 頻道 集合。