Настройка UDP с использованием Tcpreplay - PullRequest
1 голос
/ 14 марта 2011

Я работаю над проектом, который использует Twisted для обеспечения высокопроизводительного UDP-сервера, способного обрабатывать пакетный трафик со скоростью 5 тыс. Пакетов в секунду, с размером пакета от 50 до 100 байт.ПК, на котором я тестирую сервер, имеет четырехъядерный процессор с 4 ГБ ОЗУ и работает под управлением Ubuntu 10.1.

В своих тестах производительности я использую tcpreplay для отправки ранее захваченноготрафик, состоящий из 500 пакетов UDP, на сервер Twisted UDP максимально быстро.Тесты проводятся между двумя физическими (не 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

Обновленные ответы

  • Загрузка ЦП никогда не превышает 10%
  • Перенаправление вывода в файл илитолько распечатка каждого 100-го сообщения «Полученный пакет» не имеет большого значения, я все еще вижу 10-20% пропущенных пакетов.
  • Проверено, что моя сеть стабильна и работает хорошо с использованием iptraf

Ответы [ 2 ]

2 голосов
/ 15 марта 2011

Я проверил свою сеть с помощью iperf, который является отличным инструментом, который я добавлю в набор инструментов, и моя сеть обрабатывает весь трафик без проблем.

Оказывается, мои проблемы были из-за:

  • Использование небольшого файла захвата
  • Воспроизведение захвата с помощью опции --loop tcpreplay

В моих тестах tcpreplay отбрасывает пакеты, если слишком быстро зацикливается на небольшом файле захвата. Мой файл захвата состоял из 100 пакетов, и его повторение четыре или пять раз приводило бы к тому, что 10-20% пакетов не отправлялось принимающей стороне.

0 голосов
/ 14 марта 2011

Попробуйте использовать реактор на базе poll:

from twisted.internet import pollreactor
pollreactor.install()

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

...