我用 C 语言编写了一个简单的工具,使用 Raspberry Pi 的代码块,它通过 SPI 总线执行命令。代码块使用 GCC 编译器。问题是,虽然实际的 SPI 事务需要个位数毫秒,但程序总执行时间可能是 100 毫秒或更多。代码中的实际程序执行也不需要很长时间,因此大概都被设置进程等消耗掉了。
在这里最小化启动延迟的好方法是什么?Raspberry pi 几乎不是一个速度守护进程,程序需要以 SPI 库所需的 root 权限执行。可执行文件大约为 70kB,因此在 Glacial RPI Sdcard 接口上(对于 4kB 块读取大约为 6MB/s),单独加载可执行文件大约需要 12 毫秒。我想我总是可以为它创建一个小的 ramdisk。
单独执行 Sudo 需要大约 50 毫秒,因此实际启动根会话会将执行时间缩短至 30-40 毫秒。有什么方法可以让 sudo 更快地发生,所以我不必为此打开 root 控制台..?
因为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
还不错。它可能以不好的方式使用,但机制就在那里,它可能会解决您的问题。
编辑:第二个想法 - 您是否针对许多库动态链接?据我所知,这可能会导致一些延迟。也许您可以针对静态链接?但是,老实说,我认为您也可能会因为内存/缓存使用率低而降低性能,我不确定。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句