Стресс-тест производительности DPDK, серия 1: введение в инструмент dperf
Стресс-тест производительности DPDK, серия 1: введение в инструмент dperf

В этой главе представлен 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:

Текущее ядро ​​имеет проблемы с неэффективностью:

  1. пакеты данных, поступающие из внешней сети, на физическую сетевую карту. Если адрес назначения не является сетевой картой,И сетевая карта не включает беспорядочный режим,Пакет будет отброшен сетевой картой. (Неразборчивый режим: сетевая карта машины может принимать все потоки данных, проходящие через нее.,независимо от того, является ли это его адресом назначения)
  2. Сетевая карта записывает пакет данных по указанному адресу памяти через DMA, который является RX, показанным на рисунке. кольцо, этот адрес выделяется и инициализируется драйвером сетевой карты.
  3. Обработка прерываний модуля драйвера
  • Сетевая карта уведомляет процессор через аппаратное прерывание (IRQ).,Скажите ему, что данные прибудут. В это время ЦП прервет текущую работу и перейдет из состояния пользователя в состояние Ядро.
  • ЦП вызывает зарегистрированную функцию прерывания в соответствии с таблицей прерываний. Эта функция прерывания будет передана соответствующей функции в драйвере (драйвере NIC).

Сбор пакетов прикладного уровня:

Дефекты ядра:

  1. Выделяются расходы на сбои,Прибытие большого количества данных вызовет частые прерывания (softirq), что сделает систему невыносимой.
  2. Необходимо скопировать пакет из буфера Ядро в пользовательский буфер, что приводит к накладным расходам на системные вызовы и копирование пакета данных.
  3. Для многих сетевых функциональных узлов протокол TCP/IP не требуется для канала пересылки данных.
  4. Хотя NAPI/Netmap и т. д. сокращают копирование Ядро в пространство пользователя, планирование операционной системы приводит к Замена кэша также негативно скажется на производительности. ;

Опять же: внедрение высокой производительности 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.

Язык кода:javascript
копировать
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.

boy illustration
RasaGpt — платформа чат-ботов на основе Rasa и LLM.
boy illustration
Nomic Embed: воспроизводимая модель внедрения SOTA с открытым исходным кодом.
boy illustration
Улучшение YOLOv8: EMA основана на эффективном многомасштабном внимании, основанном на межпространственном обучении, и эффект лучше, чем у ECA, CBAM и CA. Малые цели имеют очевидные преимущества | ICASSP2023
boy illustration
Урок 1 серии Libtorch: Тензорная библиотека Silky C++
boy illustration
Руководство по локальному развертыванию Stable Diffusion: подробные шаги и анализ распространенных проблем
boy illustration
Полностью автоматический инструмент для работы с видео в один клик: VideoLingo
boy illustration
Улучшения оптимизации RT-DETR: облегченные улучшения магистрали | Support Paddle облегченный rtdetr-r18, rtdetr-r34, rtdetr-r50, rtdet
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | Деформируемое внимание с большим ядром (D-LKA Attention), большое ядро ​​​​свертки улучшает механизм внимания восприимчивых полей с различными функциями
boy illustration
Создано Datawhale: выпущено «Руководство по тонкой настройке развертывания большой модели GLM-4»!
boy illustration
7B превышает десятки миллиардов, aiXcoder-7B с открытым исходным кодом Пекинского университета — это самая мощная модель большого кода, лучший выбор для корпоративного развертывания.
boy illustration
Используйте модель Huggingface, чтобы заменить интерфейс внедрения OpenAI в китайской среде.
boy illustration
Оригинальные улучшения YOLOv8: несколько новых улучшений | Сохранение исходной информации — алгоритм отделяемой по глубине свертки (MDSConv) |
boy illustration
Второй пилот облачной разработки | Быстро поиграйте со средствами разработки на базе искусственного интеллекта
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция с нулевым кодированием и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
Решенная Ошибка | Загрузка PyTorch медленная: TimeoutError: [Errno 110] При загрузке факела истекло время ожидания — Cat Head Tiger
boy illustration
Brother OCR, библиотека с открытым исходным кодом для Python, которая распознает коды проверки.
boy illustration
Новейшее подробное руководство по загрузке и использованию последней демонстрационной версии набора данных COCO.
boy illustration
Выпущен отчет о крупной модели финансовой отрасли за 2023 год | Полный текст включен в загрузку |
boy illustration
Обычные компьютеры также могут работать с большими моделями, и вы можете получить личного помощника с искусственным интеллектом за три шага | Руководство для начинающих по локальному развертыванию LLaMA-3
boy illustration
Одной статьи достаточно для анализа фактора транскрипции SCENIC на Python (4)
boy illustration
Бросая вызов ограничениям производительности небольших видеокарт, он научит вас запускать большие модели глубокого обучения с ограниченными ресурсами, а также предоставит полное руководство по оценке и эффективному использованию памяти графического процессора!
boy illustration
Команда Fudan NLP опубликовала 80-страничный обзор крупномасштабных модельных агентов, в котором в одной статье представлен обзор текущего состояния и будущего агентов ИИ.
boy illustration
[Эксклюзив] Вы должны знать о новой функции JetBrains 2024.1 «Полнострочное завершение кода», чтобы решить вашу путаницу!
boy illustration
Краткое изложение базовых знаний о регистрации изображений 1.0
boy illustration
Новейшее подробное руководство по установке и использованию библиотеки cv2 (OpenCV, opencv-python) в Python.
boy illustration
Легко создайте локальную базу знаний для крупных моделей на основе Ollama+AnythingLLM.
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание решения. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Одна статья поможет вам понять RAG (Retrival Enhanced Generation) | Введение в концепцию и теорию + практику работы с кодом (включая исходный код).
boy illustration
Эволюция архитектуры шлюза облачной разработки
boy illustration
Docker и Kubernetes [Разработка контейнерных приложений с помощью Python]