我试图将数据包操作减少到最低限度,以提高我正在处理的特定程序的效率,但我正在努力解决使用 sendto/recvfrom 通过 udp 套接字发送所需的时间。我正在使用 2 个非常基本的进程(应用程序),一个是发送,另一个是接收。
我愿意了解使用这些函数调用时 linux 内部是如何工作的......
以下是我的观察:在发送数据包时:
- 10Kbps,消息从一个应用程序传送到另一个应用程序所需的时间约为 28us
- 400Kbps,消息从一个应用程序到另一个应用程序所需的时间约为 25us
- 4Mbps,消息从一个应用程序到另一个应用程序所需的时间约为 20us
- 40Mbps,消息从一个应用程序到另一个应用程序所需的时间约为 18us
当使用不同的 CPU 时,时间明显不同,并且与这些观察结果一致。必须有某种设置可以根据套接字上的流量更快地完成某些队列读取......如何控制?
仅将节点用作转发节点时,使用 400Kbps 流时进出大约需要 8us,我想尽可能收敛到这个值。25us 是不可接受的并且被认为很慢(很明显,这比每个数据包之间的延迟要小得多……但关键是最终能够处理更多的数据包,因此,这次需要缩短!)。有什么比 sendto/recvfrom 更快的吗(必须使用 2 个不同的应用程序(进程),我知道我不能使用单块,因此我需要在套接字上发送信息)?