【问题标题】:UDP Tuning using Tcpreplay使用 Tcpreplay 进行 UDP 调优
【发布时间】:2011-03-13 23:20:36
【问题描述】:

我正在开展一个项目,该项目使用 Twisted 提供高性能 UDP 服务器,该服务器能够处理 5k 数据包/秒的突发流量,数据包大小从 50 到 100 字节不等。我正在测试服务器的 PC 有一个四核 CPU 和 4GB RAM,运行的是 Ubuntu 10.1。

在我的性能测试中,我使用tcpreplay 尽可能快地将先前捕获的包含 500 个 UDP 数据包的流量发送到 Twisted UDP 服务器。测试在同一千兆 LAN 上的两台物理(非 VM)机器之间进行。根据 tcpreplay,我以约 1250 个数据包/秒的速度发送数据包,但在我发送的 500 个数据包中,Twisted UDP 服务器仅接收到约 350-400 个数据包。

我可以在 Twisted 中或在系统级别进行哪些性能调整以提高性能并防止丢弃过多的 UDP 数据包?

服务器代码

#!/usr/bin/env python

from twisted.internet import reactor
from twisted.internet.protocol import DatagramProtocol

packetCount = 0

class DeviceProtocol(DatagramProtocol):

    "Show me how many packets the server has received"
    def datagramReceived(self, datagram, address):
        global packetCount
        packetCount += 1
        print "Received packet %s" % packetCount

def main():
    reactor.listenUDP(7000, DeviceProtocol())
    reactor.run()

if __name__ == '__main__':
    main()

自定义 Sysctl.conf 设置

net.core.netdev_max_backlog=2500
net.core.rmem_max=16777216
net.core.wmem_max=16777216

更新答案

  • CPU 使用率永远不会超过 10%
  • 将输出重定向到文件,或仅打印每 100 个“已接收数据包”消息会产生很小的差异,我仍然看到 10-20% 的数据包丢失。
  • 使用 iptraf 测试我的网络稳定且性能良好

【问题讨论】:

  • %CPU 的使用量是多少?将输出重定向到文件有什么不同吗?只打印每 10 个数据包有什么不同吗? (输出到终端可能很昂贵)。
  • 如果您每秒发送 10、100 个数据包而不是 1000 个,丢弃率是否保持不变?
  • 通过iperf测试UDP性能确认底层网络稳定。
  • 您是否在发送或接收机器上运行了 tcpdump?你能确定哪台机器的内核正在丢弃数据包吗?如果是发送者,那几乎不是接收者的错。
  • 编写了一个 python 脚本,用于对任何给定的 .pcap 文件执行 tcprewrite anandtechblog.blogspot.com/2011/12/…

标签: linux ubuntu udp twisted performance


【解决方案1】:

我已经使用 iperf 测试了我的网络,这是一个出色的工具,我将添加到我的工具箱中,我的网络可以毫无问题地处理所有流量。

原来我的问题是由于:

  • 使用小捕获文件
  • 使用 tcpreplay 的 --loop 选项重放捕获

在我的测试中,如果 tcpreplay 在一个小的捕获文件上循环过快,它会丢弃数据包。我的捕获文件包含 100 个数据包,循环四到五次会导致 10-20% 的数据包无法发送到接收端。

【讨论】:

    【解决方案2】:

    尝试使用基于 poll 的反应器:

    from twisted.internet import pollreactor
    pollreactor.install()
    

    http://docs.huihoo.com/python/twisted/howto/choosing-reactor.html#poll

    【讨论】:

      猜你喜欢
      • 2019-05-24
      • 2014-12-09
      • 1970-01-01
      • 2015-03-18
      • 2021-12-16
      • 1970-01-01
      • 2010-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多