В этой главе представлен dperf, высокопроизводительный инструмент нагрузочного тестирования для шлюзов уровня 4 (например, балансировки нагрузки уровня 4, L4-LB). Этот инструмент в настоящее время доступен на GitHub с открытым исходным кодом и представляет собой высокопроизводительный инструмент стресс-тестирования:
github: https://github.com/baidu/dperf
Друзья, кому понравилось, поставьте лайк и подпишитесь, чтобы поддержать автора.
Прежде всего: зачем связываться с dperf?
При работе с программированием плоскости данных SDN стресс-тестирование производительности является одной из задач, необходимых для ежедневной разработки. Так как DPDK удаляет сетевую карту из Linux Ядро взял на себя управление, тем самым повысив производительность, передаваемую данными. Из-за этого мы вступили в контакт с dperf, сетью с открытым исходным кодом и высокой производительностью. Сетевой стресс-тестер — это официальный экологический проект DPDK в рамках Linux Foundation. Он может выполнять базовое тестирование потоков сетевых элементов, выполнять базовые тесты производительности и проверять количество в секунду. новых подключений、Количество одновременных подключений、пропускная Тестирование параметров производительности сети, таких как мощность и PPS.
Во-вторых: почему мы выбираем dperf
1. Экономическое преимущество
По сравнению с обычными инструментами тестирования, такими как Spirent Testcenter, IXIA и другими специальными инструментами потока, исходный код программного обеспечения dperf является открытым в соответствии с соглашением об открытом исходном коде. Однако специальные инструменты тестирования часто стоят дороже, а соответствующие функции требуют затрат огромных сумм. денег на приобретение лицензий у иностранных производителей.
2. Преодолеть функциональные ограничения аппаратных инструментов.
В традиционных аппаратных инструментах потоковой передачи часто существуют ограничения встроенного ПО устройства, и они не могут гибко поддерживать программно-определяемую сеть, подложку/наложение vxlan и другие функции. Для сравнения, dperf программно-определяемого потокового устройства не имеет аппаратных ограничений.
3. Возможность поддержки функции балансировки нагрузки.
Общие аппаратные инструменты потоковой передачи, такие как testcenter и IXIA, часто фокусируются на таких функциях, как генерация трафика и генерация трафика универсального протокола. Однако для балансировки нагрузки выше уровня L4, установления соединения протокола приложения, поддержки сеанса и т. д. поддержка балансировки нагрузки недостаточно сильна.
4. Недостатки распространенных потоковых программ, таких как pktgen
Распространенными методами тестирования являются: на них влияют прерывания ядра, копирование трафика и т. д., и они имеют следующие недостатки.
Описание процесса сбора пакетов ядра
1. Низкая производительность и высокое потребление ресурсов;
2. Высокий уровень сбоя соединения: при высоком давлении стек протоколов Linux или стек протоколов FreeBSD вызовет сбой соединения из-за недостаточности ресурсов, что скроет дефекты тестируемого устройства и повлияет на результаты тестирования;
3. Необнаружимая потеря пакетов. В течение всего процесса тестирования ошибки на уровне пакетов, такие как потеря пакетов на тестируемом устройстве, не могут быть обнаружены.
Технические преимущества проекта dperf
Еще раз: как мы видим принцип реализации dperf
dperf — это комплект потоковой передачи, разработанный на основе Intel DPDK. Ниже мы кратко представляем базовые знания, связанные с Intel DPDK:
Текущее ядро имеет проблемы с неэффективностью:
Сбор пакетов прикладного уровня:
Дефекты ядра:
Опять же: внедрение высокой производительности dperf, внедрение UIO в DPDK, описание технологии обхода ядра.
DPDK использует технологию UIO Linux для обхода ядра, избегая взрывов прерываний ядра и копирования больших объемов данных, а также может напрямую взаимодействовать с оборудованием в пользовательском пространстве. При традиционном способе отправки и получения пакетов данных сетевая карта сначала уведомляет стек протоколов ядра Linux о необходимости обработки пакетов данных посредством прерывания. Стек протоколов ядра сначала выполняет необходимую проверку достоверности пакетов данных, а затем определяет, являются ли они допустимыми. целью пакетов данных является локальный компьютер Socket, если условия выполнены, копия пакета данных будет отправлена в Socket пользовательского режима для обработки. Чтобы драйвер сетевой карты (PMD Driver) работал в пользовательском режиме и реализовывал обход ядра, Linux предоставляет механизм UIO (User Space IO). UIO можно использовать для обнаружения прерываний посредством чтения и связи с устройством сетевой карты через mmap. UIO — это технология ввода-вывода в пользовательском режиме. Это основа для DPDK, позволяющая обойти стек протоколов ядра и обеспечить поддержку драйвера PMD в пользовательском режиме. Архитектура DPDK устанавливает модуль IGB_UIO (igb_uio.ko и kni.ko.IGB_UIO) в ядре Linux, используя технологию UIO для перехвата прерываний и сброса поведения обратного вызова прерываний, тем самым обходя последующий процесс обработки стека протоколов ядра и IGB_UIO. будет Во время процесса инициализации ядра аппаратные регистры сетевой карты переводятся в пользовательский режим.
Описание технической архитектуры UIO
Логическое описание TLB
Еще раз: что может dperf (официальное описание dperf в этой главе)
Новая производительность dperf действительно очень сильна. Используйте два ядра (одно ядро запускает клиент dperf, а другое ядро — dperf).
1. На X86 (Intel(R) Xeon(R) Silver 4214) можно измерить 2,3 миллиона HTTP CPS нового создания.
2. На Кунпэн 902 оно может достигать 2,1 миллиона человек. Подробную информацию можно найти на домашней странице проекта.
3. Если использовать ab для тестирования nginx, то CPS всего 25 000, а производительность отличается в 100 раз.
Параллелизм Dperf также очень силен. Одно соединение dperf потребляет всего 64 байта, а один миллиард параллелизма TCP занимает всего 60 ГБ памяти. Поэтому dperf очень легко поддерживает огромные функции параллелизма.
dperfизпропускная Возможности при условии сетевой карты, если вам нужна высокая производительность, Перевозчики кирпичей в сфере связи Рекомендуется использовать высокопроизводительную сетевую карту, поддерживающую DPDK;
Еще раз: какие проблемы решает dperf с точки зрения статистики данных (подробности см. в официальной документации)
Подробная статистика, выдаваемая dperf в реальном времени, выглядит следующим образом: dperf выводит статистику раз в секунду. Статистика включает в себя:
1. Сколько секунд он работал, загрузка процессора каждым ядром,
2. Количество пакетов, полученных в секунду, количество отправленных пакетов в секунду, бит, полученных в секунду, бит, отправленных в секунду.
3. Количество сообщений, отправленных и полученных по протоколам уровня 2-3: ARP, ICMP.
4. Количество отправленных и полученных сообщений в различных состояниях TCP: SYN, FIN, PUSH, RST.
5. Статистика HTTP-запросов и ответов: GET, 2XX.
6. Количество сбоев: количество сбоев подключения, количество потерь пакетов сетевой карты и т. д.
7. Количество повторных передач TCP-сообщений: повторные передачи SYN, FIN, ACK, PUSH.
seconds 75379 cpuUsage 28 28 28 28 27
pktRx 3,000,970 pktTx 3,000,947 bitsRx 2,096,674,944 bitsTx 2,208,701,296 dropTx 0
arpRx 0 arpTx 0 icmpRx 0 icmpTx 0 otherRx 0 badRx 0
synRx 1,000,331 synTx 1,000,331 finRx 1,000,296 finTx 1,000,320 rstRx 23 rstTx 0
synRt 0 finRt 0 ackRt 0 pushRt 0 tcpDrop 0
skOpen 1,000,331 skClose 1,000,319 skCon 493 skErr 0
httpGet 1,000,320 http2XX 1,000,320 httpErr 0
ierrors 0 oerrors 0 imissed 0
Напишите в конце:
https://github.com/baidu/dperf
В настоящее время dperf имеет 1,6 тыс. лайков на github, и этот инструмент включен в официальный сайт Intel DPDK. Если вы считаете, что dperf хорош, вы можете добавить его на github.