Mininet - генерация трафика с использованием mininet приводит к огромному потреблению ресурсов
Я пытаюсь генерировать трафик в Mininet с помощью утилиты iperf.
Установка эксперимента выглядит следующим образом:
- В диапазоне 10.0.0.0/24 10 хостов
- Все они должны прослушивать UDP-трафик через порты 5683 и 1883, пока я не убью их.
- Все они должны генерировать небольшие объемы (~20 КБ) UDP-трафика (потоков) и отправлять случайно выбранным хостам.
- Потоки должны быть разнесены на протяжении всего эксперимента, следовательно, сна (см. Код ниже)
Это то, что я пытался до сих пор:
# start listeners on all hosts
for host in net.hosts:
server = net.get(str(host))
server.cmdPrint('iperf -s -u -p 5683 & ')
server.cmdPrint('iperf -s -u -p 1883 & ')
# generate flows
def generate_flow(net, flow_type, flow_number):
# select random delay after which to start flow
delay = str(random.randint(0, (experiment_duration / 2)))
# select random src and dst
end_points = random.sample(hosts, 2)
src = net.get(str(end_points[0]))
dst = net.get(str(end_points[1]))
if flow_type == 'A':
port_argument = '1883'
elif flow_type == 'B':
port_argument = '5683'
client_cmd = "sleep "
client_cmd += delay
client_cmd += " && "
client_cmd += "iperf -c "
client_cmd += dst.IP()
client_cmd += " --udp "
client_cmd += " --port "
client_cmd += port_argument
client_cmd += " --bandwidth 150K"
client_cmd += " --num 20K"
client_cmd += " & "
# send the cmd
src.cmdPrint(client_cmd)
Далее я звоню generate_flows
n раз согласно требованию.
Однако при n > 2000 виртуальная машина Mininet вылетает с сообщением "fork:rerty: нет дочерних процессов". Кажется, я достиг nproc
предел, указанный в $ ulimit -a
,
Итак, мой вопрос: есть ли лучший способ создать такой трафик, который можно масштабировать? Кроме увеличения nproc
предел.