代码拉取完成,页面将自动刷新
同步操作将从 src-openEuler/gazelle 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
From c064bea759414419d7fcae6c31455e517a9556f9 Mon Sep 17 00:00:00 2001
From: jiangheng <jiangheng12@huawei.com>
Date: Wed, 16 Mar 2022 15:19:53 +0800
Subject: [PATCH 22/34] fix get data error
---
src/common/gazelle_dfx_msg.h | 2 +-
src/lstack/api/lstack_epoll.c | 10 ++++------
src/lstack/core/lstack_dpdk.c | 8 +++-----
src/lstack/core/lstack_lwip.c | 15 ++++++++-------
src/lstack/core/lstack_stack_stat.c | 1 -
src/lstack/core/lstack_thread_rpc.c | 8 --------
src/lstack/include/lstack_protocol_stack.h | 1 -
src/lstack/netif/lstack_ethdev.c | 4 ++--
src/ltran/ltran_dfx.c | 7 +++----
9 files changed, 21 insertions(+), 35 deletions(-)
diff --git a/src/common/gazelle_dfx_msg.h b/src/common/gazelle_dfx_msg.h
index 41cbefa..3956c33 100644
--- a/src/common/gazelle_dfx_msg.h
+++ b/src/common/gazelle_dfx_msg.h
@@ -86,10 +86,10 @@ struct gazelle_stat_pkts {
uint64_t accept_events;
uint64_t read_null;
uint64_t recv_empty;
- uint64_t event_null;
uint64_t remove_event;
uint64_t send_self_rpc;
uint64_t call_null;
+ uint64_t arp_copy_fail;
};
/* same as define in lwip/stats.h - struct stats_mib2 */
diff --git a/src/lstack/api/lstack_epoll.c b/src/lstack/api/lstack_epoll.c
index b12ce58..885ec45 100644
--- a/src/lstack/api/lstack_epoll.c
+++ b/src/lstack/api/lstack_epoll.c
@@ -78,17 +78,16 @@ void add_epoll_event(struct netconn *conn, uint32_t event)
sock = sock->shadowed_sock;
}
- /* sock not in monitoring */
- if (!sock->weakup) {
+ if ((event & sock->epoll_events) == 0) {
return;
}
+ sock->events |= event & sock->epoll_events;
- if ((event & sock->epoll_events) == 0) {
+ /* sock not in monitoring */
+ if (!sock->weakup) {
return;
}
- sock->events |= event & sock->epoll_events;
-
if (report_events(sock, event)) {
sock->have_event = true;
weakup_enqueue(sock->stack->weakup_ring, sock);
@@ -286,7 +285,6 @@ static int32_t get_lwip_events(struct weakup_poll *weakup, void *out, uint32_t m
while (event_num < events_cnt) {
int32_t ret = rte_ring_sc_dequeue(weakup->event_ring, (void **)&sock);
if (ret != 0) {
- get_protocol_stack_group()->event_null++;
break;
}
sock->have_event = false;
diff --git a/src/lstack/core/lstack_dpdk.c b/src/lstack/core/lstack_dpdk.c
index b8320db..fb0e988 100644
--- a/src/lstack/core/lstack_dpdk.c
+++ b/src/lstack/core/lstack_dpdk.c
@@ -167,14 +167,12 @@ int32_t pktmbuf_pool_init(struct protocol_stack *stack, uint16_t stack_num)
return -1;
}
- stack->rx_pktmbuf_pool = create_pktmbuf_mempool("rx_mbuf", RX_NB_MBUF / stack_num, RX_MBUF_CACHE_SZ,
- stack->queue_id);
+ stack->rx_pktmbuf_pool = create_pktmbuf_mempool("rx_mbuf", RX_NB_MBUF / stack_num, 0, stack->queue_id);
if (stack->rx_pktmbuf_pool == NULL) {
return -1;
}
- stack->tx_pktmbuf_pool = create_pktmbuf_mempool("tx_mbuf", TX_NB_MBUF / stack_num, TX_MBUF_CACHE_SZ,
- stack->queue_id);
+ stack->tx_pktmbuf_pool = create_pktmbuf_mempool("tx_mbuf", TX_NB_MBUF / stack_num, 0, stack->queue_id);
if (stack->tx_pktmbuf_pool == NULL) {
return -1;
}
@@ -557,7 +555,7 @@ int32_t dpdk_init_lstack_kni(void)
{
struct protocol_stack_group *stack_group = get_protocol_stack_group();
- stack_group->kni_pktmbuf_pool = create_pktmbuf_mempool("kni_mbuf", KNI_NB_MBUF, KNI_MBUF_CACHE_SZ, 0);
+ stack_group->kni_pktmbuf_pool = create_pktmbuf_mempool("kni_mbuf", KNI_NB_MBUF, 0, 0);
if (stack_group->kni_pktmbuf_pool == NULL) {
return -1;
}
diff --git a/src/lstack/core/lstack_lwip.c b/src/lstack/core/lstack_lwip.c
index 1fc8446..1a9d9b9 100644
--- a/src/lstack/core/lstack_lwip.c
+++ b/src/lstack/core/lstack_lwip.c
@@ -175,7 +175,6 @@ int32_t gazelle_alloc_pktmbuf(struct rte_mempool *pool, struct rte_mbuf **mbufs,
int32_t ret = alloc_mbufs(pool, mbufs, num);
if (ret != 0) {
- get_protocol_stack()->stats.tx_allocmbuf_fail++;
return ret;
}
@@ -289,7 +288,7 @@ ssize_t write_stack_data(struct lwip_sock *sock, const void *buf, size_t len)
}
copy_len = (len - send_len > pbuf->len) ? pbuf->len : (len - send_len);
- pbuf_take(pbuf, buf + send_len, copy_len);
+ pbuf_take(pbuf, (char *)buf + send_len, copy_len);
pbuf->tot_len = pbuf->len = copy_len;
ret = rte_ring_sp_enqueue(sock->send_ring, pbuf);
@@ -331,13 +330,13 @@ ssize_t read_lwip_data(struct lwip_sock *sock, int32_t flags, u8_t apiflags)
uint32_t free_count = rte_ring_free_count(sock->recv_ring);
uint32_t data_count = rte_ring_count(sock->conn->recvmbox->ring);
-
+ uint32_t read_max = LWIP_MIN(free_count, data_count);
struct pbuf *pbuf = NULL;
- uint32_t read_count = LWIP_MIN(free_count, data_count);
+ uint32_t read_count = 0;
ssize_t recv_len = 0;
int32_t ret;
- for (uint32_t i = 0; i < read_count; i++) {
+ for (uint32_t i = 0; i < read_max; i++) {
err_t err = netconn_recv_tcp_pbuf_flags(sock->conn, &pbuf, apiflags);
if (err != ERR_OK) {
if (recv_len > 0) {
@@ -356,6 +355,7 @@ ssize_t read_lwip_data(struct lwip_sock *sock, int32_t flags, u8_t apiflags)
sock->stack->stats.read_lwip_drop++;
break;
}
+ read_count++;
}
recv_len += pbuf->len;
@@ -364,7 +364,7 @@ ssize_t read_lwip_data(struct lwip_sock *sock, int32_t flags, u8_t apiflags)
apiflags |= NETCONN_DONTBLOCK | NETCONN_NOFIN;
}
- if (data_count > free_count) {
+ if (data_count > read_count) {
add_recv_list(sock->conn->socket);
}
@@ -481,6 +481,7 @@ ssize_t read_stack_data(int32_t fd, void *buf, size_t len, int32_t flags)
while (recv_left > 0) {
if (sock->recv_lastdata) {
pbuf = sock->recv_lastdata;
+ sock->recv_lastdata = NULL;
} else {
ret = rte_ring_sc_dequeue(sock->recv_ring, (void **)&pbuf);
if (ret != 0) {
@@ -490,7 +491,7 @@ ssize_t read_stack_data(int32_t fd, void *buf, size_t len, int32_t flags)
}
copy_len = (recv_left > pbuf->tot_len) ? pbuf->tot_len : (u16_t)recv_left;
- pbuf_copy_partial(pbuf, buf + recvd, copy_len, 0);
+ pbuf_copy_partial(pbuf, (char *)buf + recvd, copy_len, 0);
recvd += copy_len;
recv_left -= copy_len;
diff --git a/src/lstack/core/lstack_stack_stat.c b/src/lstack/core/lstack_stack_stat.c
index 0bd1c6c..41fe9bf 100644
--- a/src/lstack/core/lstack_stack_stat.c
+++ b/src/lstack/core/lstack_stack_stat.c
@@ -105,7 +105,6 @@ static void get_stack_stats(struct gazelle_stack_dfx_data *dfx, struct protocol_
lstack_get_low_power_info(&dfx->low_power_info);
memcpy_s(&dfx->data.pkts, sizeof(dfx->data.pkts), &stack->stats, sizeof(dfx->data.pkts));
dfx->data.pkts.call_alloc_fail = stack_group->call_alloc_fail;
- dfx->data.pkts.event_null = stack_group->event_null;
dfx->data.pkts.weakup_ring_cnt = rte_ring_count(stack->weakup_ring);
dfx->data.pkts.send_idle_ring_cnt = rte_ring_count(stack->send_idle_ring);
dfx->data.pkts.call_msg_cnt = rpc_call_msgcnt(stack);
diff --git a/src/lstack/core/lstack_thread_rpc.c b/src/lstack/core/lstack_thread_rpc.c
index b4d57d3..8af1077 100644
--- a/src/lstack/core/lstack_thread_rpc.c
+++ b/src/lstack/core/lstack_thread_rpc.c
@@ -80,15 +80,11 @@ void poll_rpc_msg(struct protocol_stack *stack)
struct rpc_msg *msg = NULL;
num = 0;
- lockless_queue_node *first_node = NULL;
while (num++ < HANDLE_RPC_MSG_MAX) {
lockless_queue_node *node = lockless_queue_mpsc_pop(&stack->rpc_queue);
if (node == NULL) {
return;
}
- if (first_node == NULL) {
- first_node = node;
- }
msg = container_of(node, struct rpc_msg, queue_node);
@@ -105,10 +101,6 @@ void poll_rpc_msg(struct protocol_stack *stack)
} else {
rpc_msg_free(stack->rpc_pool, msg);
}
-
- if (first_node == node) {
- break;
- }
}
}
diff --git a/src/lstack/include/lstack_protocol_stack.h b/src/lstack/include/lstack_protocol_stack.h
index 1020e83..f289465 100644
--- a/src/lstack/include/lstack_protocol_stack.h
+++ b/src/lstack/include/lstack_protocol_stack.h
@@ -72,7 +72,6 @@ struct protocol_stack_group {
/* dfx stats */
bool latency_start;
uint64_t call_alloc_fail;
- uint64_t event_null;
};
long get_stack_tid(void);
diff --git a/src/lstack/netif/lstack_ethdev.c b/src/lstack/netif/lstack_ethdev.c
index 796a46d..026f545 100644
--- a/src/lstack/netif/lstack_ethdev.c
+++ b/src/lstack/netif/lstack_ethdev.c
@@ -97,8 +97,8 @@ int32_t eth_dev_poll(void)
}
if (get_protocol_stack_group()->latency_start) {
- uint64_t time_stamp = get_current_time();
- time_stamp_into_mbuf(nr_pkts, pkts, time_stamp);
+ uint64_t time_stamp = get_current_time();
+ time_stamp_into_mbuf(nr_pkts, pkts, time_stamp);
}
for (uint32_t i = 0; i < nr_pkts; i++) {
diff --git a/src/ltran/ltran_dfx.c b/src/ltran/ltran_dfx.c
index 4b46ac9..5b3a95c 100644
--- a/src/ltran/ltran_dfx.c
+++ b/src/ltran/ltran_dfx.c
@@ -390,7 +390,7 @@ static void gazelle_print_ltran_start_latency(void *buf, const struct gazelle_st
static void gazelle_print_ltran_stat_latency(void *buf, const struct gazelle_stat_msg_request *req_msg)
{
struct in_addr *ip_addr = (struct in_addr *)buf;
- struct gazelle_stat_lstack_total *stat = (struct gazelle_stat_lstack_total *)(buf + sizeof(*ip_addr));
+ struct gazelle_stat_lstack_total *stat = (struct gazelle_stat_lstack_total *)((char *)buf + sizeof(*ip_addr));
uint64_t total_rx = 0;
double total_latency = 0;
uint64_t max = 0;
@@ -574,9 +574,8 @@ static void show_lstack_stats(struct gazelle_stack_dfx_data *lstack_stat)
printf("read_null: %-18"PRIu64" ", lstack_stat->data.pkts.read_null);
printf("recv_empty: %-17"PRIu64" \n", lstack_stat->data.pkts.recv_empty);
printf("call_alloc_fail: %-12"PRIu64" ", lstack_stat->data.pkts.call_alloc_fail);
- printf("event_null: %-17"PRIu64" ", lstack_stat->data.pkts.event_null);
- printf("remove_event: %-15"PRIu64" \n", lstack_stat->data.pkts.remove_event);
- printf("send_self_rpc: %-14"PRIu64" ", lstack_stat->data.pkts.send_self_rpc);
+ printf("remove_event: %-15"PRIu64" ", lstack_stat->data.pkts.remove_event);
+ printf("send_self_rpc: %-14"PRIu64" \n", lstack_stat->data.pkts.send_self_rpc);
printf("call_null: %-18"PRIu64" \n", lstack_stat->data.pkts.call_null);
}
--
1.8.3.1
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。