如何在基于 linux 的 pc 上计算接收到的数据包速率?如 pps 或 fps

xia*_*zhu 5 c sockets linux packets

我正在编写一个网络程序,它可以计算准确的数据包速率(每秒数据包、每秒帧数、bps)。现在我有一个名为 testcenter 的设备,它可以在 Linux 上将准确的流量发送到特定的 pc(协议是 UDP/IP),我想知道我的程序的准确 pps(每秒数据包),我gettimeofday(&start,NULL)在调用之前已经考虑过这个功能recvfrom()并在该调用之后更新数据包计数器gettimeofday(&end,NULL)并获取 pps 速率。我希望有比这更好的解决方案,因为用户/内核屏障在系统调用中被遍历。此致。

Hel*_*hne 1

gettimeofday由于使用了 vsyscalls,您观察到的切换到内核模式对于一些流行架构上的 Linux 来说是不正确的。显然在这里使用gettimeofday不是一个坏选择。不过,您应该考虑使用单调时钟,请参阅man 3 clock_gettime。请注意,clock_gettime对于许多体系结构,尚未转换为 vsyscall gettimeofday

除了此选项之外,您还可以设置SO_TIMESTAMP套接字选项并通过 获取精确的时间戳recvmsg