我正在写一个支持多个设备的Linux设备驱动程序。我有一张x8 PCIe卡,上面有4个这样的设备。每个交换机通过一个PCIe交换机并获得2个PCIe通道。有没有办法让驱动程序同时写入多个通道?如果是这样,我该怎么做呢?我认为这应该是可能的,因为它都在一个PCIe插槽上,但我不知道从驱动程序如何做到这一点。
发布于 2012-09-14 21:22:07
听起来您正在寻找PCIe多播。这与通道的数量无关,而仅仅是将单个写入尽可能高效地传送到多个目的地的函数。这方面有一个标准,主要用于背板使用,请参阅:http://www.pcisig.com/developers/main/training_materials/get_document?doc_id=12f5c260ccf5e054366d4c96ee655fa6827db5b3
看起来新的PCI BAR类型支持这一点,其中多个设备将具有相同的映射物理地址范围,并且交换机也将被配置为了解此多播范围。但这一切都需要操作系统的支持,我在网上还没有找到任何东西表明Linux有必要配置设备来完成所有这些工作。
由于您的父链路有足够的带宽使所有四个子链路饱和,因此不存在吞吐量问题。使用多播可以节省的唯一一件事就是内存子系统的带宽。如果你有一个现代的建筑,你将节省的数量将在噪音中。
换句话说,不用担心。把你的设备当做独立的(无论如何,这会让你的驱动程序更干净),然后继续你的项目。
发布于 2012-09-14 05:59:39
PCIe并不像你想象的那样工作。交换机不会将上游x8链路划分为多个x2链路-它只是将流量从一条链路转发到另一条链路。因此,您将看到的是到交换机的x8链路,然后是从交换机到下游设备的4条x2链路。然而,对于不同的交换机和不同的下游设备,同样有可能(例如)到处都有x8链路,即从根端口到交换机的x8链路和从交换机到下游设备的x8链路。
但是,在您的情况下,交换机两端的带宽量是匹配的,因此设备竞争有限的带宽应该不会有任何问题。您的驱动程序可以同时与所有设备通信,就像有独立的链路一样有效。
https://stackoverflow.com/questions/12414798
复制相似问题