NVDIMM 執行時韌體啟用¶
一些永續性記憶體裝置在裝置/“DIMM”本地執行韌體,以執行諸如媒體管理、容量配置和健康監控之類的任務。 更新該韌體的過程通常涉及重新啟動,因為它對正在進行的記憶體事務有影響。 但是,重新啟動具有破壞性,並且至少 Intel 永續性記憶體平臺實現(由 Intel ACPI DSM 規範 [1] 描述)已新增對在執行時啟用韌體的支援。
libnvdimm 中實現了一個原生 sysfs 介面,允許平臺通告和控制其本地執行時韌體啟用能力。
libnvdimm 匯流排物件 ndbusX 實現了一個 ndbusX/firmware/activate 屬性,該屬性將韌體啟用的狀態顯示為“idle”、“armed”、“overflow”和“busy”之一。
idle:未設定/準備任何裝置來啟用韌體
armed:至少有一個裝置已準備好
busy:在忙碌狀態下,準備好的裝置正在轉換回空閒狀態並完成啟用週期。
overflow:如果平臺具有執行啟用所需的增量工作的概念,則可能存在太多 DIMM 已準備好啟用的情況。 在這種情況下,“overflow”狀態指示韌體啟用超時的可能性。
可以使用“live”或“quiesce”的值寫入“ndbusX/firmware/activate”屬性。 值“quiesce”觸發核心在相當於休眠“freeze”狀態下執行韌體啟用,在該狀態下通知驅動程式和應用程式停止修改系統記憶體。 值“live”嘗試在沒有此休眠週期的情況下啟用韌體。 如果未檢測到任何韌體啟用功能,則將完全省略“ndbusX/firmware/activate”屬性。
另一個屬性“ndbusX/firmware/capability”指示值“live”或“quiesce”,其中“live”指示韌體不需要或不會對系統造成任何靜止期來更新韌體。 功能值“quiesce”指示韌體確實期望並注入記憶體控制器的靜止期,但仍然可以將“live”寫入“ndbusX/firmware/activate”,以覆蓋承擔韌體更新與正在進行的裝置和應用程式活動競爭的風險。 如果未檢測到任何韌體啟用功能,則將完全省略“ndbusX/firmware/capability”屬性。
libnvdimm 記憶體裝置/DIMM 物件 nmemX 實現“nmemX/firmware/activate”和“nmemX/firmware/result”屬性來傳達每個裝置的韌體啟用狀態。 與“ndbusX/firmware/activate”屬性類似,“nmemX/firmware/activate”屬性指示“idle”、“armed”或“busy”。 當系統準備好啟用韌體,韌體已暫存 + 狀態設定為 armed 並且觸發了“ndbusX/firmware/activate”時,狀態從“armed”轉換為“idle”。 在該啟用事件之後,nmemX/firmware/result 屬性反映上次啟用的狀態,狀態為以下之一:
none:自上次重置裝置以來未觸發執行時啟用
success:上次執行時啟用已成功完成。
fail:由於裝置特定的原因,上次執行時啟用失敗。
not_staged:由於韌體映像未暫存的排序錯誤,上次執行時啟用失敗。
need_reset:執行時韌體啟用失敗,但仍然可以透過電源迴圈系統的舊方法啟用韌體。