LCOV - code coverage report
Current view: top level - base_comm/resources/reged_mems - hccs_reged_mem_mgr.cc (source / functions) Coverage Total Hit
Test: coverage.info Lines: 76.0 % 275 209
Test Date: 2026-07-28 12:11:00 Functions: 77.3 % 22 17

            Line data    Source code
       1              : /**
       2              :  * Copyright (c) 2025 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 "log.h"
      11              : #include "hccs_reged_mem_mgr.h"
      12              : // for hccl_network.h
      13              : #include "hccl_network.h"
      14              : #include "adapter_rts.h"
      15              : 
      16              : using namespace hccl;
      17              : namespace hcomm {
      18              : 
      19           19 : HccsRegedMemMgr::HccsRegedMemMgr(HcclNetDevCtx netDevCtx)
      20              : {
      21           19 :     netDevCtx_ = netDevCtx;
      22           19 : }
      23              : 
      24           19 : HccsRegedMemMgr::~HccsRegedMemMgr()
      25              : {
      26           19 :     allRegisteredBuffers_.clear();
      27           19 : }
      28              : 
      29           21 : HcclResult HccsRegedMemMgr::RegisterMemory(HcommMem mem, const char *memTag, void **memHandle)
      30              : {
      31           21 :     HCCL_INFO("[%s] Begin", __FUNCTION__);
      32           21 :     CHK_RET(ValidateMemParams(mem, memHandle));
      33           18 :     HCCL_INFO("[%s] addr[%p] size[%u] start", __FUNCTION__, mem.addr, mem.size);
      34              : 
      35           18 :     NetDevContext *netDevCtx = static_cast<NetDevContext *>(netDevCtx_);
      36           18 :     std::shared_ptr<LocalIpcRmaBufferMgr> localIpcRmaBufferMgr = netDevCtx->GetlocalIpcRmaBufferMgr();
      37           18 :     CHK_PTR_NULL(localIpcRmaBufferMgr);
      38              : 
      39           18 :     std::shared_ptr<hccl::LocalIpcRmaBuffer> localIpcRmaBuffer = nullptr;
      40              :     // LocalIpcRmaBuffer构造函数存在注册动作,在调用该构造函数前需检查是否注册过
      41           18 :     hccl::BufferKey<uintptr_t, u64> memKey(reinterpret_cast<uintptr_t>(mem.addr), mem.size);
      42           18 :     auto findPair = localIpcRmaBufferMgr->Find(memKey);
      43           18 :     if (findPair.first) {
      44            5 :         auto parentBuffer = findPair.second;
      45            5 :         EXCEPTION_CATCH((localIpcRmaBuffer = std::make_shared<hccl::LocalIpcRmaBuffer>(
      46              :             netDevCtx_, mem.addr, mem.size, static_cast<RmaMemType>(mem.type), *parentBuffer)),
      47              :             return HCCL_E_PTR);
      48            5 :         CHK_RET(AddBuffer(localIpcRmaBufferMgr, parentBuffer));
      49            5 :         HCCL_INFO("[HccsRegedMemMgr][RegisterMemory] alias created, key {%p, %llu}", mem.addr, mem.size);
      50            5 :     } else {
      51           13 :         EXCEPTION_CATCH((localIpcRmaBuffer = std::make_shared<hccl::LocalIpcRmaBuffer>(
      52              :             netDevCtx_, mem.addr, mem.size, static_cast<RmaMemType>(mem.type))),
      53              :             return HCCL_E_PTR);
      54              : 
      55           13 :         HcclResult ret = localIpcRmaBuffer->Init();
      56           13 :         if (ret != HCCL_SUCCESS) {
      57            1 :             HCCL_ERROR("[HccsRegedMemMgr][RegisterMemory]localbuffer init failed %d.", ret);
      58            1 :             return ret;
      59              :         }
      60              : 
      61           12 :         CHK_RET(AddBuffer(localIpcRmaBufferMgr, localIpcRmaBuffer));
      62           12 :         HCCL_INFO("[HccsRegedMemMgr][RegisterMemory]Register memory success! Add key {%p, %llu}", mem.addr, mem.size);
      63              :     }
      64              : 
      65           17 :     *memHandle = static_cast<void *>(localIpcRmaBuffer.get());
      66           17 :     allRegisteredBuffers_.emplace_back(localIpcRmaBuffer, false);
      67              : 
      68           17 :     HCCL_INFO("[%s] addr[%p] size[%u] memHandle[%p] allRegisteredBuffers_.size[%d]done",
      69              :         __FUNCTION__, mem.addr, mem.size, *memHandle, allRegisteredBuffers_.size());
      70           17 :     return HCCL_SUCCESS;
      71           18 : }
      72              : 
      73           20 : HcclResult HccsRegedMemMgr::UnregisterMemory(void* memHandle)
      74              : {
      75           20 :     HCCL_INFO("[%s] Begin", __FUNCTION__);
      76           20 :     CHK_PTR_NULL(memHandle);
      77              : 
      78           20 :     NetDevContext *netDevCtx = static_cast<NetDevContext *>(netDevCtx_);
      79           20 :     std::shared_ptr<LocalIpcRmaBufferMgr> localIpcRmaBufferMgr = netDevCtx->GetlocalIpcRmaBufferMgr();
      80           20 :     CHK_PTR_NULL(localIpcRmaBufferMgr);
      81              : 
      82           20 :     hccl::LocalIpcRmaBuffer* buffer = static_cast<hccl::LocalIpcRmaBuffer*>(memHandle);
      83           20 :     void *addr = buffer->GetAddr();
      84           20 :     uint64_t size = buffer->GetSize();
      85           20 :     HCCL_INFO("[%s] addr[%p] size[%u] memHandle[%p] start", __FUNCTION__, addr, size, memHandle);
      86              : 
      87              :     // IsAlias() 直接区分父子buffer:
      88              :     //   - 父buffer (IsAlias()=false): 自己的key在tree中 → Del(ownKey)
      89              :     //   - 子buffer (IsAlias()=true):  自己的key不在tree中 → 通过Find找父key做Del
      90           20 :     hccl::BufferKey<uintptr_t, u64> ownKey(reinterpret_cast<uintptr_t>(addr), size);
      91           20 :     hccl::LocalIpcRmaBuffer* refBuffer = buffer;
      92              : 
      93           20 :     if (buffer->IsAlias()) {
      94            6 :         auto findResult = localIpcRmaBufferMgr->Find(ownKey);
      95            6 :         if (findResult.first) {
      96            4 :             refBuffer = findResult.second.get();
      97              :         } else {
      98            2 :             HCCL_ERROR("[HccsRegedMemMgr][UnregisterMemory] alias parent not found");
      99            2 :             return HCCL_E_NOT_FOUND;
     100              :         }
     101            6 :     }
     102              : 
     103           18 :     auto refBufferInfo = std::make_pair(refBuffer->GetAddr(), refBuffer->GetSize());
     104           18 :     hccl::BufferKey<uintptr_t, u64> memKey(reinterpret_cast<uintptr_t>(refBufferInfo.first), refBufferInfo.second);
     105           18 :     bool resultPair = false;
     106           18 :     EXCEPTION_CATCH(resultPair = localIpcRmaBufferMgr->Del(memKey), return HCCL_E_NOT_FOUND);
     107              :     // 无论tree中是否删除(ref是否归零),当前handle都要从allBuffers移除
     108           16 :     bool found = false;
     109           21 :     for (auto it = allRegisteredBuffers_.begin(); it != allRegisteredBuffers_.end(); it++) {
     110           21 :         if (it->first.get() == buffer) {
     111           16 :             HCCL_INFO("[%s] addr[%p] size[%u] memHandle[%p]", __FUNCTION__, addr, size, memHandle);
     112              :             // IsInTree判断tree中是否还有该key的引用
     113           16 :             if (!localIpcRmaBufferMgr->IsInTree(ownKey)) {
     114           12 :                 it = allRegisteredBuffers_.erase(it);
     115              :             } else {
     116            4 :                 it->second = true;
     117              :             }
     118           16 :             found = true;
     119           16 :             break;
     120              :         }
     121              :     }
     122           16 :     if (!found) {
     123            0 :         HCCL_ERROR("[%s] addr[%p] size[%zu] memHandle[%p] allRegisteredBuffers_.size[%zu] Not Found",
     124              :             __FUNCTION__, addr, static_cast<size_t>(size), memHandle, allRegisteredBuffers_.size());
     125            0 :         return HCCL_E_NOT_FOUND;
     126              :     }
     127           16 :     if (!resultPair) {
     128            5 :         HCCL_INFO("[HccsRegedMemMgr][UnregisterMemory]Memory reference count is larger than 0, do not deregister memory.");
     129            5 :         return HCCL_SUCCESS;
     130              :     }
     131           11 :     return HCCL_SUCCESS;
     132           20 : }
     133              : 
     134            2 : HcclResult HccsRegedMemMgr::SerializeToMemDesc(const EndpointDesc &endpointDesc, hccl::LocalIpcRmaBuffer *localIpcRmaBuffer,
     135              :     void **memDesc, uint32_t *descLen)
     136              : {
     137            2 :     HCCL_INFO("[%s] Begin", __FUNCTION__);
     138            2 :     CHK_PTR_NULL(memDesc);
     139            2 :     CHK_PTR_NULL(descLen);
     140              : 
     141            2 :     std::string &ipcRmaBufferDesc = localIpcRmaBuffer->Serialize();
     142            2 :     HCCL_INFO("[%s] ipcRmaBufferDesc.len[%u]", __FUNCTION__, ipcRmaBufferDesc.length());
     143              : 
     144            2 :     ipcRmaBufferDesc.resize(ipcRmaBufferDesc.length() + sizeof(EndpointDesc));
     145              :     // put the EndpointDesc at the end of the Serialize-ed buf
     146            2 :     if(memcpy_s(const_cast<char *>(ipcRmaBufferDesc.c_str()) + (ipcRmaBufferDesc.length() - sizeof(EndpointDesc)),
     147            2 :         sizeof(EndpointDesc), &endpointDesc, sizeof(EndpointDesc)) != EOK) {
     148            0 :         HCCL_ERROR("[RoceRegedMemMgr][SerializeToMemDesc] [%s] endpointDesc memcpy_s failed.", __func__);
     149            0 :         return HCCL_E_INTERNAL;
     150              :     }
     151              : 
     152            2 :     *descLen = static_cast<uint32_t>(ipcRmaBufferDesc.length());
     153            2 :     *memDesc = const_cast<char *>(ipcRmaBufferDesc.c_str());
     154            2 :     return HCCL_SUCCESS;
     155              : }
     156              : 
     157            4 : HcclResult HccsRegedMemMgr::MakeRemoteIpcRmaBuffer(std::string &ipcRmaBufferDesc,
     158              :         std::shared_ptr<hccl::RemoteIpcRmaBuffer> &remoteIpcRmaBuffer)
     159              : {
     160            4 :     HCCL_INFO("[HccsRegedMemMgr][%s] start", __FUNCTION__);
     161            4 :     EXCEPTION_CATCH(
     162              :         remoteIpcRmaBuffer = std::make_shared<hccl::RemoteIpcRmaBuffer>(netDevCtx_),
     163              :         return HCCL_E_PTR;
     164              :     );
     165            4 :     CHK_PTR_NULL(remoteIpcRmaBuffer);
     166              : 
     167            4 :     HcclResult ret = remoteIpcRmaBuffer->Deserialize(ipcRmaBufferDesc);
     168            4 :     if (ret != HCCL_SUCCESS) {
     169            0 :         HCCL_ERROR("[HccsRegedMemMgr][MemoryImport]RemoteIpcRmaBuffer Deserialize failed.");
     170            0 :         return ret;
     171              :     }
     172              : 
     173            4 :     HCCL_INFO("[%s] addr[%p] size[%lu] done", __FUNCTION__,
     174              :         remoteIpcRmaBuffer->GetAddr(), remoteIpcRmaBuffer->GetSize());
     175              : 
     176            4 :     return HCCL_SUCCESS;
     177              : }
     178              : 
     179            4 : HcclResult HccsRegedMemMgr::DeSerializeFromMemDesc(const void *memDesc, uint32_t descLen,
     180              :     EndpointDesc &endpointDesc, std::shared_ptr<hccl::RemoteIpcRmaBuffer> &remoteIpcRmaBuffer)
     181              : {
     182            4 :     HCCL_INFO("[%s] Begin", __FUNCTION__);
     183            4 :     CHK_PTR_NULL(memDesc);
     184              : 
     185            4 :     const char *description = static_cast<const char *>(memDesc);
     186            4 :     HCCL_INFO("[%s] descLen[%u] memDesc[%s]", __FUNCTION__, descLen, description);
     187              : 
     188            4 :     if (descLen <= sizeof(EndpointDesc)) {
     189            0 :         HCCL_ERROR("[HccsRegedMemMgr][DeSerializeFromMemDesc] [%s] descLen :%u too small error. need more than size:[%llu]",
     190              :             __func__, sizeof(EndpointDesc));
     191            0 :         return HCCL_E_INTERNAL;
     192              :     }
     193              : 
     194            4 :     uint32_t ipcRmaBufferDescLen = descLen - sizeof(EndpointDesc);
     195            4 :     if (memcpy_s(&endpointDesc, sizeof(EndpointDesc), description + ipcRmaBufferDescLen, sizeof(EndpointDesc)) != EOK) {
     196            0 :         HCCL_ERROR("[HccsRegedMemMgr][DeSerializeFromMemDesc] [%s] endpointDesc copy error. aim size:[%llu]",
     197              :             __func__, sizeof(EndpointDesc));
     198            0 :         return HCCL_E_INTERNAL;
     199              :     }
     200              : 
     201            4 :     std::string ipcRmaBufferDesc;
     202            4 :     ipcRmaBufferDesc.resize(ipcRmaBufferDescLen);
     203            4 :     if (memcpy_s(const_cast<char *>(ipcRmaBufferDesc.c_str()), ipcRmaBufferDescLen,
     204            4 :                 description, ipcRmaBufferDescLen) != EOK) {
     205            0 :         HCCL_ERROR("[HccsRegedMemMgr][DeSerializeFromMemDesc] [%s] ipcRmaBufferDesc copy error. aim size:[%llu]",
     206              :             __func__, ipcRmaBufferDescLen);
     207            0 :         return HCCL_E_INTERNAL;
     208              :     }
     209              : 
     210            4 :     CHK_RET(MakeRemoteIpcRmaBuffer(ipcRmaBufferDesc, remoteIpcRmaBuffer));
     211            4 :     return HCCL_SUCCESS;    
     212            4 : }
     213              : 
     214            3 : HcclResult HccsRegedMemMgr::MemoryExport(
     215              :     const EndpointDesc endpointDesc, void *memHandle, void **memDesc, uint32_t *memDescLen)
     216              : {
     217            3 :     HCCL_INFO("[%s] Begin", __FUNCTION__);
     218            3 :     CHK_PTR_NULL(memHandle);
     219            3 :     CHK_PTR_NULL(memDesc);
     220            3 :     CHK_PTR_NULL(memDescLen);
     221              : 
     222            3 :     hccl::LocalIpcRmaBuffer *localIpcRmaBuffer = nullptr;
     223            3 :     CHK_RET(ValidateMemExportHandle(memHandle, allRegisteredBuffers_, localIpcRmaBuffer));
     224            2 :     CHK_RET(SerializeToMemDesc(endpointDesc, localIpcRmaBuffer, memDesc, memDescLen));
     225            2 :     HCCL_INFO("[%s] memDesc[%p] descLen[%u]", __FUNCTION__, *memDesc, *memDescLen);
     226            2 :     return HCCL_SUCCESS;
     227              : }
     228              : 
     229            2 : HcclResult HccsRegedMemMgr::AddMem(hccl::BufferKey<uintptr_t, u64> &memKey,
     230              :     std::shared_ptr<hccl::RemoteIpcRmaBuffer> &remoteIpcRmaBuffer)
     231              : {
     232            2 :     CHK_PTR_NULL(remoteIpcRmaBuffer);
     233            2 :     HCCL_INFO("[HccsRegedMemMgr][%s] addr[%p], size[%lu] start",
     234              :         __FUNCTION__, reinterpret_cast<void *>(memKey.Addr()), memKey.Size());
     235              : 
     236            2 :     auto resultPair = remoteIpcRmaBufferMgr_.Add(memKey, remoteIpcRmaBuffer);
     237            2 :     if(!resultPair.second) {
     238            0 :         HCCL_ERROR("[HccsRegedMemMgr][%s] addr[%p], size[%lu] has already been imported!",
     239              :             __FUNCTION__, reinterpret_cast<void *>(memKey.Addr()), memKey.Size());
     240            0 :         return HCCL_E_AGAIN;
     241              :     }
     242              : 
     243            2 :     HCCL_INFO("[HccsRegedMemMgr][%s] addr[%p], size[%lu] done",
     244              :         __FUNCTION__, reinterpret_cast<void *>(memKey.Addr()), memKey.Size());
     245            2 :     return HCCL_SUCCESS;
     246              : }
     247              : 
     248            2 : HcclResult HccsRegedMemMgr::DeleteMem(hccl::BufferKey<uintptr_t, u64> &memKey)
     249              : {
     250            2 :     HCCL_INFO("[HccsRegedMemMgr][%s] addr[%p], size[%lu] start",
     251              :         __FUNCTION__, reinterpret_cast<void *>(memKey.Addr()), memKey.Size());
     252              : 
     253            2 :     bool delResultPair = false;
     254            2 :     EXCEPTION_CATCH(delResultPair = remoteIpcRmaBufferMgr_.Del(memKey), return HCCL_E_NOT_FOUND);
     255              :     // 计数器大于1时,返回false,说明框架层有其它设备在使用这段endpointDesc,返回HCCL_SUCCESS
     256            2 :     if (!delResultPair) {
     257            0 :         HCCL_INFO("[HccsRegedMemMgr][%s] addr[%p], size[%lu] reference count is larger than 0",
     258              :             __FUNCTION__, reinterpret_cast<void *>(memKey.Addr()), memKey.Size());
     259            0 :         return HCCL_SUCCESS;
     260              :     }
     261              : 
     262            2 :     HCCL_INFO("[HccsRegedMemMgr][%s] addr[%p], size[%lu] done",
     263              :         __FUNCTION__, reinterpret_cast<void *>(memKey.Addr()), memKey.Size());
     264              : 
     265            2 :     return HCCL_SUCCESS;
     266              : }
     267              : 
     268            2 : HcclResult HccsRegedMemMgr::MemoryImport(const void *memDesc, uint32_t descLen, HcommMem *outMem)
     269              : {
     270            2 :     CHK_PTR_NULL(memDesc);
     271            2 :     CHK_PTR_NULL(outMem);
     272            2 :     HCCL_INFO("[%s] memDesc[%p] descLen[%u] start", __FUNCTION__, memDesc, descLen);
     273              : 
     274              :     EndpointDesc endpointDesc;
     275            2 :     std::shared_ptr<hccl::RemoteIpcRmaBuffer> remoteIpcRmaBuffer = nullptr;
     276            2 :     CHK_RET(DeSerializeFromMemDesc(memDesc, descLen, endpointDesc, remoteIpcRmaBuffer));
     277            2 :     hccl::BufferKey<uintptr_t, u64> memKey(reinterpret_cast<uintptr_t>(remoteIpcRmaBuffer->GetAddr()),
     278            4 :                                         remoteIpcRmaBuffer->GetSize());
     279              : 
     280            2 :     auto resultPair = remoteIpcRmaBufferMgr_.Find(memKey);
     281            2 :     if(!resultPair.first) {
     282            2 :         HCCL_INFO("[HccsRegedMemMgr][%s] addr[%p], size[%lu] has Not Found!",
     283              :             __FUNCTION__, memKey.Addr(), memKey.Size());
     284            2 :         CHK_RET(AddMem(memKey, remoteIpcRmaBuffer));
     285              :     }
     286              : 
     287            2 :     outMem->addr = reinterpret_cast<void *>(remoteIpcRmaBuffer->GetAddr());
     288            2 :     outMem->size = remoteIpcRmaBuffer->GetSize();
     289            2 :     outMem->type = static_cast<CommMemType>(remoteIpcRmaBuffer->GetMemType());
     290              : 
     291            2 :     HCCL_INFO("[%s]memDesc[%p] descLen[%u] addr[%p] size[%lu], type[%u] done",
     292              :         __FUNCTION__, memDesc, descLen, outMem->addr, outMem->size, outMem->type);
     293              : 
     294            2 :     return HCCL_SUCCESS;
     295            2 : }
     296              : 
     297            2 : HcclResult HccsRegedMemMgr::MemoryUnimport(const void *memDesc, uint32_t descLen)
     298              : {
     299            2 :     CHK_PTR_NULL(memDesc);
     300            2 :     HCCL_INFO("[%s] memDesc[%p] descLen[%u] start", __FUNCTION__, memDesc, descLen);
     301              : 
     302              :     EndpointDesc endpointDesc;
     303            2 :     std::shared_ptr<hccl::RemoteIpcRmaBuffer> remoteIpcRmaBufferTmp = nullptr;
     304            2 :     CHK_RET(DeSerializeFromMemDesc(memDesc, descLen, endpointDesc, remoteIpcRmaBufferTmp));
     305            2 :     hccl::BufferKey<uintptr_t, u64> memKey(reinterpret_cast<uintptr_t>(remoteIpcRmaBufferTmp->GetAddr()),
     306            4 :                                         remoteIpcRmaBufferTmp->GetSize());
     307              : 
     308            2 :     std::shared_ptr<hccl::RemoteIpcRmaBuffer> remoteIpcRmaBuffer = nullptr;
     309            2 :     auto resultPair = remoteIpcRmaBufferMgr_.Find(memKey);
     310            2 :     if(!resultPair.first) {
     311            0 :         HCCL_ERROR("[HccsRegedMemMgr][%s] addr[%p], size[%lu] has Not Found!",
     312              :             __FUNCTION__, memKey.Addr(), memKey.Size());
     313            0 :         return HCCL_E_NOT_FOUND;
     314              :     }
     315            2 :     remoteIpcRmaBuffer = resultPair.second;
     316            2 :     CHK_PTR_NULL(remoteIpcRmaBuffer);
     317              : 
     318            2 :     if (remoteIpcRmaBuffer->IsOpened()) {
     319            0 :         HCCL_INFO("[HccsRegedMemMgr][DeleteMemDesc] memDesc[%p] descLen[%u] addr[%p] size[%lu] need to close first",
     320              :             memDesc, descLen, reinterpret_cast<void *>(memKey.Addr()), memKey.Size());
     321            0 :         return HCCL_SUCCESS;
     322              :     }
     323              : 
     324            2 :     CHK_RET(DeleteMem(memKey));
     325              : 
     326            2 :     HCCL_INFO("[%s] memDesc[%p] descLen[%u] addr[%p] size[%lu] done", __FUNCTION__,
     327              :         memDesc, descLen, reinterpret_cast<void *>(memKey.Addr()), memKey.Size());
     328              : 
     329            2 :     return HCCL_SUCCESS;
     330            2 : }
     331              : 
     332            2 : HcclResult HccsRegedMemMgr::MemoryGrant(const HcommMemGrantInfo *remoteGrantInfo)
     333              : {
     334            2 :     HCCL_INFO("[%s] Begin", __FUNCTION__);
     335            2 :     CHK_PTR_NULL(remoteGrantInfo);
     336              : 
     337            2 :     HCCL_INFO("[HccsRegedMemMgr][MemoryGrant]Grant remotePid:%d, remoteSdid:%u",
     338              :         remoteGrantInfo->pid, remoteGrantInfo->sdid);
     339            4 :     for (auto it = allRegisteredBuffers_.begin(); it != allRegisteredBuffers_.end(); it++) {
     340            2 :         if (it->second) {
     341            0 :             continue;
     342              :         }
     343            2 :         std::shared_ptr<hccl::LocalIpcRmaBuffer> localIpcRmaBuffer = it->first;
     344            2 :         CHK_PTR_NULL(localIpcRmaBuffer);
     345              : 
     346            2 :         HcclResult ret = localIpcRmaBuffer->Grant(remoteGrantInfo->pid, remoteGrantInfo->sdid);
     347            2 :         CHK_PRT_RET((ret != HCCL_SUCCESS),
     348              :             HCCL_ERROR("[HccsRegedMemMgr][MemoryGrant]Grant remotePid:%d, remoteSdid:%u error", 
     349              :                 remoteGrantInfo->pid, remoteGrantInfo->sdid), ret);
     350            2 :         HCCL_INFO("[HccsRegedMemMgr][MemoryGrant]Grant remotePid:%d, remoteSdid:%u addr [%p] done",
     351              :             remoteGrantInfo->pid, remoteGrantInfo->sdid, localIpcRmaBuffer->GetAddr());
     352            2 :     }
     353              : 
     354            2 :     HCCL_INFO("[HccsRegedMemMgr][MemoryGrant]Grant remotePid:%d, remoteSdid:%u done",
     355              :         remoteGrantInfo->pid, remoteGrantInfo->sdid);
     356            2 :     return HCCL_SUCCESS;
     357              : }
     358              : 
     359            2 : HcclResult HccsRegedMemMgr::MemoryEnableP2P(const EndpointDesc &localEndpointDesc, const EndpointDesc &remoteEndpointDesc)
     360              : {
     361            2 :     HCCL_INFO("[%s] Begin", __FUNCTION__);
     362            2 :     if (localEndpointDesc.loc.device.serverIdx == remoteEndpointDesc.loc.device.serverIdx) {
     363              :         u32 deviceLogicId;
     364            2 :         CHK_RET(hrtGetDeviceIndexByPhyId(localEndpointDesc.loc.device.devPhyId, deviceLogicId));
     365            2 :         HCCL_INFO("Need do hrtEnableP2P for device[%u] with deviceLogicId[%u]",
     366              :             remoteEndpointDesc.loc.device.devPhyId, deviceLogicId);
     367            2 :         CHK_RET(hrtEnableP2P(deviceLogicId, remoteEndpointDesc.loc.device.devPhyId));
     368              :     }
     369            2 :     return HCCL_SUCCESS;
     370              : }
     371              : 
     372            2 : HcclResult HccsRegedMemMgr::MemoryDisableP2P(const EndpointDesc &localEndpointDesc, const EndpointDesc &remoteEndpointDesc)
     373              : {
     374            2 :     HCCL_INFO("[%s] Begin", __FUNCTION__);
     375            2 :     if (localEndpointDesc.loc.device.serverIdx == remoteEndpointDesc.loc.device.serverIdx) {
     376              :         u32 deviceLogicId;
     377            2 :         CHK_RET(hrtGetDeviceIndexByPhyId(localEndpointDesc.loc.device.devPhyId, deviceLogicId));
     378            2 :         HCCL_INFO("Need do hrtDisableP2P for device[%u] with deviceLogicId[%u]",
     379              :             remoteEndpointDesc.loc.device.devPhyId, deviceLogicId);
     380            2 :         CHK_RET(hrtDisableP2P(deviceLogicId, remoteEndpointDesc.loc.device.devPhyId));
     381              :     }
     382            2 :     return HCCL_SUCCESS;
     383              : }
     384              : 
     385            2 : HcclResult HccsRegedMemMgr::MemoryOpenRemoteIpc()
     386              : {
     387            2 :     HCCL_INFO("[%s] Begin", __FUNCTION__);
     388            3 :     for (auto it = remoteIpcRmaBufferMgr_.Begin(); it != remoteIpcRmaBufferMgr_.End();) {
     389            1 :         const std::shared_ptr<hccl::RemoteIpcRmaBuffer> &remoteIpcRmaBuffer = it->second.buffer;
     390            1 :         HcclResult openRet = remoteIpcRmaBuffer->Open();
     391            1 :         if (openRet != HCCL_SUCCESS) {
     392            0 :             HCCL_ERROR("[HccsRegedMemMgr][MemoryOpenRemoteIpc]RemoteIpcRmaBuffer Open failed.");
     393            0 :             for (auto it2 = remoteIpcRmaBufferMgr_.Begin(); it2 != it;) {
     394            0 :                 const std::shared_ptr<hccl::RemoteIpcRmaBuffer> &remoteIpcRmaBuffer2 = it2->second.buffer;
     395            0 :                 (void)remoteIpcRmaBuffer2->Close();
     396            0 :                 it2 = remoteIpcRmaBufferMgr_.Next(it2);
     397              :             }
     398            0 :             return openRet;
     399              :         }
     400            1 :         it = remoteIpcRmaBufferMgr_.Next(it);
     401              :     }
     402              : 
     403            2 :     return HCCL_SUCCESS;
     404              : }
     405              : 
     406            2 : HcclResult HccsRegedMemMgr::MemoryCloseRemoteIpc()
     407              : {
     408            2 :     HCCL_INFO("[%s] Begin", __FUNCTION__);
     409            3 :     for (auto it = remoteIpcRmaBufferMgr_.Begin(); it != remoteIpcRmaBufferMgr_.End();) {
     410            1 :         const std::shared_ptr<hccl::RemoteIpcRmaBuffer> &remoteIpcRmaBuffer = it->second.buffer;
     411            1 :         (void)remoteIpcRmaBuffer->Close();
     412            1 :         it = remoteIpcRmaBufferMgr_.Next(it);
     413              :     }
     414              : 
     415            2 :     return HCCL_SUCCESS;
     416              : }
     417              : 
     418            0 : HcclResult HccsRegedMemMgr::GetAllMemHandles(void **memHandles, uint32_t *memHandleNum)
     419              : {
     420            0 :     HCCL_INFO("[%s] Begin", __FUNCTION__);
     421            0 :     return GetAllMemHandlesImpl(allRegisteredBuffers_, activeHandles_, memHandles, memHandleNum, "HccsRegedMemMgr");
     422              : }
     423              : 
     424            0 : HcclResult HccsRegedMemMgr::GetRemoteIpcRmaBuffer(std::vector<CommMem> &remoteIpcRmaBufferVec)
     425              : {
     426              :     CommMem mem;
     427            0 :     for (auto it = remoteIpcRmaBufferMgr_.Begin(); it != remoteIpcRmaBufferMgr_.End();) {
     428            0 :         const std::shared_ptr<hccl::RemoteIpcRmaBuffer> &remoteIpcRmaBuffer = it->second.buffer;
     429            0 :         mem.addr = remoteIpcRmaBuffer->GetAddr();
     430            0 :         mem.size = remoteIpcRmaBuffer->GetSize();
     431            0 :         mem.type = remoteIpcRmaBuffer->GetMemType() == RmaMemType::DEVICE ? CommMemType::COMM_MEM_TYPE_DEVICE :
     432              :             CommMemType::COMM_MEM_TYPE_HOST;
     433            0 :         remoteIpcRmaBufferVec.emplace_back(mem);
     434            0 :         HCCL_INFO("[HccsRegedMemMgr][GetRemoteIpcRmaBuffer]remote addr:%p, size[%lu], type[%u]",
     435              :             mem.addr, mem.size, static_cast<u32>(mem.type));
     436            0 :         it = remoteIpcRmaBufferMgr_.Next(it);
     437              :     }
     438            0 :     return HCCL_SUCCESS;
     439              : }
     440              : 
     441            0 : HcclResult HccsRegedMemMgr::GetRemoteIpcRmaBufferEx(std::vector<HcclMemEx> &remoteIpcRmaBufferVecEx)
     442              : {
     443              :     HcclMemEx mem;
     444            0 :     for (auto it = remoteIpcRmaBufferMgr_.Begin(); it != remoteIpcRmaBufferMgr_.End();) {
     445            0 :         const std::shared_ptr<hccl::RemoteIpcRmaBuffer> &remoteIpcRmaBuffer = it->second.buffer;
     446            0 :         mem.addr = remoteIpcRmaBuffer->GetAddr();
     447            0 :         mem.size = remoteIpcRmaBuffer->GetSize();
     448            0 :         mem.type = remoteIpcRmaBuffer->GetMemType() == RmaMemType::DEVICE ? HcclMemType::HCCL_MEM_TYPE_DEVICE :
     449              :             HcclMemType::HCCL_MEM_TYPE_HOST;
     450            0 :         mem.devAddr = remoteIpcRmaBuffer->GetDevAddr();
     451            0 :         remoteIpcRmaBufferVecEx.emplace_back(mem);
     452            0 :         HCCL_INFO("[HccsRegedMemMgr][GetRemoteIpcRmaBufferEx]remote addr:%p, size[%lu], type[%u], devAddr[%p]",
     453              :             mem.addr, mem.size, static_cast<u32>(mem.type), mem.devAddr);
     454            0 :         it = remoteIpcRmaBufferMgr_.Next(it);
     455              :     }
     456            0 :     return HCCL_SUCCESS;
     457              : }
     458              : 
     459            0 : HcclResult HccsRegedMemMgr::GetLocalIpcRmaBufferEx(std::vector<HcclMemEx> &localIpcRmaBufferVecEx)
     460              : {
     461            0 :     NetDevContext *netDevCtx = static_cast<NetDevContext *>(netDevCtx_);
     462            0 :     const std::shared_ptr<LocalIpcRmaBufferMgr> &localIpcRmaBufferMgr = netDevCtx->GetlocalIpcRmaBufferMgr();
     463            0 :     CHK_PTR_NULL(localIpcRmaBufferMgr);
     464              : 
     465              :     HcclMemEx mem;
     466            0 :     for (auto it = localIpcRmaBufferMgr->Begin(); it != localIpcRmaBufferMgr->End(); ) {
     467            0 :         const std::shared_ptr<hccl::LocalIpcRmaBuffer> &localIpcRmaBuffer = it->second.buffer;
     468            0 :         mem.addr = localIpcRmaBuffer->GetAddr();
     469            0 :         mem.size = localIpcRmaBuffer->GetSize();
     470            0 :         mem.type = localIpcRmaBuffer->GetMemType() == RmaMemType::DEVICE ? HcclMemType::HCCL_MEM_TYPE_DEVICE :
     471              :             HcclMemType::HCCL_MEM_TYPE_HOST;
     472            0 :         mem.devAddr = localIpcRmaBuffer->GetDevAddr();
     473            0 :         localIpcRmaBufferVecEx.emplace_back(mem);
     474            0 :         HCCL_INFO("[HccsRegedMemMgr][GetLocalIpcRmaBufferEx]local addr:%p, size[%lu], type[%u], devAddr[%p]",
     475              :             mem.addr, mem.size, static_cast<u32>(mem.type), mem.devAddr);
     476            0 :         it = localIpcRmaBufferMgr->Next(it);
     477              :     }
     478            0 :     return HCCL_SUCCESS;
     479            0 : }
     480              : }
        

Generated by: LCOV version 2.0-1