我在C中编写了一个简单的工具,使用Raspberry Pi的代码块,通过SPI总线执行命令。代码块使用GCC编译器。 问题是,虽然实际的SPI事务需要一位数毫秒,但程序总执行时间可能是100毫秒或更长。代码中的实际程序执行时间不长,因此可能通过设置进程等来消耗它们。
这里最小化启动延迟的好方法是什么? Raspberry pi几乎不是速度守护程序,程序需要使用SPI库所需的root权限执行。可执行文件大约70kB,因此在冰上RPI Sdcard接口(4kB块读取大约6MB / s),单独加载可执行文件大约需要12ms。我猜我总能创建一个小的ramdisk。
单独使用Sudo大约需要50ms才能执行,因此实际启动根会话会将执行时间缩短到30-40ms。有没有办法让sudo发生得更快,所以我不必为此打开root控制台..?
答案 0 :(得分:3)
对于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
一样不错。它可能以一种糟糕的方式使用,但机制就在那里,它可以解决你的问题。
编辑:第二个想法 - 你是否动态链接到许多库?据我所知,这可能会引入一些延误。也许你可以瞄准静态链接?但是,说实话,我认为由于内存/缓存使用不佳,你可能也会失去性能,我不确定。