💡
原文中文,约3400字,阅读约需9分钟。
📝
内容提要
在测试 Rust 编译器时发现执行速度慢,怀疑与 macOS 更新或 VS Code 相关。通过脚本测试发现首次执行新文件时会触发 Gatekeeper 安全扫描,导致延迟。给予 VS Code 完全磁盘访问权限后,问题解决,执行速度恢复正常。
🎯
关键要点
- 在测试 Rust 编译器时发现执行速度慢,怀疑与 macOS 更新或 VS Code 相关。
- 通过脚本测试发现首次执行新文件时会触发 Gatekeeper 安全扫描,导致延迟。
- 在 VS Code 终端中,首次执行和再次执行的耗时差距大约为 30-50 倍。
- 使用 log show 查看系统日志,发现每次执行新文件时 syspolicyd 都会进行 Gatekeeper 扫描。
- 确认原因后,给予 VS Code 完全磁盘访问权限后,执行速度恢复正常。
- Full Disk Access 在 macOS 中对应的是最高级别的信任授权,能够跳过完整的 Gatekeeper 扫描。
- syspolicyd 的扫描评估结果存储在 SQLite 数据库中,AppleSystemPolicy.kext 在内核中维护运行时缓存。
- macOS 的安全评估系统是“学习型”的,记住过去的信任决策。
- 如果遇到类似问题,可以检查是否是 Gatekeeper 的原因,并尝试给予程序 Full Disk Access。
❓
延伸问答
为什么在 macOS 上执行 Rust 编译器时会出现速度慢的问题?
在首次执行新文件时,macOS 的 Gatekeeper 安全扫描会导致延迟,从而使执行速度变慢。
如何解决 VS Code 中的执行速度慢的问题?
给予 VS Code 完全磁盘访问权限后,执行速度恢复正常,避免了 Gatekeeper 的安全扫描。
Gatekeeper 安全扫描的作用是什么?
Gatekeeper 安全扫描用于对首次执行的新可执行文件进行代码签名验证和恶意软件检查。
什么是 Full Disk Access,它如何影响程序执行速度?
Full Disk Access 是 macOS 中的最高级别信任授权,允许程序跳过完整的 Gatekeeper 扫描,从而提高执行速度。
如何检查是否是 Gatekeeper 导致的执行速度慢?
可以使用命令 'log show -- predicate 'subsystem == "com.apple.syspolicy.exec"' -- last 5m -- style compact | grep performScan' 来查看是否触发了 Gatekeeper 扫描。
macOS 的安全评估系统是如何工作的?
macOS 的安全评估系统是“学习型”的,会记住过去的信任决策,从而影响后续的执行速度。
➡️