1 Star 0 Fork 32

Ren Zhijie/gazelle

forked from src-openEuler/gazelle 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
0097-fix-rte_ring_create-free-time-consuming.patch 5.08 KB
一键复制 编辑 原始数据 按行查看 历史
From 66b0ba4be7a5c3b79482eafdc28fd75e8f44e761 Mon Sep 17 00:00:00 2001
From: jiangheng <jiangheng14@huawei.com>
Date: Wed, 27 Dec 2023 10:26:07 +0800
Subject: [PATCH] fix rte_ring_create/free time consuming
---
src/lstack/core/lstack_dpdk.c | 27 +++------------------------
src/lstack/core/lstack_lwip.c | 14 ++++++--------
src/lstack/include/lstack_dpdk.h | 1 -
3 files changed, 9 insertions(+), 33 deletions(-)
diff --git a/src/lstack/core/lstack_dpdk.c b/src/lstack/core/lstack_dpdk.c
index 6933ecd..729a84c 100644
--- a/src/lstack/core/lstack_dpdk.c
+++ b/src/lstack/core/lstack_dpdk.c
@@ -245,43 +245,22 @@ struct rte_mempool *create_mempool(const char *name, uint32_t count, uint32_t si
return mempool;
}
-struct rte_ring *create_ring(const char *name, uint32_t count, uint32_t flags, int32_t queue_id)
-{
- char ring_name[RTE_RING_NAMESIZE] = {0};
- struct rte_ring *ring;
-
- int32_t ret = snprintf_s(ring_name, sizeof(ring_name), RTE_RING_NAMESIZE - 1,
- "%s_%d_%d", name, get_global_cfg_params()->process_idx, queue_id);
- if (ret < 0) {
- LSTACK_LOG(ERR, LSTACK, "snprintf_s fail ret=%d\n", ret);
- return NULL;
- }
-
- ring = rte_ring_create(ring_name, count, rte_socket_id(), flags);
- if (ring == NULL) {
- LSTACK_LOG(ERR, LSTACK, "%s create failed. errno: %d.\n", name, rte_errno);
- }
-
- return ring;
-}
-
int32_t create_shared_ring(struct protocol_stack *stack)
{
lockless_queue_init(&stack->rpc_queue);
if (use_ltran()) {
- stack->rx_ring = create_ring("RING_RX", VDEV_RX_QUEUE_SZ, RING_F_SP_ENQ | RING_F_SC_DEQ, stack->queue_id);
+ stack->rx_ring = gazelle_ring_create_fast("RING_RX", VDEV_RX_QUEUE_SZ, RING_F_SP_ENQ | RING_F_SC_DEQ);
if (stack->rx_ring == NULL) {
return -1;
}
- stack->tx_ring = create_ring("RING_TX", VDEV_TX_QUEUE_SZ, RING_F_SP_ENQ | RING_F_SC_DEQ, stack->queue_id);
+ stack->tx_ring = gazelle_ring_create_fast("RING_TX", VDEV_TX_QUEUE_SZ, RING_F_SP_ENQ | RING_F_SC_DEQ);
if (stack->tx_ring == NULL) {
return -1;
}
- stack->reg_ring = create_ring("SHARED_REG_RING", VDEV_REG_QUEUE_SZ, RING_F_SP_ENQ | RING_F_SC_DEQ,
- stack->queue_id);
+ stack->reg_ring = gazelle_ring_create_fast("SHARED_REG_RING", VDEV_REG_QUEUE_SZ, RING_F_SP_ENQ | RING_F_SC_DEQ);
if (stack->reg_ring == NULL) {
return -1;
}
diff --git a/src/lstack/core/lstack_lwip.c b/src/lstack/core/lstack_lwip.c
index c167ba4..4953f3d 100644
--- a/src/lstack/core/lstack_lwip.c
+++ b/src/lstack/core/lstack_lwip.c
@@ -72,13 +72,13 @@ static void reset_sock_data(struct lwip_sock *sock)
/* check null pointer in ring_free func */
if (sock->recv_ring) {
free_ring_pbuf(sock->recv_ring);
- rte_ring_free(sock->recv_ring);
+ gazelle_ring_free_fast(sock->recv_ring);
sock->recv_ring = NULL;
}
if (sock->send_ring) {
free_ring_pbuf(sock->send_ring);
- rte_ring_free(sock->send_ring);
+ gazelle_ring_free_fast(sock->send_ring);
sock->send_ring = NULL;
}
@@ -169,7 +169,6 @@ static bool replenish_send_idlembuf(struct protocol_stack *stack, struct lwip_so
void do_lwip_init_sock(int32_t fd)
{
- static _Atomic uint32_t name_tick = 0;
struct protocol_stack *stack = get_protocol_stack();
struct lwip_sock *sock = get_socket(fd);
if (sock == NULL) {
@@ -178,18 +177,17 @@ void do_lwip_init_sock(int32_t fd)
reset_sock_data(sock);
- sock->recv_ring = create_ring("sock_recv", SOCK_RECV_RING_SIZE, RING_F_SP_ENQ | RING_F_SC_DEQ,
- atomic_fetch_add(&name_tick, 1));
+ sock->recv_ring = gazelle_ring_create_fast("sock_recv", SOCK_RECV_RING_SIZE, RING_F_SP_ENQ | RING_F_SC_DEQ);
if (sock->recv_ring == NULL) {
LSTACK_LOG(ERR, LSTACK, "sock_recv create failed. errno: %d.\n", rte_errno);
return;
}
- sock->send_ring = create_ring("sock_send",
+ sock->send_ring = gazelle_ring_create_fast("sock_send",
get_global_cfg_params()->send_ring_size,
- RING_F_SP_ENQ | RING_F_SC_DEQ,
- atomic_fetch_add(&name_tick, 1));
+ RING_F_SP_ENQ | RING_F_SC_DEQ);
if (sock->send_ring == NULL) {
+ gazelle_ring_free_fast(sock->recv_ring);
LSTACK_LOG(ERR, LSTACK, "sock_send create failed. errno: %d.\n", rte_errno);
return;
}
diff --git a/src/lstack/include/lstack_dpdk.h b/src/lstack/include/lstack_dpdk.h
index 05f5bc6..4a160e0 100644
--- a/src/lstack/include/lstack_dpdk.h
+++ b/src/lstack/include/lstack_dpdk.h
@@ -44,7 +44,6 @@ struct rte_mbuf;
int32_t fill_mbuf_to_ring(struct rte_mempool *mempool, struct rte_ring *ring, uint32_t mbuf_num);
int32_t dpdk_eal_init(void);
int32_t pktmbuf_pool_init(struct protocol_stack *stack);
-struct rte_ring *create_ring(const char *name, uint32_t count, uint32_t flags, int32_t queue_id);
struct rte_mempool *create_mempool(const char *name, uint32_t count, uint32_t size,
uint32_t flags, int32_t idx);
int32_t create_shared_ring(struct protocol_stack *stack);
--
2.27.0
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/byterzj/gazelle.git
git@gitee.com:byterzj/gazelle.git
byterzj
gazelle
gazelle
master

搜索帮助