Тесты nftlb и ключи производительности

Просмотр категорий

Тесты nftlb и ключи производительности

2 min read

тесты #

Последние тесты, выпущенные в июне 2018, показывают значительное улучшение производительности при использовании nftables в качестве пути данных вместо iptables.

Принимая во внимание среду тестирования клиентов 2, выполняющих инструмент снятия нагрузки HTTP, подсистему балансировки нагрузки 1 и бэкэнды 3 с терминатором HTTP, дающим ответ около байтов 210, мы получаем следующие тесты в HTTP потоки в секунду:

iptables DNAT 256.864,07 RPS/cpu iptables SNAT 262.088,94 RPS/cpu nftables DNAT 560.976,44 RPS/cpu nftables SNAT 608.941,57 RPS/cpu nftables DSR 7.302.517,31 RPS/cpu

Вышеприведенные цифры показаны в расчете на физический процессор, так как добавляющие ядра масштабируемости почти линейны. Хотя эти тесты были выполнены только с бэкэндами 3, Производительность iptables существенно снизится при добавлении дополнительных бэкэндов, поскольку они подразумевают более последовательные правила.

Эти тесты были выполнены с отключенным retpoline (без защиты от Spectre / Meltdown), но как только они включены, потери производительности, обнаруженные в случаях NAT с включенным conntrack для случаев iptables и nftables, намного хуже для первого:

iptables: штраф ЦП 40.77% nftables: штраф ЦП 17.27%

Ключи производительности #

Наказания за ретполин объясняются из-за использования в iptables гораздо большего количества вызовов косвенной адресации, чем в nftables. Но также есть еще несколько ключей производительности, которые будут объяснены ниже.

Оптимизация правил #

Основным ключом производительности является оптимизация правил. В iptables уже было известно, что использование ipset повышает производительность, поскольку уменьшает последовательную обработку правил.

В nftlb, хотя он может быть расширен для использования в других целях, мы устанавливаем основные правила для каждой виртуальной службы, используя выразительный язык, который изначально поддерживает использование множеств и карт. Пожалуйста, смотрите ниже сгенерированные правила для виртуальный tcp сервис с именем vs01 с бэкэндами 2:

таблица ip nftlb {карта tcp-services {тип ipv4_addr. inet_service: вердикт
        элементы = { 192.168.0.100 . http : перейти к vs01 }
    } Chain prerouting { type natook prerouting Priority 0; политика принимает;
        айпи папдр. tcp dport vmap @tcp-services
    } Chain postrouting { type natook postrouting Priority 100; политика принимает; }

    цепочка vs01 { dnat to jhash ip saddr mod 2 map { 0 : 192.168.1.10, 1 : 192.168.1.11 } }
}

Как только нам нужно добавить новый бэкэнд, просто регенерируйте связанную цепочку в виртуальный сервис без включения новых правил и без влияния на остальные виртуальные сервисы.

    цепочка vs01 {
        dnat to jhash ip saddr mod 3 карта { 0 : 192.168.1.10, 1 : 192.168.1.11, 2 : 192.168.1.12 }
    }

Тогда, если новый виртуальный сервис vs02 необходимо создать, тогда набор правил станет таким, как показано ниже, без добавления новых правил или влияния на другие виртуальные службы:

таблица ip nftlb {карта tcp-services {тип ipv4_addr. inet_service: элементы вердикта = {192.168.0.100. http : перейти к vs01,
                     192.168.0.102 . https: перейти к vs02 } } Chain prerouting { type natook prerouting Priority 0; политика принимает; айпи папдр. tcp dport vmap @tcp-services } Chain postrouting { type natook postrouting Priority 100; политика принимает; } Chain vs01 { dnat to jhash ip saddr mod 3 map { 0 : 192.168.1.10, 1 : 192.168.1.11, 2 : 192.168.1.12 } }

    цепочка vs02 { dnat to jhash ip saddr mod 2 map { 0 : 192.168.2.10, 1 : 192.168.2.11 } }
}

Ранние крючки #

Nftables позволяет использовать ранние входной крюк это используется в nftlb во время сценариев DSR.

Кроме того, этот ранний хук может использоваться для целей фильтрации, что повышает производительность в случаях отбрасывания пакетов. Это показано ниже с самой ранней стадией случаев iptables и nftables в пакетах в секунду:

Необработанное падение iptables перед маршрутизацией: 38.949.054,35 PPS/ядро Входное падение nftables: 45.743.628,64 PPS/ядро

Методы ускорения #

Действительно, еще больше возможностей для оптимизации, поскольку nftables уже поддерживает быстрые пути и упрощенные методы, которые можно использовать для манипулирования пакетами. Как примеры этого:

Flowtables, Conntrack fast path для делегирования уже установленных соединений на входную стадию без прохождения всего медленного пути. Больше информации здесь.

NAT без состояния, В некоторых случаях с балансировкой нагрузки NAT без сохранения состояния может выполняться без отслеживания соединения и со стадии входа, чтобы получить всю производительность, применяемую к сценариям NAT.

📄 Загрузите этот документ в формате PDF #

    EMAIL: *

    Powered by BetterDocs