Настройте репозиторий yum OpenEuler и установите непосредственно с помощью команды yum:
# dpdk >= 21.11-2
yum install dpdk
yum install libconfig
yum install numactl
yum install libboundscheck
yum install libpcap
yum install gazelle
Настройте рабочую среду. Шаги для ускорения приложений с использованием Gazelle следующие:
Выберите ko для использования в зависимости от实际情况。Он предоставляет виртуальные сетевые порты и привязывает сетевые карты к функциям пользователя.
Если вы используете функцию виртуальных сетевых портов, используйте rte_kni.ko
:
modprobe rte_kni carrier="on"
Конфигурирование NetworkManager для управления kni сетевой картой
[root@localhost ~]# cat /etc/NetworkManager/conf.d/99-unmanaged-devices.conf
[keyfile]
unmanaged-devices=interface-name:kni
[root@localhost ~]# systemctl reload NetworkManager
Привязка сетевой карты к пользовательским модулям из ядра. Выберите один из них в зависимости от ситуации. Для сетевых карт mlx4 и mlx5 не требуется привязка к vfio или uio драйверам.
# Если можно использовать IOMMU
modprobe vfio-pci
# Если нельзя использовать IOMMU, но есть поддержка noiommu
modprobe vfio enable_unsafe_noiommu_mode=1
modprobe vfio-pci
# Другие случаи
modprobe igb_uio
Привяжите сетевую карту к выбранному в шаге 1 драйверу. Предоставьте доступ к ресурсам сетевой карты для пользовательских модулей.
# При использовании vfio-pci
dpdk-devbind -b vfio-pci enp3s0
# При использовании igb_uio
dpdk-devbind -b igb_uio enp3s0
Gazelle использует большие страницы для повышения эффективности. Настройте систему для хранения больших страниц с использованием прав root. Можно выбрать любой размер страницы. Поскольку каждая страница памяти требует одного файла-дескриптора (fd), рекомендуется использовать страницы размером 1 ГБ при работе с большим объемом памяти, чтобы избежать использования слишком многих fd. Выберите размер страницы в зависимости от ситуации и настройте достаточное количество больших страниц. Шаги для настройки больших страниц следующие:
# Настройка 2МБ большой страницы: на узле 0 настроено 2МБ * 1024 = 2ГБ
echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
# Настройка 1ГБ большой страницы: на узле 0 настроено 1ГБ * 5 = 5ГБ
```bash
echo 5 > /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages
# Проверьте результат конфигурации
```sh
grep Huge /proc/meminfo
```### 4. Монтирование huge страниц
Создайте два каталога для процесса lstack и процесса ltran для доступа к huge страницам. Шаги операции следующие:
```sh
mkdir -p /mnt/hugepages-ltran
mkdir -p /mnt/hugepages-lstack
chmod -R 700 /mnt/hugepages-ltran
chmod -R 700 /mnt/hugepages-lstack
# Примечание: /mnt/hugepages-ltran и /mnt/hugepages-lstack должны быть монтированы huge страницами одного размера.
mount -t hugetlbfs none /mnt/hugepages-ltran -o pagesize=2M
mount -t hugetlbfs none /mnt/hugepages-lstack -o pagesize=2M
Есть два способа использования Gazelle, выберите один в зависимости от ваших потребностей
Makefile
приложения для связи с liblstack.so
, как показано ниже:# Добавьте Makefile Gazelle в Makefile
-includefile /etc/gazelle/lstack.Makefile
# Скомпилируйте и добавьте переменную LSTACK_LIBS
gcc test.c -o test ${LSTACK_LIBS}
LD_PRELOAD
для загрузки библиотеки Gazelle
Переменная окружения GAZELLE_BIND_PROCNAME
указывает имя процесса, а LD_PRELOAD
указывает путь к библиотеке GazelleGAZELLE_BIND_PROCNAME=test LD_PRELOAD=/usr/lib6
lstack.conf
используется для указания параметров запуска lstack, с путём по умолчанию /etc/gazelle/lstack.conf
. Параметры конфигурационного файла следующие:| Опция | Формат параметра | Описание |
|:---|:---|:---|
| dpdk_args | --socket-mem (обязательно)unix_prefix
в конфигурационном файле ltan.conf
или параметром -u
командной строки gazellectl
. Не может содержать специальные символы, максимальная длина — 128 символов.
| host_addr | "192.168.xx.yy"
| IP-адрес протокольной стековой машины, должен совпадать со значением поля "bind"
в конфигурационном файле redis-server
.
| mask_addr | "255.255.xx.yy"
| Маска адреса.
| gateway_addr | "192.168.xx.1"
| Адрес шлюза.
| devices | "aa:bb:cc:dd:ee:ff"
| MAC-адрес для связи через сетевой адаптер, должен совпадать с конфигурацией bond_macs
в ltan.conf
; в режиме lstack
bond1
указывает основной интерфейс bond1
, выбирается один из значений bond_slave_mac
.
| send_connect_number | 4 | Положительное целое число, указывающее количество соединений, обрабатываемых за цикл протокольной стековой машины для передачи пакетов.
| read_connect_number | 4 | Положительное целое число, указывающее количество соединений, обрабатываемых за цикл протокольной стековой машины для приема пакетов.
| rpc_number | 4 | Положительное целое число, указывающее количество сообщений RPC, обрабатываемых за цикл протокольной стековой машины.
| nic_read_num | 128 | Положительное целое число, указывающее количество данных, считываемых с NIC за цикл работы протокольной стековой машины.
| tcp_conn_count | 1500 | Максимальное количество TCP-соединений. Этот параметр, умноженный на mbuf_count_per_conn
, представляет собой размер пула mbuf, выделенного при инициализации.При слишком маленьком значении запуск может завершиться ошибкой. tcp_conn_count * mbuf_count_per_conn * 2048
байт не должны превышать размер большой страницы.| mbuf_count_per_conn | 170 | Количество mbuf, необходимых для каждого TCP-соединения. Этот параметр, умноженный на tcp_conn_count
, представляет собой размер пула адресов mbuf, выделенного при инициализации. При слишком маленьком значении запуск может завершиться ошибкой. tcp_conn_count * mbuf_count_per_conn * 2048
байт не должны превышать размер большой страницы.
| nic_rxqueue_size | 4096 | Глубина очереди приема NIC, диапазон — 512-8192, значение по умолчанию — 4096.
| nic_txqueue_size | 2048 | Глубина очереди передачи сетевой карты, диапазон значений от 512 до 8192, значение по умолчанию — 2048.
| nic_vlan_mode | -1 | Переключатель режима VLAN, допустимое значение — номер VLAN, диапазон значений от -1 до 4094, -1 означает отключен, значение по умолчанию — -1.
| bond_mode | n | Режим объединения, поддерживает ACTIVE_BACKUP/8023AD/ALB, соответствующие значения равны 1/4/6; при установке в -1 или NULL указывает на то, что объединение не настроено.
| bond_slave_mac | "aa:bb:cc:dd:ee:ff;dd:aa:cc:dd:ee:ff" | Адреса MAC двух подинтерфейсов, используемых для создания объединения.
| bond_miimon | n | Время мониторинга соединения в миллисекундах, диапазон значений от 1 до 2^31 - 1, значение по умолчанию — 10 мс.
| flow_bifurcation | 0/1 | Переключатель разделения потока (альтернатива схеме KNI), который направляет неподдерживаемые пакеты в ядро через Gazelle.Значение по умолчанию — 0, что означает выключенное состояние.
Пример конфигурационного файла lstack.conf:
```conf
dpdk_args=["--socket-mem", "2048,0,0,0", "--huge-dir", "/mnt/hugepages-lstack", "--proc-type", "primary", "--legacy-mem", "--map-perfect"]use_ltran=1
kni_switch=0
low_power_mode=0
num_cpus="2, 22"
host_addr="192.168.1.10"
mask_addr="255.255.255.0"
gateway_addr="192.168.1.1"
devices="aa:bb:cc:dd:ee:ff"
send_connect_number=4
read_connect_number=4
rpc_number=4
nic_read_num=128
tcp_conn_count=1500
mbuf_count_per_conn=170
```Файл конфигурации `ltran.conf` используется для указания параметров запуска `ltran`, с путём по умолчанию `/etc/gazelle/ltran.conf`. При использовании `ltran` установите `use_ltran=1` в `lstack.conf` и настройте параметры следующим образом:
```markdown
| Категория функциональности | Опция | Формат параметра | Описание |
|:---------------------------|:-----------------|:------------------|:-------------------------------------------------------------------------------------------|
| kit | forward_kit | "dpdk" | Указывает модуль передачи/приёма сетевой карты. |
| | forward_kit_args | "-l<br>--socket-mem (обязательно)<br>--huge-dir (обязательно)<br>--proc-type (обязательно)<br>--legacy-mem (обязательно)<br>--map-perfect (обязательно)<br>-d<br>и т. д." | Параметры инициализации DPDK, см. документацию DPDK. |
| | | | Примечание: --map-perfect — расширенная функция, используемая для предотвращения захвата DPDK лишнего адресного пространства, что обеспечивает выделение дополнительного адресного пространства для lstack. |
| | | | Для PMD, не связанных с ltran, -d обязательно для загрузки, например librte_net_mlx5.so. |
| | | | -l привязывает ядра процессора, отличные от тех, которые привязаны к lstack, иначе производительность может значительно упасть. |
| kni | kni_switch | 0/1 | Переключатель rte_kni, значение по умолчанию равно 0 |
| unix | unix_prefix | "строка" | Префикс строки файла Unix-сокета, используемый для связи между процессами gazelle, значение по умолчанию пустое, согласуется с unix_prefix в конфигурационном файле lstack. |
| Category of functionality | Option | Parameter format | Description |
|:--------------------------|:-------------------|:-----------------|:---------------------------------------------------------------------------------------------|
| kit | forward_kit | "dpdk" | Specifies the module for network card transmission/reception. |
| | forward_kit_args | "-l<br>--socket-mem (required)<br>--huge-dir (required)<br>--proc-type (required)<br>--legacy-mem (required)<br>--map-perfect (required)<br>-d<br>and so on." | Initialization parameters for DPDK, see DPDK documentation. |
| | | | Note: --map-perfect — an extended feature used to prevent DPDK from capturing unnecessary address space, ensuring additional address space allocation for lstack. |
| | | | For PMDs not associated with ltran, -d is required for loading, e.g., librte_net_mlx5.so. |
| | | | -l binds processor cores different from those bound to lstack; otherwise performance may drop significantly. |
| kni | kni_switch | 0/1 | Switch for rte_kni, default value is 0 |
| unix | unix_prefix | "string" | Prefix string for the Unix socket file used for communication between gazelle processes, default value is empty, matches unix_prefix in the lstack configuration file. |
```conf или параметром `-u` командной строки `gazellectl` |
| Параметр | Настройка | Значение по умолчанию | Описание |
|-------------------|---------------------------|-----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| dispatcher | dispatch_max_clients | n | Максимальное количество клиентов, поддерживаемых ltran.<br>1. В многопроцессорной однониточной сценарии число поддерживаемых экземпляров lstack не должно превышать 32, при этом каждый экземпляр lstack имеет одну сетевую нить.<br>2. В однопроцессорной многониточной сценарии поддерживается только один экземпляр lstack, при этом число сетевых нитей каждого экземпляра lstack не должно превышать 32. |
| | dispatch_subnet | 192.168.xx.xx | Подсетевая маска, указывающая на сегмент подсети, где ltran может распознавать IP-адреса. Параметр является примером; настройте подсеть в соответствии со значением факта. |
| | dispatch_subnet_length | n | Длина подсети, указывающая на длину подсети, которую ltran может распознавать. Например, когда длина равна 4, она охватывает IP-адреса от 192.168.1.1 до 192.168.1.16. |
| bond | bond_mode | n | Режим объединения, в настоящее время поддерживаются только активное резервное копирование (Режим 1), значение равно 1. |
| | bond_miimon | n | Время мониторинга соединения объединения, в миллисекундах, диапазон от 1 до 2<sup>64</sup> - 1 - (1000 * 1000). |
| | bond_ports | `"0xaa"` | Используемые сетевые адаптеры DPDK, где 0x1 представляет первый адаптер. |
| | bond_macs | `"aa:bb:cc:dd:ee:ff"` | MAC-адреса, привязанные к сетевым адаптерам, должны совпадать с MAC-адресом KNI. ||| bond_mtu | n | Максимальный размер передачи данных, значение по умолчанию равно 1500, не может превышать 1500, минимальное значение равно 68, не может быть ниже 68 | Пример конфигурационного файла ltran.conf:
```conf
forward_kit_args="-l 0,1 --socket-mem 1024,0,0,0 --huge-dir /mnt/hugepages-ltran --proc-type primary --legacy-mem --map-perfect --syslog daemon"
forward_kit="dpdk"
```kni_switch=0
dispatch_max_clients=30
dispatch_subnet="192.168.1.0"
dispatch_subnet_length=8
bond_mode=1
bond_mtu=1500
bond_miimon=100
bond_macs="aa:bb:cc:dd:ee:ff"
bond_ports="0x1"
tcp_conn_scan_interval=10
ltran --config-file ./ltran.conf
export LSTACK_CONF_PATH=./lstack.conf
LD_PRELOAD=/usr/lib64/liblstack.so GAZELLE_BIND_PROCNAME=redis-server redis-server redis.conf
Gazelle оборачивает POSIX интерфейсы приложений, поэтому для приложений не требуется никаких модификаций кода.### 9. Команды отладки
gazellectl ltran
недоступна при отсутствии режима ltran
.-u
указывает префикс Unix сокета для межпроцессного взаимодействия Gazelle, который должен совпадать со значением параметра unix_prefix
в конфигурационном файле ltran.conf
или lstack.conf
.gazellectl lstack
поддерживается только без параметров LSTACK_OPTIONS
.Использование: gazellectl [-h | help]
или: gazellectl ltran {quit | show} [LTRAN_OPTIONS] [time] [-u UNIX_PREFIX]
или: gazellectl lstack show {ip | pid} [LSTACK_OPTIONS] [time] [-u UNIX_PREFIX]
```quit завершает процесс ltran
где LTRAN_OPTIONS :=
показывает все статистики ltran
-r, rate показывает статистику ltran каждую секунду
-i, instance показывает информацию о регистрации экземпляра ltran
-b, burst показывает длину пакета NIC ltran каждую секунду
-t, table {socktable | conntable} показывает таблицу сокетов или соединений ltran
-l, latency показывает задержку ltran
где LSTACK_OPTIONS := показывает все статистики lstack -r, rate показывает статистику lstack каждую секунду -s, snmp показывает SNMP lstack -c, connect показывает соединение lstack -l, latency показывает задержку lstack -x, xstats показывает расширенные статистики lstack -k, nic-features показывает состояние отключения протокола и других возможностей -a, aggregation [время] показывает агрегацию отправки/приёма lstack установка: уровень журналирования {ошибка | информация | отладка} установить уровень журналирования lstack низковольтный режим {0 | 1} установить низковольтный режим [время] измеряет время задержки, по умолчанию 1 с
Сетевые карты, используемые Gazelle, управляются DPDK, поэтому традиционный `tcpdump` не может захватывать пакеты с Gazelle. Вместо этого Gazelle использует инструмент `gazelle-pdump` из пакета `dpdk-tools` для захвата пакетов. Этот инструмент использует многопроцессный режим DPDK и делится памятью с процессами `lstack/ltran`. В режиме `ltran` инструмент `gazelle-pdump` может захватывать только те пакеты, которые прямым образом взаимодействуют с сетевой картой. Используя фильтрацию пакетов `tcpdump`, можно фильтровать пакеты, специфичные для `lstack`.
[Подробное использование](https://gitee.com/openeuler/gazelle/blob/master/doc/pdump.md)### 10. Примечания по использованию
#### 1. Расположение конфигурационного файла DPDK
Расположение конфигурационного файла DPDK зависит от привилегий пользователя:
- Если запущено от имени root пользователя, конфигурационный файл DPDK будет размещен в директории `/var/run/dpdk` после запуска DPDK.
- Если запущено от имени некоего другого пользователя, расположение конфигурационного файла DPDK определяется переменной окружения `XDG_RUNTIME_DIR`:
- Если `XDG_RUNTIME_DIR` пустая, конфигурационный файл DPDK будет размещен в директории `/tmp/dpdk`.
- Если `XDG_RUNTIME_DIR` не пустая, конфигурационный файл DPDK будет размещен в директории, указанной переменной `XDG_RUNTIME_DIR`.
- Обратите внимание, что некоторые машины могут иметь `XDG_RUNTIME_DIR` установленной по умолчанию.
#### 2. Влияние исправления уязвимости retbleed на производительность gazelle
- Версия ядра 5.10.0-60.57.0.85 включает исправление уязвимости retbleed, что приводит к снижению производительности gazelle на архитектуре x86. Для смягчения потери производительности, вызванной этой уязвимостью (CVE), пользователи могут добавить **retbleed=off mitigations=off** в параметры загрузки. Пользователи могут выбрать, следует ли смягчать эту уязвимость в зависимости от характеристик своего продукта, но она не смягчается по умолчанию по соображениям безопасности.- В тестовом сценарии, где отправитель находится в режиме ядра, а получатель — в режиме пользователя при использовании `ltran`, с пакетами размером 1024 байта, производительность упала с 17000 Мбит/с до 5000 Мбит/с.
- Аффективные версии включают openEuler-22.03-LTS (версия ядра равна или выше 5.10.0-60.57.0.85) и последующие версии SP.
- Дополнительные детали можно найти здесь: <https://gitee.com/openeuler/kernel/pulls/110> ## ОграниченияПри использовании Gazelle существуют определенные ограничения:
#### Функциональные ограничения
- Блокирующие режимы для принятия или установки соединения не поддерживаются.
- Поддерживается максимум 1500 TCP-соединений.
- В настоящее время поддерживаются протоколы TCP, ICMP, ARP и IPv4.
- При пинге Gazelle от соседнего устройства длина пакета должна быть меньше или равна 14792 байтам.
- Прозрачные огромные страницы не поддерживаются.
- ltran не поддерживает смешивание нескольких типов объединённых сетевых карт.
- В режиме активного-резервного объединения bond1 в ltran поддерживаются только сбои уровня канала (например, отключение кабеля), а не уровней физической среды (например, выключение питания NIC, отключение NIC).
- Нет поддержки многоконечников для сетевых адаптеров виртуальных машин.
#### Операционные ограничения
- Предоставленные командные строки и конфигурационные файлы по умолчанию требуют привилегий root. Пользователи без прав root должны повышать свои привилегии и менять владельца файла перед использованием.
- Для возврата сетевой карты пользователя обратно в драйвер ядра требуется завершение работы Gazelle.
- Огромные страницы нельзя создавать в подкаталогах монтирования для повторной монтировки.
- ltran требует минимум 1064 МБ огромных страниц памяти.
- Каждый поток протокольной стековой программы требует минимум 800 МБ огромных страниц памяти.- Поддерживаются только 64-битные системы.
- Создание версии x86 Gazelle использует опцию `-march=native`, что оптимизирует для архитектуры процессора окружения сборки (инструкции набора команд Intel® Xeon® Gold 5118 CPU @ 2.30 GHz). Процессор среды выполнения должен поддерживать инструкции SSE4.2, AVX, AVX2 и AVX-512.
- Максимальное количество фрагментов IP для переассемблирования IP-datagram составляет 10 (максимальная длина пакета при пинге 14792 байта), и протокол TCP не использует фрагментацию IP.
- Убедитесь, что конфигурация sysctl настраивает параметр `rp_filter` сетевой карты на значение 1; в противном случае, стек протоколов Gazelle может не работать так, как ожидалось, и стек протоколов ядра всё ещё будет использоваться.
- Без использования режима `ltran` интерфейсы KNI не могут быть настроены для поддержки только локальной связи и требуют настройки NetworkManager для того, чтобы он не управлял интерфейсами KNI до запуска.
- IP-адреса и адреса MAC виртуальных интерфейсов KNI должны совпадать с теми, которые указаны в конфигурационном файле `lstack.conf`.
- При отправке UDP-пакетов длиннее 45952 (32 * 1436) байтов размер `send_ring_size` следует увеличить до минимум 64.
## Предупреждение о рискахGazelle может иметь следующие угрозы безопасности, и пользователям следует оценивать эти риски в зависимости от сценариев использования.
**Общая память**
- **Текущий статус**
Огромные страницы монтируются в директорию `/mnt/hugepages-lstack`, а процессы, связанные с `liblstack.so`, создают файлы в директории `/mnt/hugepages-lstack` во время инициализации. Каждый файл соответствует одной огромной странице размером 2МБ и mmap-ируется. При получении информации о регистрации от `lstask`, `ltran` также mmap-ирует файлы в этой директории на основе конфигурации огромной страницы памяти, обеспечивая общую память огромных страниц.
`ltran` работает аналогично с огромными страницами памяти в директории `/mnt/hugepages-ltran`.
- **Текущие меры защиты**
Файлы огромных страниц имеют права доступа 600, доступны только пользователю `OWNER`, по умолчанию это пользователь `root`, и могут быть настроены для других пользователей.
Файлы огромных страниц имеют блокировки файлов DPDK, что препятствует прямой записи или отображению.
- **Точки риска**
Злонамеренные процессы из одного домена пользователей могут имитировать логику DPDK для разделения огромной страницы памяти через общие файлы, что может повредить огромную страницу памяти и привести к аварийному завершению программы Gazelle. Рекомендуется, чтобы все процессы пользователя принадлежали одному доверенному домену.**Ограничение трафика**
Gazelle не применяет ограничения на трафик, позволяя пользователям отправлять пакеты со скоростью максимальной производительности сетевой карты, что потенциально может вызвать заторы в сети.
**Имитация процессов**
Зарегистрированные легально процессы `lstack` с `ltran` могут имитировать друг друга (Процесс A может имитировать Процесс B) для отправки фальшивых сообщений `ltran`, изменяя информацию управления пересылкой `ltran`, что может вызывать аномалии в связи в Процессе B и потенциально утечки информации из Процесса B в Процесс A. Рекомендуется, чтобы все процессы `lstack` были доверенными процессами.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )