15 августа вышла новая версия Open vSwitch – 3.4.0
Из основных изменений (бегу по строчкам в NEWS файле репозитория):
- Основной бранч изменил своё название с master на main в рамках инициативы по отказу от эксклюзивной терминологии.
- Новая функциональность – Local sampling. Она использует действие OpenFlow “
sample
” и позволяет собирать локальные сэмплы в datapath. На данный момент поддерживается только kernel datapath и конфигурируется черезlocal-group-id
колонку таблицы “Flow_Sample_Collector_Set
“. Для этого в kernel datapath используется действие “psample
“. - Новая опция, позволяющая включить явный drop пакетов, для случаев, когда последнее действие в цепочке – sample (если datapath поддерживает действие явного дропа). Конфигурируется поведение опцией “
other_config:explicit-sample-drop
” в таблицеOpen_vSwitch
. Явный сбор корректной статистики дропов достигается добавлением действия drop в конец после действия “sample
” (sflow, ipfix, local sampling). - В OpenFlow добавлена новая версия действия “
sample
” (NXAST_SAMPLE4
), которая принимает в качестве аргументов ‘osb_point_id
‘ и ‘obs_domain_id
‘ – параметры конфигурирования observation point id и observation domain id в IPFIX. - Утилита
ovs-appctl
:- получила возможность выводить информацию помимо человекочитабельного формата, ещё и в json-формате. Также поддержка json формата была добавлена и в библиотеку python-openvswitch. Теперь вывод команд утилиты ovs-appctl станет более дружелюбным для машинной обработки (можно будет выкинуть регекспы из своих мониторинговых скриптов).
- Новая команда
ofproto/detrace
для восстановления списка openflow и groups, которые создали datapath flow. Команда выводит flow и группы в форматахdump-flows
иdump-groups
.
- Демон vswitchd, когда запущен с опцией
--mlockall
, для ядер с поддержкойMCL_ONFAULT
в вызовеmlockall()
(Linux >= 4.4) теперь будет блокировать только те страницы памяти, которые были подгружены через page fault (faulted in). Это снижает потребление памяти на системах, где включенmlockall
(утверждается, что на нагруженных системах с 64 ядрами разница составила около 650MB), а также, самое главное, с этим изменением стало возможным использоватьmlockall
вместе с dpdk post-copy механизмом live-миграции ВМ (ранее это было запрещено из-за несовместимости блокировки всех страниц памяти и вызоваuserfaultfd()
для shared hugepages, использовавшегося в post-copy). - Добавлена поддержка
filters
. Сразу в 2х местах:ovs-tcpdump
и traffic mirror. Благодаря этому изменению теперь можно предфильтровывать трафик, для которого выполняется действие (tcpdump или mirror), тем самым снижая нагрузку на ovs-vswitchd и последующие компоненты в цепочке. - DPDK:
- Подтверждена поддержка DPDK 23.11.1.
- Изменение статусов соединений теперь по-умолчанию обрабатывается в режиме прерываний (interrupt mode). Это поведение можно изменить выставив
false
в таблицеInterface
для поляoptions:dpdk-lsc-interrupt
.
- В userspace datapath появилась поддержка флага ‘
random
‘ для выбора портов из диапазона для функциональности NAT, а также флага ‘persistent
‘ для выбора IP-адреса из диапазона. - Инкапсуляция IPv6 UDP tunnel (Geneve и VXLAN) теперь будет учитывать значение опции checksumming. Теперь включение этой опции будет иметь такой же эффект, как и
udp6zerocsumtx
опция в ядре Linux для UDP туннелей. Это изменение актуально как для kernel datapath, так и для userspace.