Linux 专家们大家好!
我正在尝试找到控制 PCI 设备并对其施加压力的最佳方法。我首先编写了一个简单的 bash 脚本,该脚本使用 pciutils(lspci 和 setpci)中的命令来配置设备并在总线上创建流量
虽然脚本工作得很好,但它们的执行速度似乎比 PCIe 链路速度慢得多,这使得很难在总线上产生压力,或者在电源模式和链路速度之间快速切换。
我想知道,如果我编写一个内核模块来调用 pci.h 库中的函数,它的执行速度会更快吗?我能够更快地访问 PCI 设备吗?
任何帮助将不胜感激:)
答案1
shell 调用外部命令来执行任何操作都会产生大量开销。 Fork/exec 的开销相对较高。
直接使用 API(而不是调用 CLI 实用程序)从 shell 脚本转移到用户空间 C 程序将会带来巨大的加速。也比编写内核模块更容易。如果您可以找到脚本语言(Perl、Python、Ruby 等)的 API 绑定,那么速度几乎一样快。
仍然存在剩余的开销(例如,系统调用开销),您可以通过转换为内核模块来删除它们。到那时,您基本上已经消除了所有开销,并且获得更快速度的唯一方法是摆脱操作系统和/或自定义测试硬件。
PS:有关如何实际编写用户空间 C 程序或内核模块的问题可能更好地询问堆栈溢出,Stack Exchange 网站,用于解决编程问题。与任何 Stack Exchange 站点一样,请检查他们的Stack Overflow 帮助中心在在那里发布问题之前。他们特别提供了一些关于提出广受欢迎的问题的有用技巧。