Потоки IPFIX от OVS Linux Bridge не точны
Я изо всех сил пытаюсь понять мои данные потока IPFIX.
Для объяснения: у меня есть блок Ubuntu (16.04.2 LTS Xenial Xerus), и внутри него есть один мост Linux:
root@Ubuntu1:~# ovs-vsctl show
527530c2-6f42-498f-92a6-67dc43d931bc
Bridge "myBridge"
Port "eth1"
Interface "eth1"
type: dpdkvhostuser
Port "eth2"
…etc…
ovs_version: "2.9.3"
root@Ubuntu1:~#
Хорошо, я включил экспорт IPFIX на этом мосту:
ovs-vsctl -- set bridge myBridge ipfix=@i -- --id=@i create IPFIX targets=\"10.0.0.10:4739\" obs_domain_id=1234 obs_point_id=5678 sampling=5
И мост успешно экспортирует потоки в сборщик 10.0.0.10. Из ряда сообщений (как здесь) я понимаю, что "octetDeltaCount" - это необработанное количество байтов в данном потоке. Я хотел проверить это, поэтому я настроил две виртуальные машины, A и B, и использовал iPerf3 для отправки тестового трафика от A к B через мой мост Linux. Мои результаты были обескураживающими:
iPerf3 IPFIX's
Transferred octetDeltaCount
iPerf3 test (bytes) reported Delta
=========================================================================================
iperf3 -c 168.161.114.16 -n 1K 28,700 69,195 -40,495
iperf3 -c 168.161.114.16 -n 250K 303,700 637,345 -333,645
iperf3 -c 168.161.114.16 -n 500K 559,000 975,425 -416,425
iperf3 -c 168.161.114.16 -n 1M 1,060,000 962,286 97,714
iperf3 -c 168.161.114.16 -n 250M 216,700,000 1,016,687 215,683,313
iperf3 -c 168.161.114.16 -n 500M 500,100,000 1,143,102 498,956,899
iperf3 -c 168.161.114.16 -n 1G 1,000,000,000 1,348,778 998,651,222
iperf3 -c 168.161.114.16 -n 10G 10,000,000,000 3,721,548 9,996,278,452
(Примечание к этому второму столбцу: когда я указал, что iPerf отправляет "1 КБ" трафика, iPerf фактически отправляет 28 700 байт. Но это нормально, меня больше беспокоит то, как IPFIX сообщает о том, что iPerf отправляет.)
Хорошо, плохие новости здесь должны быть очевидны. IPFIX не дает точных отчетов о количестве байтов. Я могу принять результаты для потока 1 Мбайт, но другие слишком ненормальны. Здесь что-то не так.
В частности, сообщаемое "octetDeltaCount" становится безумно неточным после того, как я отправлю более 1 Мбайт / поток. Посмотри на эти дельты!
Если вы посмотрите на команду ovs-vsctl, которую я использую для включения экспорта IPFIX с коммутатора Linux, вы заметите, что я установил выборку потока на N=5, что означает, что коммутатор просматривает каждый пятый пакет. Мой сборщик не знает об этом, он просто сообщает необработанные данные, которые он получает от коммутатора. Но очевидно, что умножение столбца "octetDeltaCount" на пять решит эту проблему. Здесь на работе что-то еще.
Кто-нибудь должен был бороться с такой проблемой раньше? Мне любопытно узнать, сделали ли вы то, что я сделал, но потом получили точные цифры. Если так, то, возможно, мой сборщик IPFIX не очень хорош. Или OVS сообщает данные IPFIX в логарифмическом масштабе или что-то?
Любая информация или советы будут оценены по достоинству.