舊指令¶
Linux 核心的 arm64 埠提供基礎設施來支援模擬架構中已棄用或過時的指令。 基礎設施程式碼使用未定義指令鉤子來支援模擬。 在可用時,它還允許在硬體中開啟指令執行。
可以透過寫入 sysctl 節點 (/proc/sys/abi) 來控制模擬模式。 以下解釋了不同的執行行為和 sysctl 節點的相應值 -
- 未定義
值:0
生成未定義的指令中止。 架構中已過時的指令的預設值,例如 SWP
- 模擬
值:1
使用軟體模擬。 為了幫助軟體遷移,在此模式下,除了發出速率限制警告外,還會跟蹤模擬指令的使用情況。 這是已棄用指令的預設值,例如 CP15 屏障
- 硬體執行
值:2
雖然標記為已棄用,但某些實現可能支援啟用/停用硬體對這些指令執行的支援。 使用硬體執行通常提供更好的效能,但會失去收集有關已棄用指令使用情況的執行時統計資訊的能力。
預設模式取決於指令在架構中的狀態。 棄用的指令應預設為模擬,而過時的指令必須預設為未定義。
注意:在所有情況下都可能無法進行指令模擬。 有關更多資訊,請參閱各個指令說明。
支援的舊指令¶
SWP{B}
- 節點:
/proc/sys/abi/swp
- 狀態:
已過時
- 預設:
未定義 (0)
CP15 屏障
- 節點:
/proc/sys/abi/cp15_barrier
- 狀態:
已棄用
- 預設:
模擬 (1)
SETEND
- 節點:
/proc/sys/abi/setend
- 狀態:
已棄用
- 預設:
模擬 (1)*
注意:系統上的所有 CPU 都必須在 EL0 級別支援混合位元組序,才能啟用此功能。 如果在此功能啟用後熱插拔了一個不支援混合位元組序的新 CPU,則應用程式中可能會出現意外結果。