Я генерирую линейный трафик с пакетами 64, 128, ... 1024 Б с помощью T-Rex на одном интерфейсе на одном сервере, который подключен через кабель Ethernet к другому серверу, который получает трафик.
У меня проблемы с подсчетом полученного трафика.
Трафик генерируется с использованием STL-части T-Rex - файл конфигурации выглядит следующим образом:
from trex_stl_lib.api import *
class STLS1(object):
def create_stream (self):
return STLStream(
packet =
STLPktBuilder(
pkt = Ether()/IP(src="192.168.1.1",dst="192.168.1.4")/UDP(dport=12,sport=1025)
),
mode = STLTXCont())
def get_streams (self, direction = 0, **kwargs):
# create 1 stream
return [ self.create_stream() ]
#dynamic load - used for trex console or simulator
def register():
return STLS1()
Конфигурация 128B такая же, за исключением этой строки:
pkt = Ether()/IP(src="192.168.1.1",dst="192.168.1.4")/UDP(dport=12,sport=1025)/(82*'x')
, который (надеюсь?) создает пакет размером 128 Б (я проверял их в Wireshark, они были правильного размера, я успешно создал .pcaps необходимого размера).
Я произвел расчеты на принимающей стороне, получая статистику ethtool каждые 0,1 секунды, а затем получая сумму каждые 10 временных сегментов по 0,1 секунды, что обеспечивает более высокую точность (так, для 60 секунд входящего трафика 600 точек данных, которые затем суммируются до 60 datapoints, чтобы иметь информацию о количестве пакетов в секунду).
В файл результатов я помещаю поля rx_packets и rx_no_dma_resources. Те, которые складываются вместе, когда ethtool называется ad-hoc (после тестирования), дают мне точное число для rx_pkts_nic. Я полагаю:
rx_packets: пакеты, обработанные ядром
rx_no_dma_resources: ядро отбрасывает пакеты, поскольку у него нет циклов памяти / процессора для их обработки
rx_pkts_nic: общее количество полученных пакетов на интерфейсе
Теперь в чем моя проблема?
Когда я добавляю поля rx_packets и rx_no_dma_resources из файла результатов, на 64B результат составляет 15360462 пакета, что составляет 15,36 Mpps. Линейная скорость с пакетами 64B составляет 14,88 Mpps. То же самое происходит и с 128B, результат - 8678046 пакетов, где должно быть 8,45 Mpps. Добавленная стоимость 256B составляет 4659059, ожидается 4,53 млн пакетов в секунду (AFAIK).
Я что-то неправильно добавляю? Файлы конфигурации для T-Rex неверны? Это что-то еще? Строки, которые я набираю из ethtool, не соответствуют тому, что я думаю?
При необходимости я могу предоставить файлы .pcaps, на которых основывались конфигурации и файлы результатов.