我正在使用glibc 2.23在Linux中用C开发UDP客户端。我的应用程序在一个循环中发送小数据包(11个字节),速率为20,000个数据包/秒。
为了确保客户端达到其承诺的发送速率,我检查了我的应用程序,当我看到一个奇怪的行为时测量UDP发送时间。发送数据包(调用sendto()
函数)所需的时间通常是“13”左右。
但是大约每30毫秒,有一个呼叫需要大约50个usec和大约每1500毫秒,有一个呼叫需要160 usec。数字是近似值,是长达1分钟的平均值。
下图显示了应用程序5秒运行的延迟值。
以下是我尝试过的事情:
也尝试过:
arp
(地址解析协议)我想知道是否有人经历过这样的行为?
我很欣赏有关避免代价高昂的电话的原因或解决方案的任何建议吗?