Ai
9 Star 3 Fork 54

src-openEuler/spdk
关闭

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
0005-lib-env_dpdk-Add-config-args-for-HSAK.patch 4.95 KB
一键复制 编辑 原始数据 按行查看 历史
swf504 提交于 2024-08-16 16:22 +08:00 . adapt for HSAK
From 4a2d5f1dbcb8ec9cd50624338c97772e5039a0c3 Mon Sep 17 00:00:00 2001
From: sunshihao <sunshihao@huawei.com>
Date: Mon, 22 Feb 2021 19:58:17 +0800
Subject: [PATCH 05/12] lib/env_dpdk: Add config args for HSAK
Signed-off-by: sunshihao <sunshihao@huawei.com>
---
lib/env_dpdk/init.c | 7 +++++++
lib/event/reactor.c | 29 +++++++++++++++++++++++++++--
lib/jsonrpc/jsonrpc_internal.h | 2 +-
lib/jsonrpc/jsonrpc_server_tcp.c | 4 ++--
4 files changed, 37 insertions(+), 5 deletions(-)
diff --git a/lib/env_dpdk/init.c b/lib/env_dpdk/init.c
index ea868c0..e94486c 100644
--- a/lib/env_dpdk/init.c
+++ b/lib/env_dpdk/init.c
@@ -439,6 +439,13 @@ build_eal_cmdline(const struct spdk_env_opts *opts)
#ifdef __linux__
+#ifdef SPDK_CONFIG_APP_RW
+ /* set IOVA use phys addr and keep same with DPDK16.11 */
+ args = push_arg(args, &argcount, _sprintf_alloc("--iova-mode=pa"));
+ if (args == NULL) {
+ return -1;
+ }
+#endif
if (opts->iova_mode) {
/* iova-mode=pa is incompatible with no_huge */
args = push_arg(args, &argcount, _sprintf_alloc("--iova-mode=%s", opts->iova_mode));
diff --git a/lib/event/reactor.c b/lib/event/reactor.c
index 1506feb..3cb2e12 100644
--- a/lib/event/reactor.c
+++ b/lib/event/reactor.c
@@ -16,6 +16,8 @@
#include "spdk/scheduler.h"
#include "spdk/string.h"
#include "spdk/fd_group.h"
+#include "spdk_internal/thread.h"
+#include "spdk/conf.h"
#ifdef __linux__
#include <sys/prctl.h>
@@ -28,6 +30,10 @@
#define SPDK_EVENT_BATCH_SIZE 8
+#ifdef SPDK_CONFIG_APP_RW
+struct spdk_iodev_thread_info lcore_thread_info[RTE_MAX_LCORE];
+#endif
+
static struct spdk_reactor *g_reactors;
static uint32_t g_reactor_count;
static struct spdk_cpuset g_reactor_core_mask;
@@ -36,6 +42,7 @@ static enum spdk_reactor_state g_reactor_state = SPDK_REACTOR_STATE_UNINITIALIZE
static bool g_framework_context_switch_monitor_enabled = true;
static struct spdk_mempool *g_spdk_event_mempool = NULL;
+static int16_t g_reactor_batch_size = SPDK_EVENT_BATCH_SIZE;
TAILQ_HEAD(, spdk_scheduler) g_scheduler_list
= TAILQ_HEAD_INITIALIZER(g_scheduler_list);
@@ -213,6 +220,20 @@ spdk_reactors_init(size_t msg_mempool_size)
uint32_t i, current_core;
char mempool_name[32];
+#ifdef SPDK_CONFIG_APP_RW
+ struct spdk_conf_section *sp;
+ sp = spdk_conf_find_section(NULL, "Reactor");
+ if (sp != 0) {
+ g_reactor_batch_size = spdk_conf_section_get_intval(sp, "BatchSize");
+ if (g_reactor_batch_size <= 0 || g_reactor_batch_size > SPDK_EVENT_BATCH_SIZE) {
+ g_reactor_batch_size = SPDK_EVENT_BATCH_SIZE;
+ }
+ syslog(LOG_INFO,"BatchSize is set to %d\n", g_reactor_batch_size);
+ } else {
+ SPDK_ERRLOG("config file does not contain [Reactor] section, which need to be provided\n");
+ }
+#endif
+
snprintf(mempool_name, sizeof(mempool_name), "evtpool_%d", getpid());
g_spdk_event_mempool = spdk_mempool_create(mempool_name,
262144 - 1, /* Power of 2 minus 1 is optimal for memory consumption */
@@ -556,7 +577,7 @@ event_queue_run_batch(void *arg)
return -errno;
}
- count = spdk_ring_dequeue(reactor->events, events, SPDK_EVENT_BATCH_SIZE);
+ count = spdk_ring_dequeue(reactor->events, events, g_reactor_batch_size);
if (spdk_ring_count(reactor->events) != 0) {
/* Trigger new notification if there are still events in event-queue waiting for processing. */
@@ -567,7 +588,7 @@ event_queue_run_batch(void *arg)
}
}
} else {
- count = spdk_ring_dequeue(reactor->events, events, SPDK_EVENT_BATCH_SIZE);
+ count = spdk_ring_dequeue(reactor->events, events, g_reactor_batch_size);
}
if (count == 0) {
@@ -969,6 +990,9 @@ reactor_run(void *arg)
}
if (g_reactor_state != SPDK_REACTOR_STATE_RUNNING) {
+#ifdef SPDK_CONFIG_APP_RW
+ lcore_thread_info[reactor->lcore].state = SPDK_THREAD_STATE_EXITED;
+#endif
break;
}
}
@@ -1070,6 +1094,7 @@ spdk_reactors_start(void)
spdk_env_thread_wait_all();
g_reactor_state = SPDK_REACTOR_STATE_SHUTDOWN;
+#endif
}
static void
diff --git a/lib/jsonrpc/jsonrpc_internal.h b/lib/jsonrpc/jsonrpc_internal.h
index d13ec7a..d1fe15e 100644
--- a/lib/jsonrpc/jsonrpc_internal.h
+++ b/lib/jsonrpc/jsonrpc_internal.h
@@ -12,7 +12,7 @@
#include "spdk/log.h"
-#define SPDK_JSONRPC_RECV_BUF_SIZE (32 * 1024)
+#define SPDK_JSONRPC_RECV_BUF_SIZE (4 * 1024 * 1024)
#define SPDK_JSONRPC_SEND_BUF_SIZE_INIT (32 * 1024)
#define SPDK_JSONRPC_SEND_BUF_SIZE_MAX (32 * 1024 * 1024)
#define SPDK_JSONRPC_ID_MAX_LEN 128
diff --git a/lib/jsonrpc/jsonrpc_server_tcp.c b/lib/jsonrpc/jsonrpc_server_tcp.c
index ceea4f6..6abfd43 100644
--- a/lib/jsonrpc/jsonrpc_server_tcp.c
+++ b/lib/jsonrpc/jsonrpc_server_tcp.c
@@ -298,7 +298,7 @@ jsonrpc_server_conn_recv(struct spdk_jsonrpc_server_conn *conn)
}
offset += rc;
- } while (rc > 0);
+ } while (rc > 1000);
if (offset > 0) {
/*
@@ -367,7 +367,7 @@ more:
return 0;
}
- SPDK_DEBUGLOG(rpc, "send() failed: %s\n", spdk_strerror(errno));
+ SPDK_ERRLOG("send() failed: %s\n", spdk_strerror(errno));
return -1;
}
--
2.43.0
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/src-openeuler/spdk.git
git@gitee.com:src-openeuler/spdk.git
src-openeuler
spdk
spdk
master

搜索帮助