文件最后提交记录最后更新时间
目录更新 Co-authored-by: james88liu<liujianxing1@huawei.com> # message auto-generated for no-merge-commit merge: !87 merge br_dir_1 into master 目录更新 Created-by: james88liu Commit-by: james88liu Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/shmem/issues/63 ## 测试 ![image.png](https://raw.gitcode.com/user-images/assets/8546182/c6cf947b-7583-4e9e-aa14-105f025c4314/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/8546182/cf5148a7-5e17-4b26-9321-c16504910460/image.png 'image.png') ## 文档更新 ``` ├── bootstrap │   ├── config_store │   │   ├── CMakeLists.txt │   │   ├── acc_links │   │   │   ├── csrc │   │   │   │   ├── common │   │   │   │   ├── security │   │   │   │   └── under_api │   │   │   │   └── openssl │   │   │   └── include │   ├── shmemi_bootstrap_mpi.cpp │   ├── shmemi_bootstrap_uid.cpp │   └── socket │   ├── uid_socket.cpp │   ├── uid_socket.h │   └── uid_utils.h ├── data_plane │   ├── shmem_host_cc.cpp │   └── shmem_host_rma.cpp ├── entity │   ├── mem_entity_base.h │   ├── mem_entity_def.h ├── init │   ├── backends │   │   ├── shmem_init_backend.cpp │   │   └── shmemi_init_backend.h │   ├── bootstrap │   │   ├── shmemi_bootstrap.cpp │   │   └── shmemi_bootstrap.h │   ├── shmem_init.cpp │   └── shmemi_init.h ├── mem │   ├── heap │   │   ├── driver │   │   │   ├── devmm_cmd.h │   │   │   └── userspace │   │   │   ├── devmm_define.h │   │   ├── hybm_mem_slice.cpp │   │   └── hybm_mem_slice.h │   ├── shmem_mgr.cpp │   ├── shmem_mm.cpp │   ├── shmem_rma.cpp │   ├── shmemi_mgr.h │   └── shmemi_mm.h ├── python_wrapper │   ├── CMakeLists.txt │   └── pyshmem.cpp ├── shmemi_host_common.h ├── shmemi_host_def.h ├── sync │   ├── shmemi_sync.cpp │   └── shmemi_sync.h ├── team │   ├── shmem_team.cpp │   └── shmemi_team.h ├── transport │   ├── device_rdma │   ├── transport_def.h │   ├── transport_manager.cpp │   └── transport_manager.h └── utils ├── log │   ├── shmemi_log_defs.h │   └── shmemi_logger.cpp ├── shmemi_file_util.h ├── under_api │   ├── dl_acl_api.cpp │   ├── dl_acl_api.h └── utils.h ``` ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/shmem!874 个月前
目录更新 Co-authored-by: james88liu<liujianxing1@huawei.com> # message auto-generated for no-merge-commit merge: !87 merge br_dir_1 into master 目录更新 Created-by: james88liu Commit-by: james88liu Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/shmem/issues/63 ## 测试 ![image.png](https://raw.gitcode.com/user-images/assets/8546182/c6cf947b-7583-4e9e-aa14-105f025c4314/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/8546182/cf5148a7-5e17-4b26-9321-c16504910460/image.png 'image.png') ## 文档更新 ``` ├── bootstrap │   ├── config_store │   │   ├── CMakeLists.txt │   │   ├── acc_links │   │   │   ├── csrc │   │   │   │   ├── common │   │   │   │   ├── security │   │   │   │   └── under_api │   │   │   │   └── openssl │   │   │   └── include │   ├── shmemi_bootstrap_mpi.cpp │   ├── shmemi_bootstrap_uid.cpp │   └── socket │   ├── uid_socket.cpp │   ├── uid_socket.h │   └── uid_utils.h ├── data_plane │   ├── shmem_host_cc.cpp │   └── shmem_host_rma.cpp ├── entity │   ├── mem_entity_base.h │   ├── mem_entity_def.h ├── init │   ├── backends │   │   ├── shmem_init_backend.cpp │   │   └── shmemi_init_backend.h │   ├── bootstrap │   │   ├── shmemi_bootstrap.cpp │   │   └── shmemi_bootstrap.h │   ├── shmem_init.cpp │   └── shmemi_init.h ├── mem │   ├── heap │   │   ├── driver │   │   │   ├── devmm_cmd.h │   │   │   └── userspace │   │   │   ├── devmm_define.h │   │   ├── hybm_mem_slice.cpp │   │   └── hybm_mem_slice.h │   ├── shmem_mgr.cpp │   ├── shmem_mm.cpp │   ├── shmem_rma.cpp │   ├── shmemi_mgr.h │   └── shmemi_mm.h ├── python_wrapper │   ├── CMakeLists.txt │   └── pyshmem.cpp ├── shmemi_host_common.h ├── shmemi_host_def.h ├── sync │   ├── shmemi_sync.cpp │   └── shmemi_sync.h ├── team │   ├── shmem_team.cpp │   └── shmemi_team.h ├── transport │   ├── device_rdma │   ├── transport_def.h │   ├── transport_manager.cpp │   └── transport_manager.h └── utils ├── log │   ├── shmemi_log_defs.h │   └── shmemi_logger.cpp ├── shmemi_file_util.h ├── under_api │   ├── dl_acl_api.cpp │   ├── dl_acl_api.h └── utils.h ``` ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/shmem!874 个月前
clean code Co-authored-by: james88liu<liujianxing1@huawei.com> # message auto-generated for no-merge-commit merge: !182 merge br_fix_cleancode into master clean code Created-by: james88liu Commit-by: james88liu Merged-by: cann-robot Description: ## 描述 clean code整改 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/shmem!1822 个月前
目录更新 Co-authored-by: james88liu<liujianxing1@huawei.com> # message auto-generated for no-merge-commit merge: !87 merge br_dir_1 into master 目录更新 Created-by: james88liu Commit-by: james88liu Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/shmem/issues/63 ## 测试 ![image.png](https://raw.gitcode.com/user-images/assets/8546182/c6cf947b-7583-4e9e-aa14-105f025c4314/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/8546182/cf5148a7-5e17-4b26-9321-c16504910460/image.png 'image.png') ## 文档更新 ``` ├── bootstrap │   ├── config_store │   │   ├── CMakeLists.txt │   │   ├── acc_links │   │   │   ├── csrc │   │   │   │   ├── common │   │   │   │   ├── security │   │   │   │   └── under_api │   │   │   │   └── openssl │   │   │   └── include │   ├── shmemi_bootstrap_mpi.cpp │   ├── shmemi_bootstrap_uid.cpp │   └── socket │   ├── uid_socket.cpp │   ├── uid_socket.h │   └── uid_utils.h ├── data_plane │   ├── shmem_host_cc.cpp │   └── shmem_host_rma.cpp ├── entity │   ├── mem_entity_base.h │   ├── mem_entity_def.h ├── init │   ├── backends │   │   ├── shmem_init_backend.cpp │   │   └── shmemi_init_backend.h │   ├── bootstrap │   │   ├── shmemi_bootstrap.cpp │   │   └── shmemi_bootstrap.h │   ├── shmem_init.cpp │   └── shmemi_init.h ├── mem │   ├── heap │   │   ├── driver │   │   │   ├── devmm_cmd.h │   │   │   └── userspace │   │   │   ├── devmm_define.h │   │   ├── hybm_mem_slice.cpp │   │   └── hybm_mem_slice.h │   ├── shmem_mgr.cpp │   ├── shmem_mm.cpp │   ├── shmem_rma.cpp │   ├── shmemi_mgr.h │   └── shmemi_mm.h ├── python_wrapper │   ├── CMakeLists.txt │   └── pyshmem.cpp ├── shmemi_host_common.h ├── shmemi_host_def.h ├── sync │   ├── shmemi_sync.cpp │   └── shmemi_sync.h ├── team │   ├── shmem_team.cpp │   └── shmemi_team.h ├── transport │   ├── device_rdma │   ├── transport_def.h │   ├── transport_manager.cpp │   └── transport_manager.h └── utils ├── log │   ├── shmemi_log_defs.h │   └── shmemi_logger.cpp ├── shmemi_file_util.h ├── under_api │   ├── dl_acl_api.cpp │   ├── dl_acl_api.h └── utils.h ``` ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/shmem!874 个月前
feat: 预埋 RDMA gm2gm atomic 语义必要参数与结构 Co-authored-by: simonkorl28<machuan6@huawei.com> # message auto-generated for no-merge-commit merge: !310 merge xscale-atomic-1 into master feat: 预埋 RDMA gm2gm atomic 语义必要参数与结构 Created-by: simonkorl28 Commit-by: simonkorl28 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> feat: 预埋 RDMA gm2gm atomic 语义必要参数与结构 1. 新增一种支持 RDMA 多后端编译时多态实现 atomic 通信语义的框架 2. 为支持 RDMA atomic 语义获取返回值的功能,在相关结构体 dccl_hccp_def.h::struct AiQpRMAWQ 与对应数据面结构体中新增字段(经评估不会对原始代码产生影响,也不涉及重构) 3. 新增了后续用于实现 RDMA atomic 语义的内部函数,目前尚未被使用 4. 修复了 rdma 编译脚本的注释错误 ### atomic 语义静态多态结构设计简介 ![image.png](https://raw.gitcode.com/user-images/assets/8546182/bdf57d0d-3fe1-46c0-928a-ea1fb027e624/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/8546182/62af5295-3325-42c7-a72a-bcf97a515733/image.png 'image.png') ### 支持 RDMA atomic 语义获取返回值功能进行的修改 ![image.png](https://raw.gitcode.com/user-images/assets/8546182/b0024831-f2c7-40b5-b906-c32d017d8a77/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/8546182/9fe5a29c-c46b-4f5c-b75e-6909e9eed1e7/image.png 'image.png') ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #123--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> [#234](https://gitcode.com/cann/shmem/issues/234) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> RDMA 相关 UT 运行通过 ![image.png](https://raw.gitcode.com/user-images/assets/8546182/a0f98389-047c-4d63-96a5-feb8c042c38c/image.png 'image.png') ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 无 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/shmem!31023 天前
适配A5 new HDK for mte Co-authored-by: james88liu<liujianxing1@huawei.com> # message auto-generated for no-merge-commit merge: !93 merge br_fix_cann_build into master 适配A5 new HDK for mte Created-by: james88liu Commit-by: james88liu Merged-by: cann-robot Description: ## 描述 适配A5硬件,并基于新硬件调试mte接口示例 ## 关联的Issue https://gitcode.com/cann/shmem/issues/104 ## 测试 ![image.png](https://raw.gitcode.com/user-images/assets/8546182/4005e03c-98e8-466a-8d6c-c04e7fe43934/image.png 'image.png') A5: ![image.png](https://raw.gitcode.com/user-images/assets/8546182/e7cf810b-795a-450d-9b6a-fa214998f755/image.png 'image.png') ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/shmem!933 个月前
目录更新 Co-authored-by: james88liu<liujianxing1@huawei.com> # message auto-generated for no-merge-commit merge: !87 merge br_dir_1 into master 目录更新 Created-by: james88liu Commit-by: james88liu Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/shmem/issues/63 ## 测试 ![image.png](https://raw.gitcode.com/user-images/assets/8546182/c6cf947b-7583-4e9e-aa14-105f025c4314/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/8546182/cf5148a7-5e17-4b26-9321-c16504910460/image.png 'image.png') ## 文档更新 ``` ├── bootstrap │   ├── config_store │   │   ├── CMakeLists.txt │   │   ├── acc_links │   │   │   ├── csrc │   │   │   │   ├── common │   │   │   │   ├── security │   │   │   │   └── under_api │   │   │   │   └── openssl │   │   │   └── include │   ├── shmemi_bootstrap_mpi.cpp │   ├── shmemi_bootstrap_uid.cpp │   └── socket │   ├── uid_socket.cpp │   ├── uid_socket.h │   └── uid_utils.h ├── data_plane │   ├── shmem_host_cc.cpp │   └── shmem_host_rma.cpp ├── entity │   ├── mem_entity_base.h │   ├── mem_entity_def.h ├── init │   ├── backends │   │   ├── shmem_init_backend.cpp │   │   └── shmemi_init_backend.h │   ├── bootstrap │   │   ├── shmemi_bootstrap.cpp │   │   └── shmemi_bootstrap.h │   ├── shmem_init.cpp │   └── shmemi_init.h ├── mem │   ├── heap │   │   ├── driver │   │   │   ├── devmm_cmd.h │   │   │   └── userspace │   │   │   ├── devmm_define.h │   │   ├── hybm_mem_slice.cpp │   │   └── hybm_mem_slice.h │   ├── shmem_mgr.cpp │   ├── shmem_mm.cpp │   ├── shmem_rma.cpp │   ├── shmemi_mgr.h │   └── shmemi_mm.h ├── python_wrapper │   ├── CMakeLists.txt │   └── pyshmem.cpp ├── shmemi_host_common.h ├── shmemi_host_def.h ├── sync │   ├── shmemi_sync.cpp │   └── shmemi_sync.h ├── team │   ├── shmem_team.cpp │   └── shmemi_team.h ├── transport │   ├── device_rdma │   ├── transport_def.h │   ├── transport_manager.cpp │   └── transport_manager.h └── utils ├── log │   ├── shmemi_log_defs.h │   └── shmemi_logger.cpp ├── shmemi_file_util.h ├── under_api │   ├── dl_acl_api.cpp │   ├── dl_acl_api.h └── utils.h ``` ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/shmem!874 个月前
修复A3上读网卡ip出错的问题 Co-authored-by: vector5<caobingjie@huawei.com> # message auto-generated for no-merge-commit merge: !375 merge fixrdma into master 修复A3上读网卡ip出错的问题 Created-by: vector5 Commit-by: vector5 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 修复A3上读网卡ip出错的问题。 hcomm 定义 ( hccp_common.h ): ``` struct IfaddrInfo { union HccpIpAddr ip; // IP 地址 struct in_addr mask; // IPv4 掩码 }; struct InterfaceInfo { int family; int scopeId; struct IfaddrInfo ifaddr; char ifname[MAX_INTERFACE_NAME_LEN]; }; ``` shmem 定义 ( dl_hccp_def.h ): ``` struct HccpIfaddrInfo { HccpIpAddr ip; // IP 地址 struct in_addr mask; // IPv4 掩码 struct in6_addr maskv6; // IPv6 掩码 ← 多了这个字段! }; struct HccpInterfaceInfo { int family; int scopeId; HccpIfaddrInfo ifaddr; char ifname[HCCP_MAX_INTERFACE_NAME_LEN]; }; ``` shmem 的 HccpIfaddrInfo 多了一个 maskv6 字段 (16字节),导致config.isAll = true时无法获取第二个网卡的ip,解析出来是掩码: 1. 结构体大小不匹配 :底层库按 hcomm 结构体填充,shmem 按自己的结构体读取 2. 内存布局错位 :第二个接口条目的数据被错误解析 这就是为什么日志显示: - family=0 (实际是上一个条目的掩码数据被误读) - ip=255.255.0.0 (掩码值被当作 IP 读取) 修改方案:配置参数改为false只获取特定phyid的网卡 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #123--> https://gitcode.com/cann/shmem/issues/274 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> A2测试 ![image.png](https://raw.gitcode.com/user-images/assets/8546182/2cc2753b-5277-4173-b10b-8458404cf2eb/image.png 'image.png') A2跨机16卡(cann82T) ![image.png](https://raw.gitcode.com/user-images/assets/8546182/58d384b7-3297-4bc5-8555-40e5d1da969f/image.png 'image.png') A3测试 单机16卡 ![image.png](https://raw.gitcode.com/user-images/assets/8546182/4704ad40-e8dc-48f8-ba4e-ebdb90e3a5a7/image.png 'image.png') 跨机32卡 ![image.png](https://raw.gitcode.com/user-images/assets/8546182/7ecf077d-aa66-4eb7-b391-27957caddca8/image.png 'image.png') ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/shmem!3753 天前
目录更新 Co-authored-by: james88liu<liujianxing1@huawei.com> # message auto-generated for no-merge-commit merge: !87 merge br_dir_1 into master 目录更新 Created-by: james88liu Commit-by: james88liu Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/shmem/issues/63 ## 测试 ![image.png](https://raw.gitcode.com/user-images/assets/8546182/c6cf947b-7583-4e9e-aa14-105f025c4314/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/8546182/cf5148a7-5e17-4b26-9321-c16504910460/image.png 'image.png') ## 文档更新 ``` ├── bootstrap │   ├── config_store │   │   ├── CMakeLists.txt │   │   ├── acc_links │   │   │   ├── csrc │   │   │   │   ├── common │   │   │   │   ├── security │   │   │   │   └── under_api │   │   │   │   └── openssl │   │   │   └── include │   ├── shmemi_bootstrap_mpi.cpp │   ├── shmemi_bootstrap_uid.cpp │   └── socket │   ├── uid_socket.cpp │   ├── uid_socket.h │   └── uid_utils.h ├── data_plane │   ├── shmem_host_cc.cpp │   └── shmem_host_rma.cpp ├── entity │   ├── mem_entity_base.h │   ├── mem_entity_def.h ├── init │   ├── backends │   │   ├── shmem_init_backend.cpp │   │   └── shmemi_init_backend.h │   ├── bootstrap │   │   ├── shmemi_bootstrap.cpp │   │   └── shmemi_bootstrap.h │   ├── shmem_init.cpp │   └── shmemi_init.h ├── mem │   ├── heap │   │   ├── driver │   │   │   ├── devmm_cmd.h │   │   │   └── userspace │   │   │   ├── devmm_define.h │   │   ├── hybm_mem_slice.cpp │   │   └── hybm_mem_slice.h │   ├── shmem_mgr.cpp │   ├── shmem_mm.cpp │   ├── shmem_rma.cpp │   ├── shmemi_mgr.h │   └── shmemi_mm.h ├── python_wrapper │   ├── CMakeLists.txt │   └── pyshmem.cpp ├── shmemi_host_common.h ├── shmemi_host_def.h ├── sync │   ├── shmemi_sync.cpp │   └── shmemi_sync.h ├── team │   ├── shmem_team.cpp │   └── shmemi_team.h ├── transport │   ├── device_rdma │   ├── transport_def.h │   ├── transport_manager.cpp │   └── transport_manager.h └── utils ├── log │   ├── shmemi_log_defs.h │   └── shmemi_logger.cpp ├── shmemi_file_util.h ├── under_api │   ├── dl_acl_api.cpp │   ├── dl_acl_api.h └── utils.h ``` ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/shmem!874 个月前
fix clean code Co-authored-by: james88liu<liujianxing1@huawei.com> # message auto-generated for no-merge-commit merge: !186 merge br_fix_cleancode_0317 into master fix clean code Created-by: james88liu Commit-by: james88liu Merged-by: cann-robot Description: ## 描述 clean code ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/shmem!1862 个月前
目录更新 Co-authored-by: james88liu<liujianxing1@huawei.com> # message auto-generated for no-merge-commit merge: !87 merge br_dir_1 into master 目录更新 Created-by: james88liu Commit-by: james88liu Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/shmem/issues/63 ## 测试 ![image.png](https://raw.gitcode.com/user-images/assets/8546182/c6cf947b-7583-4e9e-aa14-105f025c4314/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/8546182/cf5148a7-5e17-4b26-9321-c16504910460/image.png 'image.png') ## 文档更新 ``` ├── bootstrap │   ├── config_store │   │   ├── CMakeLists.txt │   │   ├── acc_links │   │   │   ├── csrc │   │   │   │   ├── common │   │   │   │   ├── security │   │   │   │   └── under_api │   │   │   │   └── openssl │   │   │   └── include │   ├── shmemi_bootstrap_mpi.cpp │   ├── shmemi_bootstrap_uid.cpp │   └── socket │   ├── uid_socket.cpp │   ├── uid_socket.h │   └── uid_utils.h ├── data_plane │   ├── shmem_host_cc.cpp │   └── shmem_host_rma.cpp ├── entity │   ├── mem_entity_base.h │   ├── mem_entity_def.h ├── init │   ├── backends │   │   ├── shmem_init_backend.cpp │   │   └── shmemi_init_backend.h │   ├── bootstrap │   │   ├── shmemi_bootstrap.cpp │   │   └── shmemi_bootstrap.h │   ├── shmem_init.cpp │   └── shmemi_init.h ├── mem │   ├── heap │   │   ├── driver │   │   │   ├── devmm_cmd.h │   │   │   └── userspace │   │   │   ├── devmm_define.h │   │   ├── hybm_mem_slice.cpp │   │   └── hybm_mem_slice.h │   ├── shmem_mgr.cpp │   ├── shmem_mm.cpp │   ├── shmem_rma.cpp │   ├── shmemi_mgr.h │   └── shmemi_mm.h ├── python_wrapper │   ├── CMakeLists.txt │   └── pyshmem.cpp ├── shmemi_host_common.h ├── shmemi_host_def.h ├── sync │   ├── shmemi_sync.cpp │   └── shmemi_sync.h ├── team │   ├── shmem_team.cpp │   └── shmemi_team.h ├── transport │   ├── device_rdma │   ├── transport_def.h │   ├── transport_manager.cpp │   └── transport_manager.h └── utils ├── log │   ├── shmemi_log_defs.h │   └── shmemi_logger.cpp ├── shmemi_file_util.h ├── under_api │   ├── dl_acl_api.cpp │   ├── dl_acl_api.h └── utils.h ``` ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/shmem!874 个月前
目录更新 Co-authored-by: james88liu<liujianxing1@huawei.com> # message auto-generated for no-merge-commit merge: !87 merge br_dir_1 into master 目录更新 Created-by: james88liu Commit-by: james88liu Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/shmem/issues/63 ## 测试 ![image.png](https://raw.gitcode.com/user-images/assets/8546182/c6cf947b-7583-4e9e-aa14-105f025c4314/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/8546182/cf5148a7-5e17-4b26-9321-c16504910460/image.png 'image.png') ## 文档更新 ``` ├── bootstrap │   ├── config_store │   │   ├── CMakeLists.txt │   │   ├── acc_links │   │   │   ├── csrc │   │   │   │   ├── common │   │   │   │   ├── security │   │   │   │   └── under_api │   │   │   │   └── openssl │   │   │   └── include │   ├── shmemi_bootstrap_mpi.cpp │   ├── shmemi_bootstrap_uid.cpp │   └── socket │   ├── uid_socket.cpp │   ├── uid_socket.h │   └── uid_utils.h ├── data_plane │   ├── shmem_host_cc.cpp │   └── shmem_host_rma.cpp ├── entity │   ├── mem_entity_base.h │   ├── mem_entity_def.h ├── init │   ├── backends │   │   ├── shmem_init_backend.cpp │   │   └── shmemi_init_backend.h │   ├── bootstrap │   │   ├── shmemi_bootstrap.cpp │   │   └── shmemi_bootstrap.h │   ├── shmem_init.cpp │   └── shmemi_init.h ├── mem │   ├── heap │   │   ├── driver │   │   │   ├── devmm_cmd.h │   │   │   └── userspace │   │   │   ├── devmm_define.h │   │   ├── hybm_mem_slice.cpp │   │   └── hybm_mem_slice.h │   ├── shmem_mgr.cpp │   ├── shmem_mm.cpp │   ├── shmem_rma.cpp │   ├── shmemi_mgr.h │   └── shmemi_mm.h ├── python_wrapper │   ├── CMakeLists.txt │   └── pyshmem.cpp ├── shmemi_host_common.h ├── shmemi_host_def.h ├── sync │   ├── shmemi_sync.cpp │   └── shmemi_sync.h ├── team │   ├── shmem_team.cpp │   └── shmemi_team.h ├── transport │   ├── device_rdma │   ├── transport_def.h │   ├── transport_manager.cpp │   └── transport_manager.h └── utils ├── log │   ├── shmemi_log_defs.h │   └── shmemi_logger.cpp ├── shmemi_file_util.h ├── under_api │   ├── dl_acl_api.cpp │   ├── dl_acl_api.h └── utils.h ``` ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/shmem!874 个月前
修复rdma内存泄漏以及建链超时卡死不退出的问题 Co-authored-by: vector5<caobingjie@huawei.com> # message auto-generated for no-merge-commit merge: !324 merge fixrdma into master 修复rdma内存泄漏以及建链超时卡死不退出的问题 Created-by: vector5 Commit-by: vector5 Merged-by: cann-robot Description: # RDMA 内存泄漏修复方案 ## 一、问题概述 **严重性**:高 **问题类别**:资源释放顺序 / 内存泄漏 **影响文件**: - mem_entity_default.cpp(核心修复) - shmem_init_backend.cpp(配套修改) - fixed_ranks_qp_manager.cpp(连带修复) --- ## 二、三版本对比总览 | 维度 | 原始代码 | fixrdma 初版 | fixrdma 修复版 | |-|-|-|-| | release_heap 顺序 | unreservedestroy | destroyunreserve | unreservedestroy | | UnReserveMemorySpace | 仅 segment->UnReserve() | 仅 segment->UnReserve() | **新增**: CloseDevice + segment.reset | | ReleaseResources | CloseDevice + segment.reset | CloseDevice + force GVA 释放 + WARN | 保持不变(兜底) | | CloseConnections | 无去重(server 端多次 deinit) | std::set 去重 | server 端一次 deinit,client 端逐个 | | **是否泄漏** | **🔴 泄漏** | ✅ 不泄漏(但逻辑混乱) | ✅ 不泄漏 | --- ## 三、根因分析 ### 3.1 原始代码为什么泄漏 #### 原始顺序是 unreservedestroy,但 unreserve 不关 transport ```cpp // 原始 shmem_init_backend.cpp int aclshmemi_init_backend::release_heap(aclshmem_mem_type_t mem_type) { // ... // ① 先 unreserve(释放 GVA) if (reserved_mem != nullptr) { hybm_unreserve_mem_space(entity, 0, reserved_mem); // ← 不关 transport! } // ② 再 destroy(关闭 transport) hybm_destroy_entity(entity, 0); } ``` #### 原始 UnReserveMemorySpace() — 只释放 GVA,不关 transport ```cpp // 原始 shmem/src/host/entity/mem_entity_default.cpp int32_t MemEntityDefault::UnReserveMemorySpace() noexcept { if (hbmSegment_ != nullptr) { hbmSegment_->UnReserveMemorySpace(); // FreeMemory → HalGvaUnreserveMemory } if (dramSegment_ != nullptr) { dramSegment_->UnReserveMemorySpace(); } // ← 没有 CloseDevice() return ACLSHMEM_SUCCESS; } ``` #### 原始 ReleaseResources() — 只关 transport + reset segment,不 force 释放 GVA ```cpp // 原始 shmem/src/host/entity/mem_entity_default.cpp void MemEntityDefault::ReleaseResources() { if (transportManager_) { transportManager_->CloseDevice(); // 关闭 transport transportManager_ = nullptr; } hbmSegment_.reset(); // 销毁 shared_ptr,但 GVA 已在 unreserve 中释放 dramSegment_.reset(); initialized = false; // ← 没有 force GVA 释放 } ``` #### 原始代码泄漏链路 ``` release_heap(): ① hybm_unreserve_mem_space() → UnReserveMemorySpace() → hbmSegment_->UnReserveMemorySpace() → FreeMemory() → HalGvaUnreserveMemory() → HalIoctlFreePages() → 内核驱动: NIC pin 着, 引用计数≠0 → 🔴 只解映射 VA, 不回收物理页 → transport 仍开着!NIC 仍在 pin 物理页! ② hybm_destroy_entity() → ReleaseResources() → transportManager_->CloseDevice() // 注销 NIC MR → ~RdmaTransportManager() → ClearAllRegisterMRs() → RaDeregisterMR() → NIC 引脚解除, 引用计数 -1 → 但物理页的 VA 已在 ① 中被清除, 没有组件能认领 → hbmSegment_.reset() // 销毁 shared_ptr → MemEntityFactory::RemoveEngine() 结果: 🔴 物理页成为孤儿, 永久泄漏 ``` ### 3.2 fixrdma 初版(本次改动前)的修复 fixrdma 初版做了两件事: **改动 A**:release_heap() 改为 destroyunreserve ```cpp // 改动后 hybm_destroy_entity(entity, 0); // ① 先 destroy hybm_unreserve_mem_space(...); // ② 后 unreserve(但已找不到 entity, 变为死代码) ``` **改动 B**:ReleaseResources() 新增 force release GVA ```cpp // 改动后 void MemEntityDefault::ReleaseResources() { if (transportManager_) { transportManager_->CloseDevice(); transportManager_ = nullptr; } // 新增 ↓ if (hbmSegment_ != nullptr) { SHM_LOG_WARN("hbmSegment_ GVA not released before destroy, force release."); hbmSegment_->UnReserveMemorySpace(); // ← force release GVA hbmGva_ = nullptr; } if (dramSegment_ != nullptr) { SHM_LOG_WARN("dramSegment_ GVA not released before destroy, force release."); dramSegment_->UnReserveMemorySpace(); dramGva_ = nullptr; } hbmSegment_.reset(); dramSegment_.reset(); initialized = false; } ``` **结果**:不泄漏了(ReleaseResources 内部顺序正确),但 unreserve 变成了死代码,且打印多余的 WARN。 ### 3.3 最终修复 将 transport 关闭逻辑从 ReleaseResources() 移到 UnReserveMemorySpace(),恢复 release_heap 的正确顺序,消除 WARN。 --- ## 四、本次修复详情 ### 4.1 核心修改:UnReserveMemorySpace() 内置 transport 关闭 + segment 重置 **文件**:src/host/entity/mem_entity_default.cpp ``` 修改前(原始 shmem): 修改后(fixrdma): ───────────────────────────────────────────────────────────────── int32_t UnReserveMemorySpace() int32_t UnReserveMemorySpace() { { if (hbmSegment_) // ① 先关闭 transport hbmSegment_->UnReserve(); if (transportManager_) { if (dramSegment_) CloseDevice(); dramSegment_->UnReserve(); transportManager_ = nullptr; return ACLSHMEM_SUCCESS; } } // ② 再释放 GVA(已无 NIC 引用) if (hbmSegment_) { hbmSegment_->UnReserve(); hbmGva_ = nullptr; hbmSegment_.reset(); ← 防止二次释放 } if (dramSegment_) { dramSegment_->UnReserve(); dramGva_ = nullptr; dramSegment_.reset(); } return ACLSHMEM_SUCCESS; } ``` **安全保证**:UnReserveMemorySpace() 的调用路径分析 | 调用路径 | 时机 | transportManager_ 状态 | 行为 | |-|-|-|-| | release_heap() finalize | 程序退出 | 非空 | ✅ 正确关闭 transport,释放 GVA | | Initialize() 失败回滚 | 初始化阶段 | **nullptr**(InitTransManager 在 InitSegment 之后执行) | ⏭ 跳过 CloseDevice,直接释放 GVA | ### 4.2 配套修改:release_heap() 恢复正确顺序 **文件**:src/host/init/backends/shmem_init_backend.cpp ```cpp // 修改后(与原始顺序一致,但因 UnReserveMemorySpace 已安全而不再泄漏) auto ret = hybm_unreserve_mem_space(entity, 0, reserved_mem); // ① 先 unreserve(内部关 transport) if (ret != 0) { SHM_LOG_INFO("unreserve mem space failed: " << ret); } hybm_destroy_entity(entity, 0); // ② 再 destroy(segment 已置空) ``` ### 4.3 CloseConnections() 去掉 std::set 去重 **文件**:src/host/transport/device_rdma/fixed_ranks_qp_manager.cpp **三版本对比**: ``` 原始代码(shmem): fixrdma 初版: fixrdma 修复版: ───────────────────────────── ─────────────────────── ────────────────────────── 无去重, 遍历 deinit std::set<void*> 去重 server: deinit 一次 → server 端会多次 deinit → 语义正确但隐蔽 client: 逐个 deinit 同一个 socketHandle → 意图明确 ``` ```cpp // 修改后 if (&connections == &serverConnections_) { // server 端:所有 entry 共享 serverSocketHandle_,只 deinit 一次 if (serverSocketHandle_ != nullptr) { RaSocketDeinit(serverSocketHandle_); serverSocketHandle_ = nullptr; } } else { // client 端:每个 rank 独立 CreateLocalSocket(),逐个 deinit for (auto it = connections.begin(); it != connections.end(); ++it) { RaSocketDeinit(it->second.socketHandle); } } ``` **为什么 server/client 两侧不同**:server 端在 GenerateWhiteList() 中所有 entry 共用 serverSocketHandle_;client 端每个 rank 独立 CreateLocalSocket()。 --- ## 五、物理页泄漏机制 ### 5.1 关键概念 **VA 映射与解映射**:程序看到的虚拟地址(VA)通过页表翻译为物理地址(PA)。HalGvaUnreserveMemory() 通过 HalIoctlFreePages() 通知内核驱动释放物理页: ```cpp // GvaHeapRemoveReserved() → HalIoctlFreePages(ptr) // 内核驱动: // 检查物理页引用计数 // ├─ 计数=0 → ✅ 真正回收 // └─ 计数≠0 → 只解映射 VA,不回收 → ret=0(静默) ``` **NIC pin**:RDMA 网卡通过 RaRegisterMR() 注册 MR 后,驱动增加物理页引用计数("pin 住"),防止内存被回收。注销 MR 后才解除 pin。 ### 5.2 三种场景的物理页状态 ``` 正确顺序 (ReleaseResources 内部): CloseDevice() → RaDeregisterMR → 引用计数: 1→0 UnReserveMemorySpace() → HalIoctlFreePages → 引用计数=0 → ✅ 回收 错误顺序 (原始代码): UnReserveMemorySpace() → HalIoctlFreePages → 引用计数=1(pin) → 不回收, 计数: 1→0 CloseDevice() → RaDeregisterMR → 引用计数应该-1, 但 VA 上下文已坏 → 🔴 物理页成为孤儿,永久泄漏 修复后顺序 (本次修改): UnReserveMemorySpace() → CloseDevice() → 引用计数: 1→0 → HalIoctlFreePages → 引用计数=0 → ✅ 回收 ``` ### 5.3 为什么日志从来不报错 | 步骤 | API | 返回值 | 为什么没 ERROR | |-|-|-|-| | GVA 释放时 NIC pin 着 | HalIoctlFreePages | 0 | 驱动层面操作"完成":VA 解映射了,物理页不回收是正常行为(被引用) | | 关闭 transport 时 MR 注销 | RaDeregisterMR | 0 | mrHandle 独立句柄,不依赖 VA 仍映射,注销本身成功 | | FreeMemory(二次进入) | 跳过 | — | globalVirtualAddress_ 已置空,正确跳过 | **每一步单独看都没错,拼在一起才泄漏。** --- ## 六、释放流程(修改后) ``` release_heap(): ① hybm_unreserve_mem_space() → UnReserveMemorySpace() ├─ transportManager_->CloseDevice() // 注销 NIC 上所有 RDMA MR,解除物理页 pin │ → ~RdmaTransportManager() → ClearAllRegisterMRs() → RaDeregisterMR │ → 物理页引用计数: 1 → 0 ├─ hbmSegment_->UnReserveMemorySpace() │ → FreeMemory() → HalGvaUnreserveMemory() │ → HalIoctlFreePages() → 引用计数=0 → ✅ 真正回收物理页 ├─ hbmSegment_.reset() // 置空 shared_ptr ├─ dramSegment_->UnReserveMemorySpace() │ → FreeMemory() → HalGvaUnreserveMemory() └─ dramSegment_.reset() ② hybm_destroy_entity() → FindEngineByPtr(e) ✅ entity 仍在 factory 中 → UnInitialize() → ReleaseResources() ├─ transportManager_ == nullptr → 跳过 ├─ hbmSegment_ == nullptr → 跳过(不打印 WARN) ├─ dramSegment_ == nullptr → 跳过 └─ segment.reset() → 空操作 → RemoveEngine(e) // 从 factory 中移除 ``` ## 测试 ### 修改前 ![image.png](https://raw.gitcode.com/user-images/assets/8546182/f0826ead-09d9-4c34-8bd1-c8e80060759e/image.png 'image.png') ### 修改后 ![image.png](https://raw.gitcode.com/user-images/assets/8546182/21405193-5abd-4a4f-b0d0-df307bfff8c0/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/8546182/f449935e-f800-490b-b616-8b0ff61375a9/image.png 'image.png') ### UT测试 ![image.png](https://raw.gitcode.com/user-images/assets/8546182/9fafe677-3049-4ff3-9847-e59431876582/image.png 'image.png') ## 类型标签 - [x] Bug修复 See merge request: cann/shmem!32415 天前
目录更新 Co-authored-by: james88liu<liujianxing1@huawei.com> # message auto-generated for no-merge-commit merge: !87 merge br_dir_1 into master 目录更新 Created-by: james88liu Commit-by: james88liu Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/shmem/issues/63 ## 测试 ![image.png](https://raw.gitcode.com/user-images/assets/8546182/c6cf947b-7583-4e9e-aa14-105f025c4314/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/8546182/cf5148a7-5e17-4b26-9321-c16504910460/image.png 'image.png') ## 文档更新 ``` ├── bootstrap │   ├── config_store │   │   ├── CMakeLists.txt │   │   ├── acc_links │   │   │   ├── csrc │   │   │   │   ├── common │   │   │   │   ├── security │   │   │   │   └── under_api │   │   │   │   └── openssl │   │   │   └── include │   ├── shmemi_bootstrap_mpi.cpp │   ├── shmemi_bootstrap_uid.cpp │   └── socket │   ├── uid_socket.cpp │   ├── uid_socket.h │   └── uid_utils.h ├── data_plane │   ├── shmem_host_cc.cpp │   └── shmem_host_rma.cpp ├── entity │   ├── mem_entity_base.h │   ├── mem_entity_def.h ├── init │   ├── backends │   │   ├── shmem_init_backend.cpp │   │   └── shmemi_init_backend.h │   ├── bootstrap │   │   ├── shmemi_bootstrap.cpp │   │   └── shmemi_bootstrap.h │   ├── shmem_init.cpp │   └── shmemi_init.h ├── mem │   ├── heap │   │   ├── driver │   │   │   ├── devmm_cmd.h │   │   │   └── userspace │   │   │   ├── devmm_define.h │   │   ├── hybm_mem_slice.cpp │   │   └── hybm_mem_slice.h │   ├── shmem_mgr.cpp │   ├── shmem_mm.cpp │   ├── shmem_rma.cpp │   ├── shmemi_mgr.h │   └── shmemi_mm.h ├── python_wrapper │   ├── CMakeLists.txt │   └── pyshmem.cpp ├── shmemi_host_common.h ├── shmemi_host_def.h ├── sync │   ├── shmemi_sync.cpp │   └── shmemi_sync.h ├── team │   ├── shmem_team.cpp │   └── shmemi_team.h ├── transport │   ├── device_rdma │   ├── transport_def.h │   ├── transport_manager.cpp │   └── transport_manager.h └── utils ├── log │   ├── shmemi_log_defs.h │   └── shmemi_logger.cpp ├── shmemi_file_util.h ├── under_api │   ├── dl_acl_api.cpp │   ├── dl_acl_api.h └── utils.h ``` ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/shmem!874 个月前