1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/openeuler-gazelle

 / Детали:

Выход сервера с ошибкой core dump при использовании пакетной длины 256 КБ в режиме потока

Предстоит сделать
Владелец
Создано  
10.03.2025

1. Информация о дефекте
[Операционная система версия] (например, openEuler-22.03-LTS, используйте команду "cat /etc/os-release")
openeulerversion=openEuler-22.03-LTS-SP3
compiletime=2023-12-30-12-21-52
gccversion=10.3.1-49.oe2203sp3
kernelversion=5.10.0-182.0.0.95.oe2203sp3
openjdkversion=1.8.0.392.b08-3.oe2203sp3
[Версия ядра] (например, kernel-5.10.0-60.138.0.165, используйте команду "uname -r")
5.10.0-182.0.0.95.oe2203sp3.aarch64
[Программа и её версия] (например, kernel-5.10.0-60.138.0.165, используйте команду "rpm -q имя_пакета")
dpdk-21.11-79.aarch64
gazelle-1.0.2-80.oe2203sp3.aarch64
[Шаги воспроизведения проблемы]: Опишите конкретные действия

  1. Запустите сервер с параметрами LD_PRELOAD=/usr/lib64/liblstack.so GAZELLE_BIND_PROCNAME=example /root/example -a server -D tcp -i 124.88.112.13 -p 33333 -P 262144 -t 100 -c 30```
    dpdk_args=["--socket-mem", "1500,1500,0,0", "--huge-dir", "/mnt/hugepages-lstack", "--proc-type", "primary", "-d", "/usr/lib64/librte_net_mlx5.so"]
    stack_thread_mode="run-to-wakeup"

ltran режим требует добавления "--map-perfect" и "--legacy-mem" в dpdk_args

use_ltran=0
kni_switch=0
flow_bifurcation=0
low_power_mode=0

необходимое количество mbuf = tcp_conn_count * mbuf_count_per_conn

tcp_conn_count=1500
mbuf_count_per_conn=138

размер отправочной очереди, по умолчанию 32, максимум 2048

если длина UDP пакета превышает 45952 (32 * 1436) байт, то значение send_ring_size должно быть как минимум 64.

send_ring_size = 32

размер приемной очереди, по умолчанию 128, максимум 2048

recv_ring_size = 128

параметры протокольной стековой нити на каждом цикле

чтение данных из протокольного стека в recv_ring

read_connect_number = 4

количество RPC сообщений для обработки

rpc_number = 4

количество пакетов NIC для чтения

nic_read_number = 128
nic_rxqueue_size = 4096
nic_txqueue_size = 2048

каждому ядру CPU назначается одна протокольная стековая нить.

num_cpus="23"

привязка рабочей нити приложения к NUMA в epoll/poll.

app_bind_numa=1

установка аффинитет основной нити приложения DPDK.

main_thread_affinity=0
host_addr="124.88.112.13"
mask_addr="255.255.0.0"
gateway_addr="124.88.0.1"
devices="24:8a:07:b7:36:96"

0: использовать правила RSS

1: использовать правило TCP-кортежа для указания пакета в очередь NIC

tuple_filter=0

tuple_filter=1, ниже указаны конфигурационные параметры

num_process=1
process_numa="0,1"
process_idx=0

tuple_filter=0, ниже указаны конфигурационные параметры

listen_shadow=1

режим VLAN; поддерживается только от -1 до 4094, -1 — выключен

nic_vlan_mode=-1

 bond_mode=6
 # MAC-адреса рабочих станций объединения, разделённые точкой с запятой, поддерживаются только два MAC-адреса
 # bond_slave_mac="aa:bb:cc:dd:ee:ff;gg:hh:ii:jj:kk:ll"
 rpc_msg_max=4096
 udp_enable=1
 bond_slave_mac="24:8a:07:b7:36:96;24:8a:07:b7:36:97"
  1. Запустите клиентскую сторону
    LD_PRELOAD=/usr/lib64/liblstack.so GAZELLE_BIND_PROCNAME=example /root/example -a client -D tcp -i 124.88.112.13 -p 33333 -P 262144 -t 100 -c 30
stack_thread_mode="run-to-wakeup"
# режим ltran требует добавления "--map-perfect" и "--legacy-mem" в dpdk_args
use_ltran=0
kni_switch=0
flow_bifurcation=0
low_power_mode=0
# необходимое количество mbuf = tcp_conn_count * mbuf_count_per_conn
tcp_conn_count=1500
mbuf_count_per_conn=300
# размер кольцевого буфера отправки, по умолчанию 32, максимум 2048
send_ring_size = 32
# размер кольцевого буфера приема, по умолчанию 128, максимум 2048
recv_ring_size = 128
# параметры протокола стека потока на каждом цикле
# чтение данных из протокола стека в recv_ring
read_connect_number = 4
# количество обрабатываемых RPC сообщений
rpc_number = 4
# количество пакетов NIC для чтения
nic_read_number = 128
nic_rxqueue_size = 4096
nic_txqueue_size = 2048
# каждый ядро процессора запускает поток протокола стека.
num_cpus="23"
# привязка основного потока приложения к NUMA в epoll/poll.
app_bind_numa=1
# установка аффинитет основного потока приложения DPDK.
main_thread_affinity=0
host_addr="124.88.31.121"
mask_addr="255.255.0.0"
gateway_addr="124.88.0.1"
devices="24:8a:07:b7:39:ca"
# 0: использовать правило RSS
# 1: использовать правило TCP-кортежа для указания пакета в очередь NIC
tuple_filter=0
# tuple_filter=1, ниже указаны действительные конфигурации
num_process=1
process_numa="0,1"
process_idx=0
# tuple_filter=0, ниже указаны действительные конфигурации
listen_shadow=1
# режим VLAN; поддерживаются значения от -1 до 4094, -1 — отключен
nic_vlan_mode=-1
# режим объединения; поддерживаются только режимы объединения 4 или 6, -1 — отключен
bond_mode=6# MAC-адреса рабочих станций объединения, разделённые точкой с запятой, поддерживаются только два MAC-адреса
 # bond_slave_mac="aa:bb:cc:dd:ee:ff;gg:hh:ii:jj:kk:ll"
 rpc_msg_max=4096
 udp_enable=1
 bond_slave_mac="24:8a:07:b7:39:ca;24:8a:07:b7:39:cb"```
**[Фактический результат]**, пожалуйста, опишите результат проблемы и её влияние.
Корневой сбой был вызван командой `/root/example -a server -D tcp -i 124.88.112.13 -p 33333 -P 262144 -t 100 -c 30`.
Программа была прервана сигналом SIGSEGV (ошибка раздела памяти).
```(gdb) bt
#0  0x0000ffffb918d008 в del_sock_event_nolock() из /usr/lib64/liblstack.so
#1  0x0000ffffb918d06c в del_sock_event() из /usr/lib64/liblstack.so
#2  0x0000ffffb91a0c28 в do_lwip_read_from_stack() из /usr/lib64/liblstack.so
#3  0x0000000000401c38 в read_api(fd=1955, 
    buffer_in=0xfffee4001600 "stuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghij"... , length=262144, api=0x408c80 "readwrite") 
    в /root/yinbin/gazelle_rpm_build/update_example_of_9.82.1.253_data/gitee/gazelle/examples/src/business.c:27
#4  0x0000000000402304 в server_ans_read(client_addr=0xffff827c7158, 
    buffer_in=0xfffee4001600 "stuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghij"... , server_base_info=<синтетический указатель>, socket_fd=1955)
    в /root/yinbin/gazelle_rpm_build/update_example_of_9.82.1.253_data/gitee/gazelle/examples/src/business.c:167
#5  server_ans(fd=1955, pktlen=<оптимизировано>, api=0x408c80 "readwrite", domain=domain@entry=0x409238 "tcp")
    в /root/yinbin/gazelle_rpm_build/update_example_of_9.82.1.253_data/gitee/gazelle/examples/src/business.c:252
#6  0x0000000000407a6c в sersum_process_tcp_accept_event(curr_epev=0x36bedc90, server_unit=0x36beda50)
    в /root/yinbin/gazelle_rpm_build/update_example_of_9.82.1.253_data/gitee/gazelle/examples/src/server.c:696
#7  sersum_process_epollin_event(curr_epev=0x36bedc90, server_unit=0x36beda50)
    в /root/yinbin/gazelle_rpm_build/update_example_of_9.82.1.253_data/gitee/gazelle/examples/src/server.c:734
#8  sersum_proc_epevs(server_unit=server_unit@entry=0x36beda50)
    в /root/yinbin/gazelle_rpm_build/update_example_of_9.82.1.253_data/gitee/gazelle/examples/src/server.c:761
#9  0x0000000000407cc0 в sersum_create_and_run(arg=0x36beda50)    в /root/yinbin/gazelle_rpm_build/update_example_of_9.82.1.253_data/gitee/gazelle/examples/src/server.c:784
#10 0x0000ffffb8fa2308 в start_thread (arg=0xfffff91914d0) в pthread_create.c:443
#11 0x0000ffffb9009b1c в thread_start () в ../../sysdeps/unix/sysv/linux/aarch64/clone.S:79
```   **[Ожидаемый результат]**, пожалуйста, опишите ожидаемый результат и его влияние.
  Программа должна завершиться корректно.

Комментарий (0)

GitLife Service Account Задача создана
GitLife Service Account добавлено
 
sig/sig-high-perform
label.
Развернуть журнал операций

Вход Перед тем как оставить комментарий

Статус
Ответственный
Контрольная точка
Pull Requests
Связанные запросы на слияние могут быть закрыты после их объединения
Ветки
Дата начала   -   Крайний срок
-
Закрепить/Открепить
Приоритет
Участники(1)
1
https://api.gitlife.ru/oschina-mirror/openeuler-gazelle.git
git@api.gitlife.ru:oschina-mirror/openeuler-gazelle.git
oschina-mirror
openeuler-gazelle
openeuler-gazelle