summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLu Qiuwen <[email protected]>2023-11-22 10:40:38 +0800
committerLu Qiuwen <[email protected]>2023-11-22 10:40:38 +0800
commit334e8b72b4b3df083919d6c582544b23ef6e3315 (patch)
tree9dbb03e3947b8f62d0356fe2921d9f27e3fba13f
parent0b76e814841e8b676e0909ec14fc76e34a0347b2 (diff)
feature: remove the ltx tunnel.
-rw-r--r--app/src/monit.c7
-rw-r--r--app/src/mrb.c24
-rw-r--r--include/internal/vdev_define.h1
-rw-r--r--infra/src/ldbc.c33
-rw-r--r--service/include/sc_vdev.h5
-rw-r--r--service/src/devmgr.c7
-rw-r--r--service/src/vdata.c61
7 files changed, 68 insertions, 70 deletions
diff --git a/app/src/monit.c b/app/src/monit.c
index 225c6c2..a169ab7 100644
--- a/app/src/monit.c
+++ b/app/src/monit.c
@@ -14,7 +14,6 @@ int vdev_instance_stats_get(struct vdev_instance * vdi, struct vdev_stat_info *
struct vnode_cons_stat * st_cons_rx = NULL;
struct vnode_prod_stat * st_prod_tx = NULL;
struct vnode_prod_stat * st_prod_ftx = NULL;
- struct vnode_prod_stat * st_prod_ltx = NULL;
stat_info->nr_rxstream = vdi->nr_rxstream;
stat_info->nr_txstream = vdi->nr_txstream;
@@ -28,7 +27,6 @@ int vdev_instance_stats_get(struct vdev_instance * vdi, struct vdev_stat_info *
{
st_prod_tx = vnode_mirror_prod_stat_get(vdi->vnode_tx_prod);
st_prod_ftx = vnode_mirror_prod_stat_get(vdi->vnode_ftx_prod);
- st_prod_ltx = vnode_mirror_prod_stat_get(vdi->vnode_ltx_prod);
}
for (int i = 0; i < vdi->nr_rxstream; i++)
@@ -53,11 +51,6 @@ int vdev_instance_stats_get(struct vdev_instance * vdi, struct vdev_stat_info *
stat_info->ftx_deliver[i] = VNODE_STAT_READ(&st_prod_ftx[i].deliver);
stat_info->ftx_missed[i] = VNODE_STAT_READ(&st_prod_ftx[i].missed);
stat_info->ftx_total_len[i] = VNODE_STAT_READ(&st_prod_ftx[i].total_len);
-
- stat_info->ltx_on_line[i] = VNODE_STAT_READ(&st_prod_ltx[i].on_line);
- stat_info->ltx_deliver[i] = VNODE_STAT_READ(&st_prod_ltx[i].deliver);
- stat_info->ltx_missed[i] = VNODE_STAT_READ(&st_prod_ltx[i].missed);
- stat_info->ltx_total_len[i] = VNODE_STAT_READ(&st_prod_ltx[i].total_len);
}
return 0;
diff --git a/app/src/mrb.c b/app/src/mrb.c
index 6465160..b96899a 100644
--- a/app/src/mrb.c
+++ b/app/src/mrb.c
@@ -709,6 +709,15 @@ int marsio_buff_get_metadata(marsio_buff_t * m, enum mr_buff_metadata_type type,
switch (type)
{
+ case MR_BUFF_REHASH_INDEX:
+ if (unlikely(sz_data < sizeof(uint32_t)))
+ {
+ return -ENOMEM;
+ }
+
+ *(uint32_t *)(data) = (uint32_t)mbuf->hash.usr;
+ return sizeof(uint32_t);
+
case MR_BUFF_ROUTE_CTX: {
if (unlikely(sz_data < sizeof(struct mrb_metadata_route_ctx)))
{
@@ -793,6 +802,16 @@ int marsio_buff_set_metadata(marsio_buff_t * m, enum mr_buff_metadata_type type,
switch (type)
{
+ case MR_BUFF_REHASH_INDEX:
+ if (unlikely(sz_data < sizeof(uint32_t)))
+ {
+ return -ENOMEM;
+ }
+
+ mbuf->hash.usr = *(uint32_t *)data;
+ return 0;
+
+
case MR_BUFF_METADATA_VLAN_TCI:
if (unlikely(sz_data < sizeof(uint16_t)))
{
@@ -835,6 +854,11 @@ int marsio_buff_set_metadata(marsio_buff_t * m, enum mr_buff_metadata_type type,
return 0;
}
+ case MR_BUFF_DIR: {
+ mrb_metadata->dir = *(unsigned int *)data;
+ return 0;
+ }
+
case MR_BUFF_PAYLOAD_OFFSET: {
mrb_metadata->payload_offset = *(uint16_t *)data;
return 0;
diff --git a/include/internal/vdev_define.h b/include/internal/vdev_define.h
index e94ac43..abf131c 100644
--- a/include/internal/vdev_define.h
+++ b/include/internal/vdev_define.h
@@ -127,7 +127,6 @@ struct vdev_instance
struct vnode_cons * vnode_rx_cons;
struct vnode_prod * vnode_tx_prod;
struct vnode_prod * vnode_ftx_prod;
- struct vnode_prod * vnode_ltx_prod;
/* CONS NOTIFY DESCS */
struct vnode_cons_notify * vnode_rx_cons_notify;
diff --git a/infra/src/ldbc.c b/infra/src/ldbc.c
index 6b78833..d9e9919 100644
--- a/infra/src/ldbc.c
+++ b/infra/src/ldbc.c
@@ -662,7 +662,38 @@ static void packet_parse_ether(struct pkt_parser * handler, const struct rte_mbu
void pkt_parser_exec(struct pkt_parser * handler, const struct rte_mbuf * mbuf)
{
- packet_parse_ether(handler, mbuf, 0);
+#if 0
+ /* fastpath, enumerate some pattern */
+ switch(mbuf->packet_type)
+ {
+ case (RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_TCP):
+ pkt_parser_push(handler, LAYER_TYPE_ID_ETHER, 0);
+ pkt_parser_push(handler, LAYER_TYPE_ID_IPV4, sizeof(struct rte_ether_hdr));
+ pkt_parser_push(handler, LAYER_TYPE_ID_TCP, sizeof(struct rte_ether_hdr) + sizeof(struct rte_ipv4_hdr));
+ return;
+
+ case (RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_UDP):
+ pkt_parser_push(handler, LAYER_TYPE_ID_ETHER, 0);
+ pkt_parser_push(handler, LAYER_TYPE_ID_IPV4, sizeof(struct rte_ether_hdr));
+ pkt_parser_push(handler, LAYER_TYPE_ID_UDP, sizeof(struct rte_ether_hdr) + sizeof(struct rte_ipv4_hdr));
+ return;
+
+ case (RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_TCP):
+ pkt_parser_push(handler, LAYER_TYPE_ID_ETHER, 0);
+ pkt_parser_push(handler, LAYER_TYPE_ID_IPV6, sizeof(struct rte_ether_hdr));
+ pkt_parser_push(handler, LAYER_TYPE_ID_TCP, sizeof(struct rte_ether_hdr) + sizeof(struct rte_ipv6_hdr));
+
+ case (RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_UDP):
+ pkt_parser_push(handler, LAYER_TYPE_ID_ETHER, 0);
+ pkt_parser_push(handler, LAYER_TYPE_ID_IPV6, sizeof(struct rte_ether_hdr));
+ pkt_parser_push(handler, LAYER_TYPE_ID_UDP, sizeof(struct rte_ether_hdr) + sizeof(struct rte_ipv6_hdr));
+
+ default:
+ return packet_parse_ether(handler, mbuf, 0);
+ }
+#endif
+
+ return packet_parse_ether(handler, mbuf, 0);
}
static inline uint32_t hash_sym_crc(struct distributer * dist, const void * data, uint16_t layer_type,
diff --git a/service/include/sc_vdev.h b/service/include/sc_vdev.h
index f7691df..6314ffd 100644
--- a/service/include/sc_vdev.h
+++ b/service/include/sc_vdev.h
@@ -52,11 +52,6 @@ struct _vdev
struct vnode_prod * vnode_rx_prod;
struct vnode_cons * vnode_tx_cons;
struct vnode_cons * vnode_ftx_cons;
- struct vnode_cons * vnode_ctrl_cons;
-
- /* LOOP Buffer*/
- struct rte_ring ** rx_loop_buffers;
- struct rte_ring ** tx_loop_buffers;
/* Mempool */
struct rte_mempool * direct_pool;
diff --git a/service/src/devmgr.c b/service/src/devmgr.c
index db7a6ff..e202cbf 100644
--- a/service/src/devmgr.c
+++ b/service/src/devmgr.c
@@ -547,7 +547,7 @@ int shmdev_setup_one_device(struct devmgr_main * devmgr_main, const char * devsy
if (dev_desc->port_id >= RTE_DIM(devmgr_main->dev_descs))
{
- MR_ERROR("Too many shmdev devices, the max number is %d", RTE_DIM(devmgr_main->dev_descs));
+ MR_ERROR("Too many shmdev devices (max=%lu).", RTE_DIM(devmgr_main->dev_descs));
return RT_ERR;
}
@@ -1788,11 +1788,8 @@ void * dpdk_dev_link_state_update_thread(void * arg)
rte_eth_link_get_nowait(dpdk_dev->port_id, &now_eth_link);
struct rte_eth_link old_eth_link = dpdk_dev->link_status;
- /* the rte_eth_link must be uint64 */
- static_assert(sizeof(struct rte_eth_link) == sizeof(uint64_t), "the struct rte_eth_link must be uint64");
-
/* print log when the link status changed */
- if (*(uint64_t *)(&now_eth_link) != *(uint64_t *)(&old_eth_link))
+ if (memcmp(&now_eth_link, &old_eth_link, sizeof(struct rte_eth_link)) != 0)
{
char str_eth_link_status[MR_STRING_MAX];
rte_eth_link_to_str(str_eth_link_status, sizeof(str_eth_link_status) - 1, &now_eth_link);
diff --git a/service/src/vdata.c b/service/src/vdata.c
index 62e70a8..91d74d2 100644
--- a/service/src/vdata.c
+++ b/service/src/vdata.c
@@ -39,32 +39,19 @@ static int vdev_data_collect(struct _vdev * _vdev, queue_id_t qid, struct rte_mb
int __nr_mbufs_left = nr_pkts;
int ret;
- if (flags & VDEV_COLLECT_CTRL)
- {
- // 从CTRL通道取包
- ret = vnode_mirror_dequeue_burst(_vdev->vnode_ctrl_cons, qid, &pkts[__nr_mbufs_out], __nr_mbufs_left);
+ // 从FTX通道取包
+ ret = vnode_mirror_dequeue_burst(_vdev->vnode_ftx_cons, qid, &pkts[__nr_mbufs_out], __nr_mbufs_left);
- __nr_mbufs_out += ret;
- __nr_mbufs_left -= ret;
- assert(__nr_mbufs_left >= 0);
- }
+ __nr_mbufs_out += ret;
+ __nr_mbufs_left -= ret;
+ assert(__nr_mbufs_left >= 0);
- if (flags & VDEV_COLLECT_DATA)
- {
- // 从FTX通道取包
- ret = vnode_mirror_dequeue_burst(_vdev->vnode_ftx_cons, qid, &pkts[__nr_mbufs_out], __nr_mbufs_left);
+ // 剩余的容量,从TX通道取
+ ret = vnode_mirror_dequeue_burst(_vdev->vnode_tx_cons, qid, &pkts[__nr_mbufs_out], __nr_mbufs_left);
- __nr_mbufs_out += ret;
- __nr_mbufs_left -= ret;
- assert(__nr_mbufs_left >= 0);
-
- // 剩余的容量,从TX通道取
- ret = vnode_mirror_dequeue_burst(_vdev->vnode_tx_cons, qid, &pkts[__nr_mbufs_out], __nr_mbufs_left);
-
- __nr_mbufs_out += ret;
- __nr_mbufs_left -= ret;
- assert(__nr_mbufs_left >= 0);
- }
+ __nr_mbufs_out += ret;
+ __nr_mbufs_left -= ret;
+ assert(__nr_mbufs_left >= 0);
for (int i = 0; i < __nr_mbufs_out; i++)
{
@@ -85,7 +72,6 @@ static int vdev_data_stats_get(struct _vdev * _vdev, struct vdev_stat_info * sta
struct vnode_prod_stat * st_prod_rx = vnode_mirror_prod_stat_get(_vdev->vnode_rx_prod);
struct vnode_cons_stat * st_cons_tx = vnode_mirror_cons_stat_get(_vdev->vnode_tx_cons);
struct vnode_cons_stat * st_cons_ftx = vnode_mirror_cons_stat_get(_vdev->vnode_ftx_cons);
- struct vnode_cons_stat * st_cons_ltx = vnode_mirror_cons_stat_get(_vdev->vnode_ctrl_cons);
// TODO: What about nr_rxstream, nr_txstream is different?
for (int i = 0; i < _vdev->nr_rxstream; i++)
@@ -116,16 +102,6 @@ static int vdev_data_stats_get(struct _vdev * _vdev, struct vdev_stat_info * sta
stat_info->ftx_deliver[i] = VNODE_STAT_READ(&st_cons_ftx[i].deliver);
stat_info->ftx_missed[i] = VNODE_STAT_READ(&st_cons_ftx[i].missed);
stat_info->ftx_total_len[i] = VNODE_STAT_READ(&st_cons_ftx[i].total_len);
-
- stat_info->ltx_on_line[i] = VNODE_STAT_READ(&st_cons_ltx[i].on_line);
- stat_info->ltx_deliver[i] = VNODE_STAT_READ(&st_cons_ltx[i].deliver);
- stat_info->ltx_missed[i] = VNODE_STAT_READ(&st_cons_ltx[i].missed);
- stat_info->ltx_total_len[i] = VNODE_STAT_READ(&st_cons_ltx[i].total_len);
-
- stat_info->ltx_on_line[i] = VNODE_STAT_READ(&st_cons_ltx[i].on_line);
- stat_info->ltx_deliver[i] = VNODE_STAT_READ(&st_cons_ltx[i].deliver);
- stat_info->ltx_missed[i] = VNODE_STAT_READ(&st_cons_ltx[i].missed);
- stat_info->ltx_total_len[i] = VNODE_STAT_READ(&st_cons_ltx[i].total_len);
}
return 0;
@@ -139,8 +115,6 @@ static int vdev_data_instance_destory(struct vdev_instance * vdi)
vnode_mirror_delete_prod(vdi->vnode_tx_prod);
if (vdi->vnode_ftx_prod != NULL)
vnode_mirror_delete_prod(vdi->vnode_ftx_prod);
- if (vdi->vnode_ltx_prod != NULL)
- vnode_mirror_delete_prod(vdi->vnode_ltx_prod);
FREE(vdi);
return 0;
@@ -171,11 +145,6 @@ static struct vdev_instance * vdev_data_instance_create(struct _vdev * _vdev, co
vdi->vnode_ftx_prod = vnode_mirror_create_prod(_vdev->vnode_ftx, appsym, nr_txstream);
}
- if (nr_txstream > 0)
- {
- vdi->vnode_ltx_prod = vnode_mirror_create_prod(_vdev->vnode_ltx, appsym, nr_txstream);
- }
-
if (nr_rxstream > 0 && vdi->vnode_rx_cons == NULL)
{
MR_ERROR("Creating VDI for device %s failed: "
@@ -200,14 +169,6 @@ static struct vdev_instance * vdev_data_instance_create(struct _vdev * _vdev, co
goto errout;
}
- if (nr_txstream > 0 && vdi->vnode_ltx_prod == NULL)
- {
- MR_ERROR("Creating VDI for device %s failed: "
- "Cannot create LTX producer, nr_txstream = %d",
- vdi->vdev->symbol, nr_txstream);
- goto errout;
- }
-
vdi->direct_pool = _vdev->direct_pool;
vdi->indirect_pool = _vdev->indirect_pool;
vdi->nr_rxstream = nr_rxstream;
@@ -292,13 +253,11 @@ int vdev_data_create(struct vdev_main * v_main, const char * symbol, unsigned in
_vdev->vnode_rx_prod = vnode_mirror_create_prod(_vdev->vnode_rx, "sv", (int)nr_rxstream);
_vdev->vnode_tx_cons = vnode_mirror_create_cons(_vdev->vnode_tx, "sv", (int)nr_txstream);
_vdev->vnode_ftx_cons = vnode_mirror_create_cons(_vdev->vnode_ftx, "sv", (int)nr_txstream);
- _vdev->vnode_ctrl_cons = vnode_mirror_create_cons(_vdev->vnode_ltx, "sv", (int)nr_txstream);
/* 校验,申请VNODE、VNODE生产者、消费者是否成功 */
ERR_VERIFY(_vdev->vnode_rx_prod, "Create vdev %s rx vnode producer failed. ", vdev_info->symbol);
ERR_VERIFY(_vdev->vnode_tx_cons, "Create vdev %s tx vnode consumer failed. ", vdev_info->symbol);
ERR_VERIFY(_vdev->vnode_ftx_cons, "Create vdev %s fast tx vnode consumer failed. ", vdev_info->symbol);
- ERR_VERIFY(_vdev->vnode_ctrl_cons, "Create vdev %s lock tx vnode consumer failed. ", vdev_info->symbol);
/* 注册回调函数 */
_vdev->dispatch = vdev_data_dispatch;