这一切都在 Linux 和 C 中。
我有一个用户空间库函数,最多需要调用设备驱动程序的读/写函数 8 次。 (我正在编写库和设备驱动程序。)我看到实现此目的的两种方法:
- 让库调用读/写所需的次数。
- 让驱动程序按需要的次数处理设备的读/写操作。
驱动程序已经根据之前无论如何都会发生的 ioctl 调用知道所需的次数。选项 1 需要在用户空间和内核空间之间进行更多切换,我知道这会降低性能。另一方面,选项 2 会产生问题。对于 read 调用,传递回用户空间的缓冲区最多会大 8 倍,除非可以一次将 1 个读取传递回用户空间而无需在两种模式之间切换。除非每次写入相同的数据,否则写调用也会有同样的问题。因此,选项 2 的最坏情况需要比选项 1 大 8 倍的缓冲区来回传递。
最终,哪个更有效率?
最佳答案
正如评论员所建议的那样,如果您关心效率,则没有任何推测可以替代基准测试和分析。 “效率”会受到大量因素的影响,分析您的每个选项是确定最佳选项的正确方法。
关于从用户空间调用驱动程序 API 的成本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12485686/