diff options
| author | Lu Qiuwen <[email protected]> | 2023-11-22 10:40:38 +0800 |
|---|---|---|
| committer | Lu Qiuwen <[email protected]> | 2023-11-22 10:40:38 +0800 |
| commit | 334e8b72b4b3df083919d6c582544b23ef6e3315 (patch) | |
| tree | 9dbb03e3947b8f62d0356fe2921d9f27e3fba13f | |
| parent | 0b76e814841e8b676e0909ec14fc76e34a0347b2 (diff) | |
feature: remove the ltx tunnel.
| -rw-r--r-- | app/src/monit.c | 7 | ||||
| -rw-r--r-- | app/src/mrb.c | 24 | ||||
| -rw-r--r-- | include/internal/vdev_define.h | 1 | ||||
| -rw-r--r-- | infra/src/ldbc.c | 33 | ||||
| -rw-r--r-- | service/include/sc_vdev.h | 5 | ||||
| -rw-r--r-- | service/src/devmgr.c | 7 | ||||
| -rw-r--r-- | service/src/vdata.c | 61 |
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; |
