Настройте 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
Привяжите сетевые карты от ядра к пользовательским модулям ko в зависимости от ситуации. Для сетевых карт mlx4 и mlx5 не требуется привязка к vfio или uio-драйверам.
# Если IOMMU может использоваться
modprobe vfio-pci
# Если IOMMU не может использоваться, но VFIO поддерживает 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МБ: на узле node0 конфигурация 2МБ * 1024 = 2ГБ
echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
# Настройка больших страниц памяти размером 1ГБ: на узле node0 конфигурация 1ГБ * 5 = 5ГБ
echo 5 > /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages
# Проверьте результат конфигурации
grep Huge /proc/meminfo
Создайте два каталога для доступа процессами lstack и ltran к большим страницам памяти. Операция выполняется следующими шагами:```sh mkdir -p /mnt/hugepages-ltran mkdir -p /mnt/hugepages-lstack chmod -R 700 /mnt/hugepages-ltran chmod -R 700 /mnt/hugepages-lstack
mount -t hugetlbfs nodev /mnt/hugepages-ltran -o pagesize=2M mount -t hugetlbfs nodev /mnt/hugepages-lstack -o pagesize=2M
### 5. Использование Gazelle в приложении
Существуют два способа использования Gazelle; выберите подходящий:- **Перекомпиляция приложения с подключением библиотеки Gazelle**
Измените makefile вашего приложения, чтобы подключить liblstack.so. Пример:
```
# Добавление Makefile Gazelle в makefile
-include /etc/gazelle/lstack.Makefile
# Компиляция с использованием LSTACK_LIBS переменной
gcc test.c -o test ${LSTACK_LIBS}
```
- **Использование LD_PRELOAD для загрузки библиотеки Gazelle**
Установите переменную окружения GAZELLE_BIND_PROCNAME для указания имени процесса и переменную LD_PRELOAD для указания пути к библиотеке Gazelle.
```
GAZELLE_BIND_PROCNAME=test LD_PRELOAD=/usr/lib64/liblstack.so ./test
```### 6. Конфигурационные файлы
- **lstack.conf** используется для указания параметров запуска lstack. По умолчанию этот файл находится по адресу `/etc/gazelle/lstack.conf`. Параметры конфигурационного файла представлены ниже:
| Параметр | Формат параметра | Описание |
|---------------------|----------------------------|---------------------------------------------------------------------------|
| dpdk_args | `--socket-mem` (необходимо) <br>`--huge-dir` (необходимо) <br>`--proc-type` (необходимо) <br>`--legacy-mem` <br>`--map-perfect` <br>`-d` <br>`--iova-mode` <br>и т. д. | Инициализационные параметры DPDK, см. описание DPDK <br>Для PMD, не связанных с `liblstack.so`, необходимо использовать `-d` для загрузки, например `librte_net_mlx5.so`. <br>Если используется непривилегированный пользователь при запуске и версия DPDK > 23.11, требуется указание режима iova как `va`, то есть `--iova-mode va` |
| use_ltran | 0/1 | Использование ltran |
| listen_shadow | 0/1 | Использование слушателя shadow fd, используется при одиночном listen потоке и нескольких протокольных потоках |
| num_cpus | `"0,2,4 ... "` | Номера CPU, на которых привязываются потоки lstack, количество номеров равно количеству потоков lstack (меньше либо равно количеству очередей сетевой карты). Можно выбрать CPU по NUMA |
| app_bind_numa | 0/1 | Привязка потоков epoll и poll приложения к NUMA протокола, значение по умолчанию равно 1, то есть привязка |
| app_exclude_cpus | `"7,8,9 ... "` | Номера CPU, от которых не будут привязываться потоки epoll и poll приложения, действует только если `app_bind_numa = 1` |
| low_power_mode | 0/1 | Включение режима низкого энергопотребления, пока не поддерживается |
| kni_switch | 0/1 | Переключатель `rte_kni`, значение по умолчанию равно 0 |
---
Также учтены все правила и требования к оформлению текста.Может быть включен только при отсутствии использования **ltran**
**unix_prefix**|"строка"|Строка префикса Unix-сокета для межпроцессного взаимодействия gazelle, значение по умолчанию пустое, должно совпадать с конфигурацией **unix_prefix** в **ltran.conf** или параметром **-u** в команде **gazellectl**. Не может содержать специальные символы, максимальная длина — 128 символов.
**host_addr**|"192.168.xx.xx"|IP-адрес хоста, должен совпадать с полем **bind** в конфигурационном файле **redis-server**
**mask_addr**|"255.255.xx.xx"|Маска сети
**gateway_addr**|"192.168.xx.1"|Адрес шлюза
**devices**|"aa:bb:cc:dd:ee:ff"|MAC-адрес сетевой карты для связи, должен совпадать с конфигурацией **bond_macs** в **ltran.conf**; в режиме объединения **bond1** lstack можно указать основной интерфейс **bond1**, значение должно быть одним из значений **bond_slave_mac**
**send_connect_number**|4|Устанавливается положительным целым числом, представляет количество соединений для отправки данных в каждом цикле протокола
**read_connect_number**|4|Устанавливается положительным целым числом, представляет количество соединений для приема данных в каждом цикле протокола
**rpc_number**|4|Устанавливается положительным целым числом, представляет количество сообщений RPC для обработки в каждом цикле протокола
**nic_read_num**|128|Устанавливается положительным целым числом, представляет количество пакетов данных для чтения из сетевой карты в каждом цикле протокола|tcp_conn_count|1500|Максимальное количество TCP-соединений. Это значение умножается на mbuf_count_per_conn для получения размера пула mbuf при инициализации. Слишком маленькое значение может вызвать ошибку при запуске. tcp_conn_count * mbuf_count_per_conn * 2048 байт не должны превышать размер большой страницы||mbuf_count_per_conn|170|Количество mbufs для каждого TCP-соединения. Умножение этого параметра на tcp_conn_count даёт размер пула адресов mbuffs, выделенного при инициализации. Недостаточное значение может привести к провалу запуска, а tcp_conn_count * mbuf_count_per_conn * 2048 байт не должно превышать размер большой страницы|
|nic_rxqueue_size|4096|Глубина очереди приема сетевой карты. Диапазон значений от 512 до 8192, по умолчанию равно 4096|
|nic_txqueue_size|2048|Глубина очереди передачи сетевой карты. Диапазон значений от 512 до 8192, по умолчанию равно 2048|
|nic_vlan_mode|-1|Переключатель режима VLAN. Принимает значения vlanid в диапазоне от -1 до 4094, где -1 означает отключение режима VLAN, по умолчанию равно -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-адреса двух slave-интерфейсов, используемых для объединения|
|bond_miimon|n|Время мониторинга связи, измеряется в миллисекундах. Диапазон значений от 1 до 2^31 - 1, по умолчанию равно 10 миллисекунд|
||flow_bifurcation|0/1|Переключатель разделения потока (альтернатива kni-схеме), который позволяет Gazelle перенаправлять пакеты, которые невозможно обработать, в ядро системы. По умолчанию равно 0, что означает отключенное состояние.|Пример файла `lstack.conf`:
```markdown
|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`, а также настроить следующие параметры:
- `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`: число RPC (`4`)
- `nic_read_num`: число чтений NIC (`128`)
- `tcp_conn_count`: общее количество TCP-соединений (`1500`)
- `mbuf_count_per_conn`: число mbuf на каждое соединение (`170`)
|Функциональная категория|Опция|Формат параметров|Описание|
|:----------------------|:----|:---------------|:-------|
|kit|forward_kit|"dpdk"|Указывает модуль передачи данных для сетевой карты.<br>Зарезервированное поле, которое в настоящее время не используется.|
||forward_kit_args|-l<br>--socket-mem(обязательно)<br>--huge-dir(обязательно)<br>--proc-TYPE(обязательно)<br>--legacy-mem(обязательно)<br>--map-perfect(обязательно)<br>-d<br>и т. д.|Параметры инициализации DPDK, см. описание DPDK.<br>Примечание: --map-perfect — расширенная функциональность, используемая для предотвращения использования DPDK лишнего адресного пространства, что гарантирует наличие дополнительного адресного пространства для lstack.|<br>Для PMD, не связанных с `ltran`, обязательно использовать `-d` для загрузки, например `librte_net_mlx5.so`.
<br>`-l` привязывает CPU-ядра, которые не должны совпадать с привязанными к `lstack`, иначе производительность может значительно упасти.
<br>|kni|kni_switch|0/1|Переключатель `rte_kni`, значение по умолчанию равно 0|
<br>|unix|unix_prefix|"`строка`"|Строка префикса файла Unix socket, используемого для межпроцессного взаимодействия Gazelle. По умолчанию пустое значение, должно совпадать с конфигурацией `unix_prefix` в `lstack.conf` или параметром `-u` в `gazellectl`|
<br>|dispatcher|dispatch_max_clients|n|Максимальное количество клиентов, поддерживаемых `ltranc`.
<br>1. В многопроцессорной однониточной среде поддерживаются до 32 экземпляров `lstack`, каждый экземпляр имеет один сетевой поток
<br>2. В однопроцессорной многониточной среде поддерживается один экземпляр `lstack`, число сетевых потоков в этом экземпляре не превышает 32|
<br>||dispatch_subnet|192.168.xx.xx|Подсетевая маска, указывающая на сеть, содержащую IP-адреса, которые может распознать `ltranc`. Пример параметра, реальные значения подсети должны быть указаны отдельно. |
<br>||dispatch_subnet_length|n|Длина подсети, указывающая на длину подсети, которую может распознать `ltranc`. Например, при значении `length` равном 4, диапазон IP-адресов будет 192.168.1.1-192.168.1.16|
<br>|bond|bond_mode|n|Режим объединения, в настоящее время поддерживаются только Active Backup (Mode1), значение равно 1|||bond_miimon|n|Время мониторинга связи объединения, единицы измерения — миллисекунды, значение должно находиться в диапазоне от 1 до 2^64 - 1 - (1000 * 1000)|
||bond_ports|"0xaa"|Используемые сетевые карты DPDK, 0x1 указывает на первую карту|
||bond_macs|"aa:bb:cc:dd:ee:ff"|MAC-адреса, привязанные к сетевым картам, должны совпадать с MAC-адресами KNI|
||bond_mtu|n|Максимальный размер передачи данных (MTU), значение по умолчанию равно 1500, не должно превышать 1500, минимальное значение равно 68, не должно быть меньше 68|
### 7. Запуск приложения
- Запуск процесса `ltran`
Если это однопоточный процесс и сетевой адаптер поддерживает несколько очередей, то сообщения распределяются между потоками с использованием нескольких очередей сетевого адаптера, а процесс `ltran` не запускается; в этом случае значение конфигурации `use_ltran` в `lstack.conf` равно 0.
При запуске процесса `ltran` без указания файла конфигурации через параметр `--config-file` используется по умолчанию путь `/etc/gazelle/ltran.conf`.
```sh
ltran --config-file ./ltran.conf
LSTACK_CONF_PATH
для указания пути к файлу конфигурации, используется по умолчанию путь /etc/gazelle/lstack.conf
.export LSTACK_CONF_PATH=./lstack.conf
LD_PRELOAD=/usr/lib64/liblstack.so GAZELLE_BIND_PROCNAME=redis-server redis-server redis.conf
```### 8. API
Программа Gazelle wrap использует POSIX-интерфейсы, поэтому изменения в коде приложения не требуются.
### 9. Команды отладки
- При отсутствии режима ltran недоступны команды gazellectl ltran xxx
- Параметр `-u` указывает префикс Unix-сокета для межпроцессного взаимодействия Gazelle, который совпадает со значением параметра `unix_prefix` в конфигурационных файлах `ltran.conf` или `lstack.conf`.
- Для UDP-соединений в настоящее время команда `gazellectl lstack xxx` поддерживается только без параметров `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
-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 показывает lstack snmp
-c, connect показывает lstack connect
-l, latency показывает lstack latency
-x, xstats показывает lstack xstats
-k, nic-features показывает состояние отключения протокола и других возможностей
-a, aggregation [время] показывает lstack отправку/получение агрегации
установка:
loglevel {error | info | debug} устанавливает уровень логгирования lstack
lowpower {0 | 1} устанавливает низкое энергопотребление
[время] измеряет время задержки по умолчанию 1С
Пакетный анализатор пакетов
Используемые Gazelle сетевые карты находятся под управлением DPDK, поэтому обычный tcpdump не может захватывать пакеты Gazelle. В качестве альтернативы Gazelle использует инструмент gazelle-pdump из пакета dpdk-tools для анализа пакетов. Этот инструмент работает в многопоточном режиме DPDK с использованием lstack/ltran процессов и общего буфера памяти.В режиме ltran gazelle-pdump может захватывать только те пакеты, которые непосредственно взаимодействуют с сетевой картой; использование tcpdump позволяет фильтровать пакеты конкретной lstack.Детальное руководство по использованию
Если вы являетесь пользователем root, после запуска DPDK конфигурационные файлы будут помещены в директорию /var/run/dpdk
;
Если вы не являетесь пользователем root, расположение конфигурационных файлов DPDK будет зависеть от переменной окружения XDG_RUNTIME_DIR
.
XDG_RUNTIME_DIR
пустая, конфигурационные файлы DPDK будут помещены в директорию /tmp/dpdk
;XDG_RUNTIME_DIR
не пустая, конфигурационные файлы DPDK будут помещены в указанную директорию XDG_RUNTIME_DIR
;XDG_RUNTIME_DIR
.#### 2. Влияние патча для устранения уязвимости Retbleed на производительность Gazelleaccept
или connect
отсутствует.-march=native
, которая оптимизирована для процессора Intel® Xeon® Gold 5118 CPU @ 2.30GHz. Требуется поддержка инструкций SSE4.2, AVX, AVX2 и AVX-512 в среде выполнения.Исправлено: "безопасностные" -> "безопасность"Общее пространство памяти
/mnt/hugepages-lstack
, процессы, связанные с liblstack.so
, при запуске создают файлы в этой директории, каждый файл соответствует большой странице памяти размером 2МБ, и используют mmap
для этих файлов. При получении информации о регистрации lstask
от ltran
, последний использует конфигурацию больших страниц памяти и также использует mmap
для файлов в директории, обеспечивая общую доступность больших страниц памяти.
Аналогично для больших страниц памяти в директории /mnt/hugepages-ltran
.root
, но можно настроить других пользователей;
Большой страницы имеют блокировки файлов DPDK, поэтому они не могут быть напрямую записаны или отображены.lstack
, зарегистрированных в ltran
, могут имитировать друг друга, отправляя ложные сообщения в ltran
, что приводит к изменениям информации управления пересылкой в ltran
. Это может вызвать проблемы с коммуникацией процесса B, а также утечки данных процесса A. Рекомендуется, чтобы все процессы lstack
были доверенными.Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )