我正在使用tcpdump来捕获UDP数据包,并分析UDP广播器和我的服务器之间的networking延迟。 为了计算延迟,我将UDP应用程序数据中报告的源主机时间戳与tcpdump本地“内核”时间戳进行比较。
两个服务器时钟同步到毫秒级的精度,可以接受高达2或3毫秒的延迟。 我的机器是双核6核英特尔X5670 @ 2.93Ghz,10Gb Mellanox NIC并禁用了合并。
问题是,当数据频率提高时,我观察到两个主机之间的延迟大于10毫秒,尽pipe总是远低于10Gb带宽。 我有5个tcpdump作业同时运行:
tcpdump -c 0 chrt -f 80 -q -i eth1 net 232.xxx.xxx.xxx and udp port 22456 -s 0 -w myfile
我在过去用2个线程编写我自己的转储程序(一个高优先级的networking读取器线程和一个低优先级的磁盘写入器asynchronous线程)取得了较好的成功,但我真的很喜欢这次使用标准的linux解决scheme。
我能做些什么来尽量减lesstcpdump的UDP读取延迟?
我build议你尝试renice tcpdump进程,并将跟踪转储到tmpfs文件系统上的文件也可以将-p选项添加到tcpdump,以便不将接口置于混杂模式,这可能会减less寄生stream量。
mkdir /tmpfs mount -t tmpfs -o size=128m none /tmpfs nice -n -10 tcpdump ... -w /tmpfs/yourfile