Соединение пространства пользователя - Linux vs. FreeBSD
Фон:
Я работаю над переносом программы синтаксического анализа / манипулирования пакетами из FreeBSD на Linux (в частности, Debian - jessie). Эта программа реализует двунаправленный мост между двумя физическими интерфейсами при выполнении анализа / манипуляции до операций TX.
В FreeBSD это приложение использовало Pcap для RX/TX. В Linux до сих пор я тестировал с Pcap, PACKET_MMAP (используя TPACKET_V2) и Vanilla PF_RING.
Результаты теста:
Используя ту же аппаратную и лабораторную среду, я наблюдал следующие (приблизительные) результаты пропускной способности нескольких тестов, выполненных с помощью iperf:
- Мост ядра FreeBSD: 880 Мбит / с
- Мост FreeBSD Pcap (пространство пользователя): 700 Мбит / с
- Мост ядра Debian: 880 Мбит / с
- Мост Debian Pcap (пространство пользователя): 120 Кб / с
- Мост Debian Vanilla PF_RING (пространство пользователя): 980 Кбит / с
- Мост Debian PACKET_MMAP (пространство пользователя): 480 Кбит / с
Мысли и вопрос:
Скорости пространства пользователя Debian кажутся мне нелепыми. Они непригодны для использования - и я подозреваю, что что-то упустил. Есть ли системная опция, которую мне нужно включить ("иди быстро", смеется)?
Или это так, как это происходит с мостовым пространством пользователя Linux?
Редактировать / Обновить
У меня есть длительное подозрение, что существуют административные ограничения, влияющие на тесты Debian. Я ищу системную документацию (что-то / что-нибудь) безрезультатно. Любые идеи о том, что могло бы ограничить это?
1 ответ
Неясные вопросы находят неясные ответы...
После долгих исследований я обнаружил, что "проблемы" с Linux в этом случае на самом деле являются результатом оптимизации. По умолчанию, по-видимому, системы оптимизируются для больших устойчивых нагрузок (поэтому YMMV с приведенным ниже "исправлением").
Я решил проблемы со скоростью и нашел ту же пропускную способность, что и системы FreeBSD, используя ethtool для настройки оптимизаций на двух моих мостовых интерфейсах:
ethtool -K eth1 gso off gro off tso off ufo off lro off
После вышеописанного на обоих интерфейсах PF_RING и PACKET_MMAP соответствовали скорости моста ядра (что является максимальной скоростью для моей тестовой лаборатории), а тесты Pcap дали около 300 Мбит / с.