137 lines
4.5 KiB
Diff
137 lines
4.5 KiB
Diff
From 71defaec9e10ee23bf9b3e01989dac4feab94d82 Mon Sep 17 00:00:00 2001
|
|
From: jiangheng <jiangheng14@huawei.com>
|
|
Date: Mon, 9 Oct 2023 10:28:30 +0800
|
|
Subject: [PATCH] statck: the for loop in lstack thread is defined as
|
|
stack_polling
|
|
|
|
---
|
|
src/lstack/core/lstack_protocol_stack.c | 85 ++++++++++++----------
|
|
src/lstack/include/lstack_protocol_stack.h | 1 +
|
|
2 files changed, 49 insertions(+), 37 deletions(-)
|
|
|
|
diff --git a/src/lstack/core/lstack_protocol_stack.c b/src/lstack/core/lstack_protocol_stack.c
|
|
index 09cba14..ea85bc1 100644
|
|
--- a/src/lstack/core/lstack_protocol_stack.c
|
|
+++ b/src/lstack/core/lstack_protocol_stack.c
|
|
@@ -432,18 +432,60 @@ END:
|
|
return NULL;
|
|
}
|
|
|
|
-static void* gazelle_stack_thread(void *arg)
|
|
+void stack_polling(uint32_t wakeup_tick)
|
|
{
|
|
- struct thread_params *t_params = (struct thread_params*) arg;
|
|
-
|
|
- uint16_t queue_id = t_params->queue_id;
|
|
struct cfg_params *cfg = get_global_cfg_params();
|
|
uint8_t use_ltran_flag = cfg->use_ltran;
|
|
bool kni_switch = cfg->kni_switch;
|
|
bool use_sockmap = cfg->use_sockmap;
|
|
- uint32_t read_connect_number = cfg->read_connect_number;
|
|
+ bool stack_mode_rtc = cfg->stack_mode_rtc;
|
|
uint32_t rpc_number = cfg->rpc_number;
|
|
uint32_t nic_read_number = cfg->nic_read_number;
|
|
+ uint32_t read_connect_number = cfg->read_connect_number;
|
|
+ struct protocol_stack *stack = get_protocol_stack();
|
|
+
|
|
+ poll_rpc_msg(stack, rpc_number);
|
|
+ gazelle_eth_dev_poll(stack, use_ltran_flag, nic_read_number);
|
|
+ sys_timer_run();
|
|
+ if (cfg->low_power_mod != 0) {
|
|
+ low_power_idling(stack);
|
|
+ }
|
|
+
|
|
+ if (stack_mode_rtc) {
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ do_lwip_read_recvlist(stack, read_connect_number);
|
|
+ if ((wakeup_tick & 0xf) == 0) {
|
|
+ wakeup_stack_epoll(stack);
|
|
+ }
|
|
+
|
|
+ /* run to completion mode currently does not support sockmap */
|
|
+ if (use_sockmap) {
|
|
+ netif_poll(&stack->netif);
|
|
+ /* reduce traversal times */
|
|
+ if ((wakeup_tick & 0xff) == 0) {
|
|
+ read_same_node_recv_list(stack);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ /* run to completion mode currently does not support kni */
|
|
+ /* KNI requests are generally low-rate I/Os,
|
|
+ * so processing KNI requests only in the thread with queue_id No.0 is sufficient. */
|
|
+ if (kni_switch && !stack->queue_id && !(wakeup_tick & 0xfff)) {
|
|
+ rte_kni_handle_request(get_gazelle_kni());
|
|
+ if (get_kni_started()) {
|
|
+ kni_handle_rx(get_port_id());
|
|
+ }
|
|
+ }
|
|
+ return;
|
|
+}
|
|
+
|
|
+static void* gazelle_stack_thread(void *arg)
|
|
+{
|
|
+ struct thread_params *t_params = (struct thread_params*) arg;
|
|
+
|
|
+ uint16_t queue_id = t_params->queue_id;
|
|
uint32_t wakeup_tick = 0;
|
|
|
|
struct protocol_stack *stack = stack_thread_init(arg);
|
|
@@ -461,39 +503,8 @@ static void* gazelle_stack_thread(void *arg)
|
|
LSTACK_LOG(INFO, LSTACK, "stack_%02hu init success\n", queue_id);
|
|
|
|
for (;;) {
|
|
- poll_rpc_msg(stack, rpc_number);
|
|
-
|
|
- gazelle_eth_dev_poll(stack, use_ltran_flag, nic_read_number);
|
|
-
|
|
- if (use_sockmap) {
|
|
- netif_poll(&stack->netif);
|
|
- /* reduce traversal times */
|
|
- if ((wakeup_tick & 0xff) == 0) {
|
|
- read_same_node_recv_list(stack);
|
|
- }
|
|
- }
|
|
- do_lwip_read_recvlist(stack, read_connect_number);
|
|
-
|
|
- if ((wakeup_tick & 0xf) == 0) {
|
|
- wakeup_stack_epoll(stack);
|
|
- }
|
|
-
|
|
- /* KNI requests are generally low-rate I/Os,
|
|
- * so processing KNI requests only in the thread with queue_id No.0 is sufficient. */
|
|
- if (kni_switch && !queue_id && !(wakeup_tick & 0xfff)) {
|
|
- rte_kni_handle_request(get_gazelle_kni());
|
|
- if (get_kni_started()) {
|
|
- kni_handle_rx(get_port_id());
|
|
- }
|
|
- }
|
|
-
|
|
+ stack_polling(wakeup_tick);
|
|
wakeup_tick++;
|
|
-
|
|
- sys_timer_run();
|
|
-
|
|
- if (cfg->low_power_mod != 0) {
|
|
- low_power_idling(stack);
|
|
- }
|
|
}
|
|
|
|
return NULL;
|
|
diff --git a/src/lstack/include/lstack_protocol_stack.h b/src/lstack/include/lstack_protocol_stack.h
|
|
index a4f6ac2..7cb37bf 100644
|
|
--- a/src/lstack/include/lstack_protocol_stack.h
|
|
+++ b/src/lstack/include/lstack_protocol_stack.h
|
|
@@ -167,5 +167,6 @@ void stack_replenish_sendring(struct rpc_msg *msg);
|
|
void stack_get_conntable(struct rpc_msg *msg);
|
|
void stack_get_connnum(struct rpc_msg *msg);
|
|
void stack_recvlist_count(struct rpc_msg *msg);
|
|
+void stack_polling(uint32_t wakeup_tick);
|
|
void kni_handle_tx(struct rte_mbuf *mbuf);
|
|
#endif
|
|
--
|
|
2.27.0
|
|
|