2 回答

TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊
如果翻譯一下的話:
$?sysctl?sysctl.proc_translated sysctl.proc_translated:?1
如果不:
$?sysctl?sysctl.proc_translated sysctl.proc_translated:?0
在非 ARM Mac 上:
$?sysctl?sysctl.proc_translated sysctl:?unknown?oid?'sysctl.proc_translated'

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
命令行sysctl -n sysctl.proc_translated或本機(jī)等效sysctlbyname()調(diào)用將指示您是否在 Rosetta 下運(yùn)行。
另外兩個(gè)sysctl值是相關(guān)的。在沒有 Rosetta 的 M1 硬件上,返回這些值:
hw.cputype: 16777228
hw.cpufamily: 458787763
hw.cputype是0x0100000C(CPU_TYPE_ARM64)并且hw.cpufamily是0x1b588bb3(CPUFAMILY_ARM_FIRESTRM_ICESTORM)。
然而,當(dāng)在 Rosetta 下執(zhí)行時(shí),收集 CPUID 的低級(jí)機(jī)器代碼優(yōu)先,并通過命令行sysctlbyname()和命令行返回以下兩個(gè)值:
hw.cputype: 7
hw.cpufamily: 1463508716
它們對(duì)應(yīng)于0x7(CPU_TYPE_X86) 和0x573b5eec(INTEL_WESTMERE)。
Rosetta 似乎報(bào)告了 Rosetta 下有一個(gè)與 x86 兼容的 Westmere 芯片,但這個(gè)選擇在我見過的所有地方似乎都是一致的。這種“虛擬架構(gòu)”對(duì)于某些程序可能是有用的信息。
另一種可能性出現(xiàn)在 IO 注冊(cè)表中。雖然默認(rèn)IOService平面實(shí)時(shí)收集數(shù)據(jù),但該IODeviceTree平面在啟動(dòng)時(shí)存儲(chǔ),并在樹中包含這些條目(命令行ioreg -p IODeviceTree或ioreg -c IOPlatformDevice):
cpu0@0 <class IOPlatformDevice, id 0x10000010f, registered, matched, active, busy 0 (180 ms), retain 8>
| | | {
...
| | | "compatible" = <"apple,icestorm","ARM,v8">
(對(duì)于 CPU 0-3)和
cpu4@100 <class IOPlatformDevice, id 0x100000113, registered, matched, active, busy 0 (186 ms), retain 8>
| | | {
...
| | | "compatible" = <"apple,firestorm","ARM,v8">
(適用于 CPU 4-7)
這清楚地表明了ARMv8 Firestorm + Icestorm M1芯片。
同樣的方法也適用于 M1 Pro 和 M1 Max。
添加回答
舉報(bào)