我用 C 语言编写了一个简单的工具,它使用 Raspberry Pi 的代码块,通过 SPI 总线执行命令。 Codeblocks 使用 GCC 编译器。 问题在于,虽然实际的 SPI 事务需要个位数毫秒,但总的程序执行时间可能为 100 毫秒或更多。代码中的实际程序执行也不会花费很长时间,因此大概都被设置流程等消耗掉了。
这里有什么好的方法可以最大限度地减少启动延迟? Raspberry pi 几乎不是速度守护进程,程序需要以 SPI 库所需的 root 权限执行。可执行文件大约为 70kB,因此在 glacial RPI Sdcard 接口(interface)(4kB block 读取大约 6MB/s)单独加载可执行文件大约需要 12ms。我想我总是可以为它创建一个小的 ramdisk。
Sudo 单独执行大约需要 50 毫秒,因此实际上启动根 session 会将执行时间缩短到 30-40 毫秒。有没有什么方法可以让 sudo 发生得更快,这样我就不必为此打开根控制台......?
最佳答案
对于 sudo
,我认为设置 SUID 位是一个好的开始。
通过将二进制文件的这个位和所有权设置为 root
,您可以允许普通用户运行您的文件而无需引用 sudo
。
chown root:root your_binary
chmod u+s your_binary
当然,您应该了解使用 SUID 的所有可能的危险,尤其是当您在应用程序中接受用户输入或参数时。这是我找到的第一个命中:http://unix.worldiswelcome.com/why-suid-programs-are-dangerous
另一方面,SUID 并不坏。就像 goto
一样不错。它可以以不好的方式使用,但机制就在那里,它可能会解决你的问题。
编辑:第二个想法 - 您是否动态链接到许多库?据我所知,这可能会造成一些延迟。也许你可以瞄准静态链接?但是,老实说,我认为您也可能因为内存/缓存使用率不佳而降低性能,我不确定。
关于c - 如何最小化程序启动时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46001263/