From 5c47175140ace7933e4e852762a59fc54585153c Mon Sep 17 00:00:00 2001 From: yzh <570350928@qq.com> Date: Wed, 10 Dec 2025 15:29:28 +0800 Subject: [PATCH] [performance optimization] Add ImportSeg interface in kvcache case --- build/build_tools_perf.sh | 2 +- build/make_software_package.sh | 2 +- src/hcom/api/capi_v2/hcom_service_c.cpp | 25 ++++++ src/hcom/api/capi_v2/hcom_service_c.h | 3 + src/hcom/hcom.h | 8 ++ src/hcom/service_v2/api/hcom_service.h | 1 + src/hcom/service_v2/api/hcom_service_def.h | 11 +++ src/hcom/service_v2/service_channel_imp.cpp | 3 + src/hcom/service_v2/service_imp.cpp | 23 +++++ src/hcom/service_v2/service_imp.h | 1 + src/hcom/transport/net_memory_region.h | 5 ++ src/hcom/transport/rdma/rdma_mr_pool.h | 4 + src/hcom/transport/shm/shm_mr_pool.h | 4 + src/hcom/transport/ub/net_ub_driver.cpp | 44 ++++++++++ src/hcom/transport/ub/net_ub_driver.h | 3 + src/hcom/transport/ub/ub_mr_pool.h | 4 + src/hcom/transport/ub/ub_urma_wrapper_jetty.h | 87 ++----------------- src/hcom/transport/ub/ub_worker_io.cpp | 2 +- test/hcom/tools/perf_test/CMakeLists.txt | 7 +- test/hcom/tools/perf_test/hcom_perf_test.cpp | 5 +- .../service_v2/service_read_bw_test.cpp | 1 + 21 files changed, 158 insertions(+), 87 deletions(-) diff --git a/build/build_tools_perf.sh b/build/build_tools_perf.sh index c86f9b2..85752a8 100644 --- a/build/build_tools_perf.sh +++ b/build/build_tools_perf.sh @@ -14,7 +14,7 @@ set -e readonly HCOM_LOG_TAG="[$(basename ${0})]" readonly CURRENT_SCRIPT_DIR=$(realpath $(dirname ${0})) readonly HCOM_ROOT_DIR=$(dirname ${CURRENT_SCRIPT_DIR}) -readonly HCOM_TOOLS_PERF_DIR="${HCOM_ROOT_DIR}/test/tools/perf_test/build" +readonly HCOM_TOOLS_PERF_DIR="${HCOM_ROOT_DIR}/test/hcom/tools/perf_test/build" # default tools build type is release if [ "${HCOM_TOOLS_BUILD_TYPE,,}" == "debug" ]; then diff --git a/build/make_software_package.sh b/build/make_software_package.sh index 2fb6425..f005736 100644 --- a/build/make_software_package.sh +++ b/build/make_software_package.sh @@ -82,7 +82,7 @@ HCOM_BUILD_TOOLS_PERF=${HCOM_BUILD_TOOLS_PERF:-off} if [[ "${HCOM_BUILD_TOOLS_PERF,,}" == "on" && "${HCOM_BUILD_TYPE,,}" == "release" ]]; then bash "${HCOM_ROOT_DIR}/build/build_tools_perf.sh" # copy hcom_perf - cp "${HCOM_ROOT_DIR}/test/tools/perf_test/build/hcom_perf" "${HCOM_PACKAGE_NAME}"/hcom/ + cp "${HCOM_ROOT_DIR}/test/hcom/tools/perf_test/build/hcom_perf" "${HCOM_PACKAGE_NAME}"/hcom/ echo "${HCOM_LOG_TAG} hcom build tools perf success: ${HCOM_BUILD_TOOLS_PERF}" fi diff --git a/src/hcom/api/capi_v2/hcom_service_c.cpp b/src/hcom/api/capi_v2/hcom_service_c.cpp index c9769db..0947022 100644 --- a/src/hcom/api/capi_v2/hcom_service_c.cpp +++ b/src/hcom/api/capi_v2/hcom_service_c.cpp @@ -728,6 +728,31 @@ int ubs_hcom_service_register_assign_memory_region(ubs_hcom_service service, uin return SER_OK; } +int ubs_hcom_reg_seg(ubs_hcom_service service, uintptr_t address, uint64_t size, ubs_hcom_oneside_key *key) +{ + VALIDATE_SERVICE(service); + + UBSHcomMemoryKey mrKey; + auto result = memcpy_s(&mrKey, sizeof(UBSHcomMemoryKey), key, sizeof(ubs_hcom_oneside_key)); + if (result != 0) { + NN_LOG_ERROR("Failed to register seg as memcpy_s input failed"); + return result; + } + + result = reinterpret_cast(service)->ImportUrmaSeg(address, size, mrKey); + if (NN_UNLIKELY(result != NN_OK)) { + NN_LOG_ERROR("Failed to register seg"); + return result; + } + result = memcpy_s(key, sizeof(ubs_hcom_oneside_key), &mrKey, sizeof(UBSHcomMemoryKey)); + if (result != 0) { + NN_LOG_ERROR("Failed to register seg as memcpy_s to output failed"); + return result; + } + NN_LOG_DEBUG("ImportUrmaSeg success with key: " << mrKey.keys[0] << ", size: " << size); + return SER_OK; +} + int ubs_hcom_service_get_memory_region_info(ubs_hcom_memory_region mr, ubs_hcom_mr_info *info) { VALIDATE_MR(mr); diff --git a/src/hcom/api/capi_v2/hcom_service_c.h b/src/hcom/api/capi_v2/hcom_service_c.h index 3d9510b..55dd8c4 100644 --- a/src/hcom/api/capi_v2/hcom_service_c.h +++ b/src/hcom/api/capi_v2/hcom_service_c.h @@ -287,6 +287,7 @@ typedef struct { typedef struct { uint64_t keys[4]; uint64_t tokens[4]; + uint8_t eid[16]; } ubs_hcom_oneside_key; /* @@ -333,6 +334,8 @@ int ubs_hcom_service_disconnect(ubs_hcom_service service, ubs_hcom_channel chann int ubs_hcom_service_register_memory_region(ubs_hcom_service service, uint64_t size, ubs_hcom_memory_region *mr); +int ubs_hcom_reg_seg(ubs_hcom_service service, uintptr_t address, uint64_t size, ubs_hcom_oneside_key *key); + int ubs_hcom_service_get_memory_region_info(ubs_hcom_memory_region mr, ubs_hcom_mr_info *info); int ubs_hcom_service_register_assign_memory_region( diff --git a/src/hcom/hcom.h b/src/hcom/hcom.h index 1c4f751..5722f92 100644 --- a/src/hcom/hcom.h +++ b/src/hcom/hcom.h @@ -1133,6 +1133,8 @@ public: virtual void GetVa(uint64_t &va, uint64_t &vaLen, uint32_t &tokenId) = 0; + virtual uint8_t *GetEidRaw() = 0; + DEFINE_RDMA_REF_COUNT_FUNCTIONS protected: @@ -1881,6 +1883,12 @@ public: virtual NResult CreateMemoryRegion(uint64_t size, UBSHcomNetMemoryRegionPtr &mr, unsigned long memid) = 0; + virtual NResult ImportUrmaSeg(uintptr_t address, uint64_t size, uint64_t key, void **tSeg, uint8_t *eid, + uint32_t eidLen) + { + NN_LOG_ERROR("ImportUrmaSeg not supported in other protocol, only UBC"); + return NN_ERROR; + } /** * @brief Unregister the memory region * diff --git a/src/hcom/service_v2/api/hcom_service.h b/src/hcom/service_v2/api/hcom_service.h index 5a31678..3fa3d35 100644 --- a/src/hcom/service_v2/api/hcom_service.h +++ b/src/hcom/service_v2/api/hcom_service.h @@ -112,6 +112,7 @@ public: * @param mr 取消的mr */ virtual void DestroyMemoryRegion(UBSHcomRegMemoryRegion &mr) = 0; + virtual int32_t ImportUrmaSeg(uintptr_t address, uint64_t size, UBSHcomMemoryKey &key) = 0; /** * @brief 设置RegisterMemoryRegion是否将mr信息放入pgTable管理 diff --git a/src/hcom/service_v2/api/hcom_service_def.h b/src/hcom/service_v2/api/hcom_service_def.h index 08cce09..6a6e6f4 100644 --- a/src/hcom/service_v2/api/hcom_service_def.h +++ b/src/hcom/service_v2/api/hcom_service_def.h @@ -15,6 +15,8 @@ #include #include #include +#include "securec.h" + #include "hcom.h" #include "hcom_def.h" #include "hcom_num_def.h" @@ -89,6 +91,7 @@ struct UBSHcomSglRequest { struct UBSHcomMemoryKey { uint64_t keys[4]; uint64_t tokens[4]; + uint8_t eid[16]; }; struct UBSHcomOneSideRequest { @@ -193,6 +196,14 @@ public: mrKey.keys[i] = mHcomMrs[i]->GetLKey(); mrKey.tokens[i] = reinterpret_cast(mHcomMrs[i]->GetMemorySeg()); } + if (mHcomMrs.size() > 0 && mHcomMrs[0]->GetEidRaw() != nullptr) { + auto ret = memcpy_s(mrKey.eid, sizeof(mrKey.eid), mHcomMrs[0]->GetEidRaw(), sizeof(mrKey.eid)); + if (ret != 0) { + NN_LOG_WARN("memcpy eid failed"); + } + } else { + NN_LOG_DEBUG("get eid not supported"); + } } inline uintptr_t GetAddress() diff --git a/src/hcom/service_v2/service_channel_imp.cpp b/src/hcom/service_v2/service_channel_imp.cpp index d253aa3..df20067 100644 --- a/src/hcom/service_v2/service_channel_imp.cpp +++ b/src/hcom/service_v2/service_channel_imp.cpp @@ -1755,6 +1755,7 @@ SerResult HcomChannelImp::OneSideSyncWithSelfPoll(const UBSHcomOneSideRequest &r UBSHcomNetTransRequest req(request.lAddress + offset, request.rAddress + offset, request.lKey.keys[ep->GetDevIndex()], request.rKey.keys[ep->GetPeerDevIndex()], size, 0); req.srcSeg = reinterpret_cast(request.lKey.tokens[ep->GetDevIndex()]); + req.dstSeg = reinterpret_cast(request.rKey.tokens[ep->GetDevIndex()]); if (isWrite) { result = ep->PostWrite(req); } else { @@ -1832,6 +1833,7 @@ SerResult HcomChannelImp::OneSideSyncWithWorkerPoll(const UBSHcomOneSideRequest request.lKey.keys[ep->GetDevIndex()], request.rKey.keys[ep->GetPeerDevIndex()], size, sizeof(SerTransContext)); req.srcSeg = reinterpret_cast(request.lKey.tokens[ep->GetDevIndex()]); + req.dstSeg = reinterpret_cast(request.rKey.tokens[ep->GetDevIndex()]); SetServiceTransCtx(req.upCtxData, syncContext.seqNo); if (isWrite) { @@ -1938,6 +1940,7 @@ SerResult HcomChannelImp::OneSideAsyncWithWorkerPoll(const UBSHcomOneSideRequest request.lKey.keys[ep->GetDevIndex()], request.rKey.keys[ep->GetPeerDevIndex()], size, sizeof(SerTransContext)); req.srcSeg = reinterpret_cast(request.lKey.tokens[ep->GetDevIndex()]); + req.dstSeg = reinterpret_cast(request.rKey.tokens[ep->GetDevIndex()]); SetServiceTransCtx(req.upCtxData, readContext.seqNo); if (isWrite) { diff --git a/src/hcom/service_v2/service_imp.cpp b/src/hcom/service_v2/service_imp.cpp index 1a74862..447dc5b 100644 --- a/src/hcom/service_v2/service_imp.cpp +++ b/src/hcom/service_v2/service_imp.cpp @@ -899,6 +899,29 @@ int32_t HcomServiceImp::RegisterMemoryRegion(uintptr_t address, uint64_t size, U return res; } + +int32_t HcomServiceImp::ImportUrmaSeg(uintptr_t address, uint64_t size, UBSHcomMemoryKey &key) +{ + if (mDriverPtrs.size() == 0) { + NN_LOG_ERROR("RegisterMemoryRegion failed, as driver not created"); + return NN_ERROR; + } + int32_t res = 0; + auto driver = mDriverPtrs[0].Get(); + if (driver == nullptr) { + NN_LOG_ERROR("CreateMemoryRegion failed because driver empty"); + return NN_ERROR; + } + void *tSeg = nullptr; + res = driver->ImportUrmaSeg(address, size, key.keys[0], &tSeg, key.eid, sizeof(key.eid)); + if (res != 0) { + NN_LOG_ERROR("ImportUrmaSeg failed, res:" << res); + return NN_ERROR; + } + key.tokens[0] = reinterpret_cast(tSeg); + NN_LOG_DEBUG("ImportUrmaSeg success, key.keys[0]:" << key.keys[0]); + return res; +} SerResult HcomServiceImp::InsertPgTable(UBSHcomNetMemoryRegionPtr &mr) { diff --git a/src/hcom/service_v2/service_imp.h b/src/hcom/service_v2/service_imp.h index 40f063e..1d44e0d 100644 --- a/src/hcom/service_v2/service_imp.h +++ b/src/hcom/service_v2/service_imp.h @@ -161,6 +161,7 @@ public: * @return int32_t 成功:0;失败:错误码 */ int32_t RegisterMemoryRegion(uintptr_t address, uint64_t size, UBSHcomRegMemoryRegion &mr) override; + int32_t ImportUrmaSeg(uintptr_t address, uint64_t size, UBSHcomMemoryKey &key) override; /** * @brief memory region取消注册 diff --git a/src/hcom/transport/net_memory_region.h b/src/hcom/transport/net_memory_region.h index e9637a2..caea3d7 100644 --- a/src/hcom/transport/net_memory_region.h +++ b/src/hcom/transport/net_memory_region.h @@ -41,6 +41,11 @@ public: return; } + uint8_t *GetEidRaw() override + { + return nullptr; + } + private: std::mutex mMutex; bool mInited = false; diff --git a/src/hcom/transport/rdma/rdma_mr_pool.h b/src/hcom/transport/rdma/rdma_mr_pool.h index 803f5c5..5e44799 100644 --- a/src/hcom/transport/rdma/rdma_mr_pool.h +++ b/src/hcom/transport/rdma/rdma_mr_pool.h @@ -50,6 +50,10 @@ public: { return; } + uint8_t *GetEidRaw() override + { + return nullptr; + } public: RDMAContext *mRDMAContext = nullptr; diff --git a/src/hcom/transport/shm/shm_mr_pool.h b/src/hcom/transport/shm/shm_mr_pool.h index 45a9a52..9222be8 100644 --- a/src/hcom/transport/shm/shm_mr_pool.h +++ b/src/hcom/transport/shm/shm_mr_pool.h @@ -33,6 +33,10 @@ public: { return; } + uint8_t *GetEidRaw() override + { + return nullptr; + } public: ShmMemoryRegion(const std::string &name, bool extMem, uintptr_t extMemAddress, uint64_t size) diff --git a/src/hcom/transport/ub/net_ub_driver.cpp b/src/hcom/transport/ub/net_ub_driver.cpp index 4eed4e0..548bde5 100644 --- a/src/hcom/transport/ub/net_ub_driver.cpp +++ b/src/hcom/transport/ub/net_ub_driver.cpp @@ -710,6 +710,50 @@ void NetDriverUB::DestroyMemoryRegion(UBSHcomNetMemoryRegionPtr &mr) mr->UnInitialize(); } + +inline urma_target_seg_t *NetDriverUB::ImportSeg(uintptr_t addr, uint32_t bufSize, uint64_t token, urma_eid_t eid) +{ + uint32_t tokenId = static_cast(token); + urma_token_t tokenValue = {static_cast(token >> NN_NO32)}; + urma_seg_t remoteSeg{}; + remoteSeg.len = bufSize; + remoteSeg.ubva.va = addr; + remoteSeg.token_id = tokenId; + remoteSeg.ubva.eid = eid; + remoteSeg.attr.bs.token_policy = URMA_TOKEN_PLAIN_TEXT; + + urma_import_seg_flag_t flag{}; + flag.bs.cacheable = URMA_NON_CACHEABLE; + flag.bs.access = URMA_ACCESS_READ | URMA_ACCESS_WRITE; + flag.bs.mapping = URMA_SEG_NOMAP; + + return HcomUrma::ImportSeg(mContext->mUrmaContext, &remoteSeg, &tokenValue, 0, flag); +} + +NResult NetDriverUB::ImportUrmaSeg(uintptr_t address, uint64_t size, uint64_t key, void **tSeg, uint8_t *eid, + uint32_t eidLen) +{ + NN_LOG_INFO("ImportUrmaSeg, size: " << size << ", key :" << key); + urma_eid_t urmaEid{}; + if (eid == nullptr || eidLen == 0) { + NN_LOG_ERROR("eid is null"); + return NN_ERROR; + } + auto ret = memcpy_s(urmaEid.raw, sizeof(urma_eid_t), eid, eidLen); + if (ret != 0) { + NN_LOG_ERROR("eid is null"); + return NN_ERROR; + } + + urma_target_seg_t *dstSeg = ImportSeg(address, size, key, urmaEid); + if (dstSeg == nullptr) { + NN_LOG_ERROR("ImportSeg failed"); + return NN_ERROR; + } + *tSeg = static_cast(dstSeg); + return NN_OK; +} + } } #endif diff --git a/src/hcom/transport/ub/net_ub_driver.h b/src/hcom/transport/ub/net_ub_driver.h index a859b4a..4f9aae7 100644 --- a/src/hcom/transport/ub/net_ub_driver.h +++ b/src/hcom/transport/ub/net_ub_driver.h @@ -48,6 +48,8 @@ public: NResult CreateMemoryRegion(uintptr_t address, uint64_t size, UBSHcomNetMemoryRegionPtr &mr) override; NResult CreateMemoryRegion(uint64_t size, UBSHcomNetMemoryRegionPtr &mr, unsigned long memid) override; void DestroyMemoryRegion(UBSHcomNetMemoryRegionPtr &mr) override; + NResult ImportUrmaSeg(uintptr_t address, uint64_t size, uint64_t key, void **tSeg, uint8_t *eid, + uint32_t eidLen) override; inline NResult ValidateMemoryRegion(uint64_t lKey, uintptr_t address, uint64_t size) { @@ -92,6 +94,7 @@ protected: } virtual void DoStop() {} + urma_target_seg_t *ImportSeg(uintptr_t addr, uint32_t bufSize, uint64_t token, urma_eid_t eid); protected: std::string mMatchIp; diff --git a/src/hcom/transport/ub/ub_mr_pool.h b/src/hcom/transport/ub/ub_mr_pool.h index d679830..05c1bd7 100644 --- a/src/hcom/transport/ub/ub_mr_pool.h +++ b/src/hcom/transport/ub/ub_mr_pool.h @@ -40,6 +40,10 @@ public: vaLen = mMemSeg->seg.len; tokenId = mMemSeg->seg.token_id; } + uint8_t *GetEidRaw() override + { + return reinterpret_cast(&mUBContext->mBestEid.urmaEid); + } public: UBMemoryRegion() = delete; diff --git a/src/hcom/transport/ub/ub_urma_wrapper_jetty.h b/src/hcom/transport/ub/ub_urma_wrapper_jetty.h index b428840..4f228a2 100644 --- a/src/hcom/transport/ub/ub_urma_wrapper_jetty.h +++ b/src/hcom/transport/ub/ub_urma_wrapper_jetty.h @@ -374,81 +374,13 @@ public: /// @param rtoken [in] 对端 MR 远程访问 key /// @param bufSize [in] 读取大小 /// @param context [in] `UBOpContextInfo`, 事件完成时通过此 context 找回对应 Jetty 以及上层 Service 层的上下文 - UResult PostRead(uintptr_t bufAddr, uint64_t ltoken, uintptr_t dstBufAddr, uint64_t rtoken, uint32_t bufSize, - uint64_t context) - { - if (NN_UNLIKELY(mUrmaJetty == nullptr || mState != UBJettyState::READY)) { - return UB_QP_NOT_INITIALIZED; - } - - NN_LOG_DEBUG("[Request Read] ------ ep id = " << mUpId << ", lKey = " << ltoken << ", rKey = " << rtoken << - ",size = " << bufSize << ", status = " << UBSHcomRequestStatusToString(UBSHcomNetRequestStatus::IN_URMA)); - - urma_target_seg_t *dstSeg = ImportSeg(dstBufAddr, bufSize, rtoken); - if (dstSeg == nullptr) { - NN_LOG_ERROR("Failed to import dstSeg"); - return UB_QP_POST_READ_FAILED; - } - - urma_target_seg_t srcSeg{}; - FillUrmaTargetSeg(srcSeg, bufAddr, bufSize, static_cast(ltoken)); - - urma_jfs_wr_t *bad_wr; - urma_sge_t src_sge{}; - src_sge.addr = bufAddr; - src_sge.tseg = &srcSeg; - src_sge.len = bufSize; - - urma_sge_t dst_sge{}; - dst_sge.addr = dstBufAddr; - dst_sge.tseg = dstSeg; - dst_sge.len = bufSize; - - urma_jfs_wr_t wr{}; - wr.rw.src.sge = &dst_sge; - wr.rw.src.num_sge = 1; - wr.rw.dst.sge = &src_sge; - wr.rw.dst.num_sge = 1; - wr.next = nullptr; - wr.user_ctx = context; - wr.opcode = URMA_OPC_READ; - wr.flag.bs.complete_enable = 1; - wr.tjetty = mTargetJetty; - - auto ret = HcomUrma::PostJettySendWr(mUrmaJetty, &wr, &bad_wr); - if (NN_UNLIKELY(ret != 0)) { - ret = HcomUrma::UnimportSeg(dstSeg); - if (NN_UNLIKELY(ret != 0)) { - NN_LOG_WARN("Unable to unImport Seg " << mName << ", result: " << ret); - } - NN_LOG_ERROR("Failed to post read request to jetty " << mName << ", result: " << ret); - return UB_QP_POST_READ_FAILED; - } - ret = HcomUrma::UnimportSeg(dstSeg); - if (NN_UNLIKELY(ret != 0)) { - NN_LOG_WARN("Unable to unImport Seg " << mName << ", result: " << ret); - } - return UB_OK; - } - - /// @brief 发送 Read 请求,从对端读取数据至本端 - /// @param bufAddr [in] 本地 MR 目标地址 - /// @param ltoken [in] 本地 MR 访问 key - /// @param dstBufAddr [in] 对端 MR 地址 - /// @param rtoken [in] 对端 MR 远程访问 key - /// @param bufSize [in] 读取大小 - /// @param context [in] `UBOpContextInfo`, 事件完成时通过此 context 找回对应 Jetty 以及上层 Service 层的上下文 - UResult PostRead(uintptr_t bufAddr, urma_target_seg_t *ltseg, uintptr_t dstBufAddr, uint64_t rtoken, + UResult PostRead(uintptr_t bufAddr, urma_target_seg_t *ltseg, uintptr_t dstBufAddr, uint64_t dstSeg, uint32_t bufSize, uint64_t context) { - if (NN_UNLIKELY(mUrmaJetty == nullptr || mState != UBJettyState::READY)) { + if (NN_UNLIKELY(mUrmaJetty == nullptr || mState != UBJettyState::READY || dstSeg == 0)) { + NN_LOG_ERROR("Failed to post read as not init or dstSeg is null"); return UB_QP_NOT_INITIALIZED; } - urma_target_seg_t *dstSeg = ImportSeg(dstBufAddr, bufSize, rtoken); - if (dstSeg == nullptr) { - NN_LOG_ERROR("Failed to import dstSeg"); - return UB_QP_POST_READ_FAILED; - } urma_jfs_wr_t *bad_wr; urma_sge_t src_sge{}; @@ -458,7 +390,7 @@ public: urma_sge_t dst_sge{}; dst_sge.addr = dstBufAddr; - dst_sge.tseg = dstSeg; + dst_sge.tseg = reinterpret_cast(reinterpret_cast(dstSeg)); dst_sge.len = bufSize; urma_jfs_wr_t wr{}; @@ -472,19 +404,14 @@ public: wr.flag.bs.complete_enable = 1; wr.tjetty = mTargetJetty; + NN_LOG_DEBUG("[Request Read] ------ , bufAddr = " << bufAddr << ", ltseg = " << ltseg << ", dstBufAddr = " << + dstBufAddr << ", dstSeg = " << dstSeg << ", bufSize = " << bufSize << ", context = " << context << + UBSHcomRequestStatusToString(UBSHcomNetRequestStatus::IN_URMA)); auto ret = HcomUrma::PostJettySendWr(mUrmaJetty, &wr, &bad_wr); if (NN_UNLIKELY(ret != 0)) { - ret = HcomUrma::UnimportSeg(dstSeg); - if (NN_UNLIKELY(ret != 0)) { - NN_LOG_WARN("Unable to unImport Seg " << mName << ", result " << ret); - } NN_LOG_ERROR("Failed to post read request to jetty " << mName << ", result " << ret); return UB_QP_POST_READ_FAILED; } - ret = HcomUrma::UnimportSeg(dstSeg); - if (NN_UNLIKELY(ret != 0)) { - NN_LOG_WARN("Unable to unImport Seg " << mName << ", result " << ret); - } return UB_OK; } diff --git a/src/hcom/transport/ub/ub_worker_io.cpp b/src/hcom/transport/ub/ub_worker_io.cpp index b89ed4e..7e1f770 100644 --- a/src/hcom/transport/ub/ub_worker_io.cpp +++ b/src/hcom/transport/ub/ub_worker_io.cpp @@ -310,7 +310,7 @@ UResult UBWorker::PostRead(UBJetty *qp, const UBSendReadWriteRequest &req) UResult result = UB_OK; result = qp->PostRead(req.lAddress, reinterpret_cast(req.srcSeg), req.rAddress, - req.rKey, req.size, reinterpret_cast(ctx)); + reinterpret_cast(req.dstSeg), req.size, reinterpret_cast(ctx)); if (NN_UNLIKELY(result != UB_OK)) { // remove ctx from qp firstly, then return to pool because, ctx maybe deleted qp->ReturnOneSideWr(); diff --git a/test/hcom/tools/perf_test/CMakeLists.txt b/test/hcom/tools/perf_test/CMakeLists.txt index 6c356eb..f042ed0 100644 --- a/test/hcom/tools/perf_test/CMakeLists.txt +++ b/test/hcom/tools/perf_test/CMakeLists.txt @@ -7,12 +7,12 @@ project(HCOM_PERF_TEST C CXX) set(CMAKE_SKIP_RPATH TRUE) if (NOT EXISTS ${HCOM_INCLUDE_DIR}) - set(HCOM_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/../../dist/hcom/include") + set(HCOM_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/../../../../dist/hcom/include") message(INFO "-- HCOM_INCLUDE_DIR is empty, use default value(${HCOM_INCLUDE_DIR})") endif() if (NOT EXISTS ${HCOM_LIB_DIR}) - set(HCOM_LIB_DIR "${CMAKE_SOURCE_DIR}/../../dist/hcom/lib") + set(HCOM_LIB_DIR "${CMAKE_SOURCE_DIR}/../../../../dist/hcom/lib") message(INFO "-- HCOM_LIB_DIR is empty, use default value(${HCOM_LIB_DIR})") endif() @@ -22,7 +22,10 @@ endif() message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}") include_directories("${HCOM_INCLUDE_DIR}") +include_directories("${CMAKE_SOURCE_DIR}/../../../../dist/hcom_3rdparty/libboundscheck/include") +include_directories("${CMAKE_SOURCE_DIR}/../../../../dist/hcom_3rdparty/umdk/urma/include") link_directories("${HCOM_LIB_DIR}") +link_directories("${CMAKE_SOURCE_DIR}/../../../../dist/hcom_3rdparty/libboundscheck/lib") include_directories("${CMAKE_SOURCE_DIR}") if (${CMAKE_BUILD_TYPE} MATCHES "release") diff --git a/test/hcom/tools/perf_test/hcom_perf_test.cpp b/test/hcom/tools/perf_test/hcom_perf_test.cpp index 2f45328..f4f5a44 100644 --- a/test/hcom/tools/perf_test/hcom_perf_test.cpp +++ b/test/hcom/tools/perf_test/hcom_perf_test.cpp @@ -140,7 +140,10 @@ void RunTest(const PerfTestConfig &cfg, PerfTestReportBase *report) report->PrintReportTail(); pTest->UnInitialize(); } +} +} +using namespace hcom::perftest; int main(int argc, char *argv[]) { // Parse parameters and check for conflicts @@ -162,5 +165,3 @@ int main(int argc, char *argv[]) return 0; } -} -} diff --git a/test/hcom/tools/perf_test/test_case/service_v2/service_read_bw_test.cpp b/test/hcom/tools/perf_test/test_case/service_v2/service_read_bw_test.cpp index 2cb23af..4a36df9 100644 --- a/test/hcom/tools/perf_test/test_case/service_v2/service_read_bw_test.cpp +++ b/test/hcom/tools/perf_test/test_case/service_v2/service_read_bw_test.cpp @@ -140,6 +140,7 @@ bool ServiceReadBwTest::ExchangeAddress() return false; } + mHelper.GetNetService()->ImportUrmaSeg(mReq.rAddress, mReq.size, mPeerMrInfo.lKey); return true; } -- Gitee