LCOV - code coverage report
Current view: top level - base_comm/resources/endpoint_pairs/channels/aicpu - dev_rdma_connection_v2.cc (source / functions) Coverage Total Hit
Test: coverage.info Lines: 70.8 % 250 177
Test Date: 2026-08-04 10:52:23 Functions: 81.0 % 21 17

            Line data    Source code
       1              : /**
       2              :  * Copyright (c) 2026 Huawei Technologies Co., Ltd.
       3              :  * This program is free software, you can redistribute it and/or modify it under the terms and conditions of
       4              :  * CANN Open Software License Agreement Version 2.0 (the "License").
       5              :  * Please refer to the License for details. You may not use this file except in compliance with the License.
       6              :  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
       7              :  * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
       8              :  * See LICENSE in the root of the software repository for the full text of the License.
       9              :  */
      10              : #include "./dev_rdma_connection_v2.h"
      11              : #include "log.h"
      12              : #include "orion_adapter_rts.h"
      13              : #include "hccp.h"
      14              : 
      15              : namespace hcomm {
      16              : constexpr uint32_t DEFAULT_CQN = 0;
      17              : 
      18           40 : DevRdmaConnectionV2::DevRdmaConnectionV2(Hccl::Socket *socket, RdmaHandle rdmaHandle):
      19           40 :     socket_(socket), rdmaHandle_(rdmaHandle) {}
      20              : 
      21           40 : HcclResult DevRdmaConnectionV2::Init()
      22              : {
      23           40 :     if (rdmaConnStatus_ != RdmaConnStatus::CLOSED) {
      24            0 :         HCCL_INFO("[DevRdmaConnectionV2][%s] status[%s] is not need init.",
      25              :             __func__, rdmaConnStatus_.Describe().c_str());
      26            0 :         return HCCL_SUCCESS;
      27              :     }
      28              : 
      29           40 :     GetNdaOps();
      30           40 :     CHK_RET(GetDirectFlag());
      31           40 :     CHK_RET(GetDmaMode());
      32              : 
      33           40 :     rdmaConnStatus_ = RdmaConnStatus::INIT;
      34           40 :     return HCCL_SUCCESS;
      35              : }
      36              : 
      37           44 : DevRdmaConnectionV2::~DevRdmaConnectionV2()
      38              : {
      39           40 :     if (rdmaConnStatus_ == RdmaConnStatus::CLOSED || rdmaConnStatus_ == RdmaConnStatus::INIT) {
      40           36 :         return;
      41              :     }
      42            4 :     HcclResult ret = DestroyQp();
      43            4 :     if (ret != HCCL_SUCCESS) {
      44            0 :         HCCL_ERROR("[%s]call DestroyQp failed: hcclRet -> %d", __func__, ret);
      45              :     }
      46          148 : }
      47              : 
      48            5 : std::string DevRdmaConnectionV2::Describe() const
      49              : {
      50            5 :     return Hccl::StringFormat("DevRdmaConnectionV2[status=%s]", rdmaConnStatus_.Describe().c_str());
      51              : }
      52              : 
      53            0 : static void *NdaAlloc(size_t size) {
      54            0 :     return Hccl::HrtMalloc(size, static_cast<int>(ACL_MEM_MALLOC_HUGE_ONLY));
      55              : }
      56              : 
      57            0 : static void NdaFree(void *ptr) {
      58            0 :     if (ptr == nullptr) {
      59            0 :         return;
      60              :     }
      61            0 :     Hccl::HrtFree(ptr);
      62              : }
      63              : 
      64            0 : static void NdaMemset(void *dst, int value, size_t count) {
      65            0 :     Hccl::HrtMemsetV2(dst, count, value, count);
      66            0 : }
      67              : 
      68            0 : static int NdaMemcpy(void *dst, size_t dstSize, void *src, size_t srcSize, uint32_t direct) {
      69            0 :     Hccl::rtMemcpyKind_t kind = Hccl::rtMemcpyKind_t::RT_MEMCPY_DEFAULT;
      70            0 :     switch (direct) {
      71            0 :         case MEMCPY_DIRECT_HOST_TO_HOST: {
      72            0 :             kind = Hccl::rtMemcpyKind_t::RT_MEMCPY_HOST_TO_HOST;
      73            0 :             break;
      74              :         }
      75            0 :         case MEMCPY_DIRECT_HOST_TO_DEVICE: {
      76            0 :             kind = Hccl::rtMemcpyKind_t::RT_MEMCPY_HOST_TO_DEVICE;
      77            0 :             break;
      78              :         }
      79            0 :         case MEMCPY_DIRECT_DEVICE_TO_HOST: {
      80            0 :             kind = Hccl::rtMemcpyKind_t::RT_MEMCPY_DEVICE_TO_HOST;
      81            0 :             break;
      82              :         }
      83            0 :         case MEMCPY_DIRECT_DEVICE_TO_DEVICE: {
      84            0 :             kind = Hccl::rtMemcpyKind_t::RT_MEMCPY_DEVICE_TO_DEVICE;
      85            0 :             break;
      86              :         }
      87            0 :         default: {
      88            0 :             HCCL_ERROR("[MemcpyKindTranslate]Not support the memory copy type[%d].", direct);
      89            0 :             return -1;
      90              :         }
      91              :     }
      92            0 :     Hccl::HrtMemcpy(dst, dstSize, src, srcSize, kind);
      93            0 :     return 0;
      94              : }
      95              : 
      96           40 : void DevRdmaConnectionV2::GetNdaOps() {
      97           40 :     ndaOps_ = {
      98              :         .alloc = NdaAlloc,
      99              :         .free = NdaFree,
     100              :         .memset_s = NdaMemset,
     101              :         .memcpy_s = NdaMemcpy
     102              :     };
     103           40 : }
     104              : 
     105           40 : HcclResult DevRdmaConnectionV2::GetDirectFlag() {
     106           40 :     s32 ret = RaNdaGetDirectFlag(rdmaHandle_, &directFlag_);
     107           40 :     if (ret != 0) {
     108            0 :         HCCL_ERROR("[DevRdmaConnectionV2][GetDirectFlag]errNo[0x%016llx] get directFlag fail. "
     109              :             "return[%d], params: rdmaHandle[%p], directFlag[%d]",
     110              :             HCCL_ERROR_CODE(HCCL_E_INTERNAL), ret, rdmaHandle_, directFlag_);
     111            0 :         return HCCL_E_INTERNAL;
     112              :     }
     113           40 :     return HCCL_SUCCESS;
     114              : }
     115              : 
     116           40 : HcclResult DevRdmaConnectionV2::GetDmaMode() {
     117           40 :     switch (directFlag_) {
     118           40 :         case DIRECT_FLAG_PCIE: {
     119           40 :             dmaMode_ = QBUF_DMA_MODE_DEFAULT;
     120           40 :             break;
     121              :         }
     122            0 :         case DIRECT_FLAG_UB: {
     123            0 :             dmaMode_ = QBUF_DMA_MODE_INDEP_UB;
     124            0 :             break;
     125              :         }
     126            0 :         default: {
     127            0 :             HCCL_ERROR("[GetDmaMode]Not support the directFlag [%d].", directFlag_);
     128            0 :             dmaMode_ = QBUF_DMA_MODE_MAX;
     129            0 :             return HCCL_E_INTERNAL;
     130              :         }
     131              :     }
     132           40 :     HCCL_INFO("[GetDmaMode] directFlag[%d], dmaMode[%d]", directFlag_, dmaMode_);
     133           40 :     return HCCL_SUCCESS;
     134              : }
     135              : 
     136            4 : HcclResult DevRdmaConnectionV2::CreateQp()
     137              : {
     138            4 :     if (socket_->GetStatus() != Hccl::SocketStatus::OK) {
     139            0 :         HCCL_WARNING("[DevRdmaConnectionV2::CreateQp] socket status is not ok, please");
     140            0 :         return HCCL_E_AGAIN;
     141              :     }
     142              : 
     143            4 :     CHK_RET(Hccl::HrtRaNdaCqCreate(rdmaHandle_, &ndaOps_, dmaMode_, &ndaCqInfo_, &cqHandle_));
     144              : 
     145            4 :     CHK_RET(Hccl::HrtRaNdaQpCreate(rdmaHandle_, &ndaOps_, dmaMode_, &ndaCqInfo_, &ndaQpInfo_, &qpHandle_));
     146              : 
     147            4 :     SqPiMem_ = hccl::DeviceMem::alloc(sizeof(void*));
     148            4 :     SqCiMem_ = hccl::DeviceMem::alloc(sizeof(void*));
     149            4 :     CqPiMem_ = hccl::DeviceMem::alloc(sizeof(void*));
     150            4 :     CqCiMem_ = hccl::DeviceMem::alloc(sizeof(void*));
     151            4 :     CHK_PRT_RET(!SqPiMem_ || !SqCiMem_ || !CqPiMem_ || !CqCiMem_,
     152              :         HCCL_ERROR("%s DeviceMem::alloc for SqPi_ or SqCi_ or CqPi_ or CqCi_ failed, size=%zu", __func__, sizeof(void*)),
     153              :         HCCL_E_MEMORY);
     154              : 
     155            4 :     rdmaConnStatus_ = RdmaConnStatus::QP_CREATED;
     156            4 :     return HCCL_SUCCESS;
     157              : }
     158              : 
     159            4 : HcclResult DevRdmaConnectionV2::DestroyQp()
     160              : {
     161            4 :     if (rdmaConnStatus_ == RdmaConnStatus::CLOSED || rdmaConnStatus_ == RdmaConnStatus::INIT) {
     162            0 :         return HCCL_SUCCESS;
     163              :     }
     164              : 
     165            4 :     HcclResult ret = HCCL_SUCCESS;
     166              : 
     167            4 :     if (qpHandle_ != nullptr) {
     168            0 :         Hccl::HrtRaQpDestroy(qpHandle_);
     169            0 :         qpHandle_ = nullptr;
     170              :     }
     171              : 
     172            4 :     if (cqHandle_ != nullptr) {
     173            4 :         ret = Hccl::HrtRaNdaCqDestroy(rdmaHandle_, cqHandle_);
     174            4 :         if (ret != HCCL_SUCCESS) {
     175            0 :             HCCL_ERROR("[DevRdmaConnectionV2::%s] HrtRaNdaCqDestroy failed, ret[%d]", __func__, ret);
     176              :         }
     177            4 :         cqHandle_ = nullptr;
     178              :     }
     179              : 
     180            4 :     SqPiMem_ = hccl::DeviceMem();
     181            4 :     SqCiMem_ = hccl::DeviceMem();
     182            4 :     CqPiMem_ = hccl::DeviceMem();
     183            4 :     CqCiMem_ = hccl::DeviceMem();
     184              : 
     185            4 :     rdmaConnStatus_ = RdmaConnStatus::CLOSED;
     186            4 :     return ret;
     187              : }
     188              : 
     189            4 : HcclResult DevRdmaConnectionV2::GetExchangeDto(std::unique_ptr<Hccl::Serializable> &locQpAttrserial)
     190              : {
     191            4 :     if (rdmaConnStatus_ != RdmaConnStatus::QP_CREATED && rdmaConnStatus_ != RdmaConnStatus::QP_MODIFIED) {
     192            0 :         HCCL_ERROR("[DevRdmaConnectionV2][%s] status[%s] is not expected.",
     193              :             __func__, rdmaConnStatus_.Describe().c_str());
     194            0 :         return HCCL_E_AGAIN;
     195              :     }
     196              : 
     197              :     struct QpAttr localQpAttr;
     198            4 :     s32 ret = RaGetQpAttr(qpHandle_, &localQpAttr);
     199            4 :     if (ret != 0) {
     200            0 :         HCCL_ERROR("[DevRdmaConnectionV2::%s]RaGetQpAttr failed, ret[%d]", __func__, ret);
     201            0 :         return HCCL_E_ROCE_CONNECT;
     202              :     }
     203            4 :     std::unique_ptr<ExchangeRdmaConnDto> dto= nullptr;
     204            4 :     EXCEPTION_CATCH(
     205              :         dto = std::make_unique<ExchangeRdmaConnDto>(localQpAttr.qpn, localQpAttr.psn, localQpAttr.gidIdx),
     206              :         return HCCL_E_PTR
     207              :     );
     208            4 :     CHK_SAFETY_FUNC_RET(memcpy_s(dto->gid_, HCCP_GID_RAW_LEN, localQpAttr.gid, HCCP_GID_RAW_LEN));
     209            4 :     locQpAttrserial = std::unique_ptr<Hccl::Serializable>(std::move(dto));
     210            4 :     return HCCL_SUCCESS;
     211            4 : }
     212              : 
     213            5 : HcclResult DevRdmaConnectionV2::ParseRmtExchangeDto(const Hccl::Serializable &rmtDto)
     214              : {
     215            5 :     auto dto = dynamic_cast<const ExchangeRdmaConnDto &>(rmtDto);
     216            5 :     HCCL_INFO("[DevRdmaConnectionV2][%s] remoteConnDto[%s]", __func__, dto.Describe().c_str());
     217            5 :     rmtQpAttr_.psn = dto.psn_;
     218            5 :     rmtQpAttr_.qpn = dto.qpn_;
     219            5 :     rmtQpAttr_.gid_idx = dto.gid_idx_;
     220            5 :     CHK_SAFETY_FUNC_RET(memcpy_s(rmtQpAttr_.gid, HCCP_GID_RAW_LEN, dto.gid_, HCCP_GID_RAW_LEN));
     221            5 :     return HCCL_SUCCESS;
     222            5 : }
     223              : 
     224            1 : HcclResult DevRdmaConnectionV2::ModifyQp()
     225              : {
     226            1 :     if (rdmaConnStatus_ == RdmaConnStatus::QP_MODIFIED) {
     227            0 :         HCCL_WARNING("[DevRdmaConnectionV2][%s] modify qp already, status[%s].",
     228              :                      __func__, rdmaConnStatus_.Describe().c_str());
     229            0 :         return HCCL_SUCCESS;
     230              :     } 
     231            1 :     if (rdmaConnStatus_ != RdmaConnStatus::QP_CREATED) {
     232            0 :         HCCL_ERROR("[DevRdmaConnectionV2][%s] status[%s] is not expected.", __func__,
     233              :             rdmaConnStatus_.Describe().c_str());
     234            0 :         return HCCL_E_AGAIN;
     235              :     }
     236              : 
     237            1 :     if (!rmtQpAttr_.IsValid()) {
     238            0 :         HCCL_ERROR("[DevRdmaConnectionV2][%s] romate Qp Attr is empty, exchange qp attr first", __func__);
     239            0 :         return HCCL_E_INTERNAL;
     240              :     }
     241              : 
     242              :     struct QpAttr localQpAttr;
     243            1 :     s32 ret = RaGetQpAttr(qpHandle_, &localQpAttr);
     244            1 :     if (ret != 0) {
     245            0 :         HCCL_ERROR("[DevRdmaConnectionV2::%s]RaGetQpAttr failed, ret[%d]", __func__, ret);
     246            0 :         return HCCL_E_ROCE_CONNECT;
     247              :     }
     248              : 
     249              :     struct TypicalQp localQp;
     250              :     struct TypicalQp rmtQp;
     251            1 :     localQp.sl = qpInfo_.serviceLevel;
     252            1 :     localQp.tc = qpInfo_.trafficClass;
     253            1 :     localQp.retryCnt = qpInfo_.retryCnt;
     254            1 :     localQp.retryTime = qpInfo_.retryInterval;
     255            1 :     localQp.qpn = localQpAttr.qpn;
     256            1 :     localQp.psn = localQpAttr.psn;
     257            1 :     localQp.gidIdx = localQpAttr.gidIdx;
     258            1 :     (void)memcpy_s(localQp.gid, HCCP_GID_RAW_LEN, localQpAttr.gid, HCCP_GID_RAW_LEN);
     259            1 :     rmtQp.sl = qpInfo_.serviceLevel;
     260            1 :     rmtQp.tc = qpInfo_.trafficClass;
     261            1 :     rmtQp.retryCnt = qpInfo_.retryCnt;
     262            1 :     rmtQp.retryTime = qpInfo_.retryInterval;
     263            1 :     rmtQp.qpn = rmtQpAttr_.qpn;
     264            1 :     rmtQp.psn = rmtQpAttr_.psn;
     265            1 :     rmtQp.gidIdx = rmtQpAttr_.gid_idx;
     266            1 :     (void)memcpy_s(rmtQp.gid, HCCP_GID_RAW_LEN, rmtQpAttr_.gid, HCCP_GID_RAW_LEN);
     267            1 :     ret = RaTypicalQpModify(qpHandle_, &localQp, &rmtQp);
     268            1 :     if (ret != 0) {
     269            0 :         HCCL_ERROR("[modify][ra_qp]modify qp failed, ret(%d)", ret);
     270            0 :         return HCCL_E_ROCE_CONNECT;
     271              :     }
     272            1 :     rdmaConnStatus_ = RdmaConnStatus::QP_MODIFIED;
     273            1 :     return HCCL_SUCCESS;
     274              : }
     275              : 
     276            9 : HcclResult DevRdmaConnectionV2::BuildSqContext(SqContext* context)
     277              : {
     278            9 :     if (context == nullptr) {
     279            0 :         HCCL_ERROR("[GetSqContext] Invalid null pointer for context.");
     280            0 :         return HCCL_E_PTR;
     281              :     }
     282              : 
     283              :     // 零初始化roceSq, 确保不同dmaMode下未使用字段有确定值
     284            9 :     (void)memset_s(&context->contextInfo.roceSq, sizeof(context->contextInfo.roceSq), 0,
     285              :         sizeof(context->contextInfo.roceSq));
     286              : 
     287              :     struct QpAttr localQpAttr;
     288            9 :     s32 ret = RaGetQpAttr(qpHandle_, &localQpAttr);
     289            9 :     if (ret != 0) {
     290            0 :         HCCL_ERROR("[DevRdmaConnectionV2::%s]RaGetQpAttr failed, ret[%d]", __func__, ret);
     291            0 :         return HCCL_E_ROCE_CONNECT;
     292              :     }
     293            9 :     s32 mtuShift = localQpAttr.pathMtu - 1;
     294              : 
     295            9 :     context->type = SQ_CONTEXT_TYPE_ROCE;
     296            9 :     context->contextInfo.roceSq.qpn = localQpAttr.qpn;
     297            9 :     context->contextInfo.roceSq.sqVa = ndaQpInfo_.sqInfo.qBuf.base;
     298            9 :     context->contextInfo.roceSq.wqeSize = ndaQpInfo_.sqInfo.qBuf.entrySize;
     299            9 :     context->contextInfo.roceSq.depth = ndaQpInfo_.sqInfo.qBuf.entryCnt;
     300            9 :     context->contextInfo.roceSq.headAddr = reinterpret_cast<uint64_t >(SqPiMem_.ptr());
     301            9 :     context->contextInfo.roceSq.tailAddr = reinterpret_cast<uint64_t >(SqCiMem_.ptr());
     302            9 :     context->contextInfo.roceSq.sl = qpInfo_.serviceLevel;
     303            9 :     context->contextInfo.roceSq.dbHwVa = reinterpret_cast<uint64_t >(ndaQpInfo_.sqInfo.dbHwVa.iovBase);
     304              : 
     305            9 :     if (dmaMode_ == QBUF_DMA_MODE_INDEP_UB) {
     306            0 :         context->contextInfo.roceSq.dbSwVa = reinterpret_cast<uint64_t >(ndaQpInfo_.sqInfo.dbrPiVa.iovBase);
     307            0 :         context->contextInfo.roceSq.mtuShift = static_cast<uint8_t>(mtuShift);
     308              :     }
     309              : 
     310            9 :     HCCL_INFO(
     311              :         "[DevRdmaConnectionV2][%s] type=%u, QPN=%u, SQ_VA=0x%llx, WQE_SIZE=%u, "
     312              :         "SQ_DEPTH=%u, SQ_HEAD_ADDR=0x%llx, SQ_TAIL_ADDR=0x%llx, "
     313              :         "SL=%u, DB_HW_VA=0x%llx, DB_SW_VA=0x%llx, MTU_SHIFT=%u", __func__, context->type,
     314              :         context->contextInfo.roceSq.qpn, context->contextInfo.roceSq.sqVa, context->contextInfo.roceSq.wqeSize,
     315              :         context->contextInfo.roceSq.depth, context->contextInfo.roceSq.headAddr, context->contextInfo.roceSq.tailAddr,
     316              :         context->contextInfo.roceSq.sl, context->contextInfo.roceSq.dbHwVa,
     317              :         context->contextInfo.roceSq.dbSwVa, context->contextInfo.roceSq.mtuShift
     318              :     );
     319            9 :     return HCCL_SUCCESS;
     320              : }
     321              : 
     322            9 : HcclResult DevRdmaConnectionV2::BuildCqContext(CqContext* context)
     323              : {
     324            9 :     if (context == nullptr) {
     325            0 :         HCCL_ERROR("[GetCqContext] Invalid null pointer for context.");
     326            0 :         return HCCL_E_PTR;
     327              :     }
     328              : 
     329              :     // 零初始化roceCq, 确保不同dmaMode下未使用字段有确定值
     330            9 :     (void)memset_s(&context->contextInfo.roceCq, sizeof(context->contextInfo.roceCq), 0,
     331              :         sizeof(context->contextInfo.roceCq));
     332              : 
     333            9 :     context->type = CQ_CONTEXT_TYPE_ROCE;
     334            9 :     context->contextInfo.roceCq.cqVa = ndaCqInfo_.cqInfo.qBuf.base;
     335            9 :     context->contextInfo.roceCq.cqeSize = ndaCqInfo_.cqInfo.qBuf.entrySize;
     336            9 :     context->contextInfo.roceCq.cqDepth = ndaCqInfo_.cqInfo.qBuf.entryCnt;
     337            9 :     context->contextInfo.roceCq.headAddr = reinterpret_cast<uint64_t >(CqPiMem_.ptr());
     338            9 :     context->contextInfo.roceCq.tailAddr = reinterpret_cast<uint64_t >(CqCiMem_.ptr());
     339              :     // PCIe模式(DEFAULT): 仅使用硬DB; UBNIC模式(INDEP_UB): 仅使用软DB
     340            9 :     if (dmaMode_ == QBUF_DMA_MODE_DEFAULT) {
     341            9 :         context->contextInfo.roceCq.cqn = ndaCqInfo_.resv[0]; // 云脉网卡NDA直驱,协商ndaCqInfo_.resv[0]字段为CQN
     342            9 :         context->contextInfo.roceCq.dbHwVa = reinterpret_cast<uint64_t >(ndaCqInfo_.cqInfo.dbHwVa.iovBase);
     343              :     } else {
     344            0 :         context->contextInfo.roceCq.cqn = DEFAULT_CQN;
     345            0 :         context->contextInfo.roceCq.dbSwVa = reinterpret_cast<uint64_t >(ndaCqInfo_.cqInfo.dbrCiVa.iovBase);
     346              :     }
     347              : 
     348            9 :     HCCL_INFO(
     349              :         "[DevRdmaConnectionV2][%s] type=%u, CQN=%u, CQ_VA=0x%llx, CQE_SIZE=%u, CQ_DEPTH=%u, "
     350              :         "CQ_HEAD_ADDR=0x%llx, CQ_TAIL_ADDR=0x%llx, DB_HW_VA=0x%llx, DB_SW_VA=0x%llx]",
     351              :         __func__, context->type,
     352              :         context->contextInfo.roceCq.cqn, context->contextInfo.roceCq.cqVa, context->contextInfo.roceCq.cqeSize,
     353              :         context->contextInfo.roceCq.cqDepth, context->contextInfo.roceCq.headAddr, context->contextInfo.roceCq.tailAddr,
     354              :         context->contextInfo.roceCq.dbHwVa, context->contextInfo.roceCq.dbSwVa
     355              :     );
     356              : 
     357            9 :     return HCCL_SUCCESS;
     358              : }
     359              : 
     360            4 : std::vector<char> DevRdmaConnectionV2::GetSqUniqueId() const
     361              : {
     362            4 :     HCCL_DEBUG("start packing sq uniqueId");
     363              :     struct QpAttr localQpAttr;
     364            4 :     s32 ret = RaGetQpAttr(qpHandle_, &localQpAttr);
     365            4 :     if (ret != 0) {
     366            0 :         HCCL_ERROR("[DevRdmaConnectionV2::%s]RaGetQpAttr failed, ret[%d]", __func__, ret);
     367            0 :         return {};
     368              :     }
     369            4 :     s32 mtuShift = localQpAttr.pathMtu - 1;
     370              : 
     371            4 :     Hccl::BinaryStream binaryStream;
     372              :     // 打包1825网卡NDA直驱资源
     373            4 :     binaryStream << localQpAttr.qpn;
     374            4 :     binaryStream << ndaQpInfo_.sqInfo.qBuf.base;
     375            4 :     binaryStream << ndaQpInfo_.sqInfo.qBuf.entrySize;
     376            4 :     binaryStream << ndaQpInfo_.sqInfo.qBuf.entryCnt;
     377            4 :     binaryStream << reinterpret_cast<uint64_t >(SqPiMem_.ptr());
     378            4 :     binaryStream << reinterpret_cast<uint64_t >(SqCiMem_.ptr());
     379            4 :     binaryStream << reinterpret_cast<uint64_t >(ndaQpInfo_.sqInfo.dbHwVa.iovBase); 
     380            4 :     binaryStream << reinterpret_cast<uint64_t >(ndaQpInfo_.sqInfo.dbrPiVa.iovBase);
     381            4 :     binaryStream << static_cast<uint8_t>(qpInfo_.serviceLevel);
     382            4 :     binaryStream << static_cast<uint8_t>(mtuShift);
     383              : 
     384            4 :     std::vector<char> result;
     385            4 :     binaryStream.Dump(result);
     386            4 :     return result;
     387            4 : }
     388              : 
     389            4 : std::vector<char> DevRdmaConnectionV2::GetCqUniqueId() const
     390              : {
     391            4 :     HCCL_DEBUG("start packing cq uniqueId");
     392            4 :     Hccl::BinaryStream binaryStream;
     393              :     // 打包1825网卡NDA直驱资源
     394            4 :     binaryStream << DEFAULT_CQN;
     395            4 :     binaryStream << ndaCqInfo_.cqInfo.qBuf.base;
     396            4 :     binaryStream << ndaCqInfo_.cqInfo.qBuf.entrySize;
     397            4 :     binaryStream << ndaCqInfo_.cqInfo.qBuf.entryCnt;
     398            4 :     binaryStream << reinterpret_cast<uint64_t >(CqPiMem_.ptr());
     399            4 :     binaryStream << reinterpret_cast<uint64_t >(CqCiMem_.ptr());
     400            4 :     binaryStream << reinterpret_cast<uint64_t >(ndaCqInfo_.cqInfo.dbrCiVa.iovBase);
     401              : 
     402            4 :     std::vector<char> result;
     403            4 :     binaryStream.Dump(result);
     404            4 :     return result;
     405            4 : }
     406              : 
     407            4 : std::vector<char> DevRdmaConnectionV2::GetUniqueId() const
     408              : {
     409            4 :     HCCL_DEBUG("start packing conn uniqueId");
     410            4 :     Hccl::BinaryStream binaryStream;
     411            4 :     binaryStream << dmaMode_;
     412            4 :     binaryStream << GetSqUniqueId();
     413            4 :     binaryStream << GetCqUniqueId();
     414              : 
     415            4 :     std::vector<char> result;
     416            4 :     binaryStream.Dump(result);
     417            4 :     return result;
     418            4 : }
     419              : 
     420              : } // namespace hcomm
        

Generated by: LCOV version 2.0-1