假设我有一个InfiniBand或类似的PCIe设备和一个快速的Intel Core CPU,我想发送,例如IB链路上的8字节用户数据。还要说没有设备驱动程序或其他内核:我们保持这个简单,只是直接写入硬件。最后,假设IB硬件之前已针对上下文进行了正确配置,因此它只是在等待某些事情要做。
问:本地CPU需要多少CPU周期才能告诉硬件数据在哪里以及应该开始发送数据?
更多信息:与CPU本地服务(例如,使用协处理器)相比,我想估计使用PCIe通信服务的成本。我期待的是PCIe总线上的寄存器会有很多写入,例如设置数据包的地址和长度,以及可能对状态和/或控制寄存器进行一些读写操作。我希望每个都需要几百个CPU周期,所以我希望整个设置需要1000到2000个CPU周期。我会是对的吗?
我只是在找球场答案......
答案 0 :(得分:1)
你的球场号码是正确的。
如果要使用RDMA写入发送8字节有效负载,首先使用Programmed IO将请求描述符写入NIC,然后NIC将使用PCIe DMA读取来获取有效负载。我希望PIO和DMA读取都需要200-500纳秒,尽管PIO应该更快。
通过将有效负载放在请求描述符中,您可以摆脱DMA读取并节省一些延迟。