我正在编写一个支持多个设备的 Linux 设备驱动程序。我有一个 x8 PCIe 卡,上面有 4 个这些设备。每个都通过一个 PCIe 交换机运行并获得 2 个 PCIe channel 。有没有办法让司机同时写入多个车道?如果是这样,我将如何做到这一点?我认为这应该是可能的,因为它都在一个 PCIe 插槽上,但我不知道如何从驱动程序中做到这一点。

最佳答案

听起来您正在寻找 PCIe 多播。这与 channel 数量无关,而只是尽可能高效地向多个目的地提供单次写入的功能。对此有一个标准,主要用于背板用途,请参阅:http://www.pcisig.com/developers/main/training_materials/get_document?doc_id=12f5c260ccf5e054366d4c96ee655fa6827db5b3

新的 PCI BAR 类型似乎支持这一点,其中多个设备将具有相同的映射物理地址范围,并且交换机也将配置为了解此多播范围。但这一切都需要操作系统支持,而且我还没有在网络上找到任何内容表明 Linux 具有配置设备以完成所有这些工作所必需的部分。

由于您的父链接有足够的带宽来饱和所有四个子链接,因此您不存在吞吐量问题。使用多播唯一可以节省的是内存子系统的带宽。如果您拥有现代建筑,那么您可以节省的费用将是噪音。

换句话说,不要担心。将您的设备视为独立的(无论如何,这将使驱动程序更清晰)并继续您的项目。

关于linux - 是否可以在同一 PCIe 插槽上写入使用不同 PCIe channel 的多个设备?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12414798/

10-14 06:08