内存管理
功能介绍
内存管理涉及的主要接口及功能如下:
接口名称 |
功能 |
---|---|
RegisterMem |
注册内存。需要在建链前由Client和Server分别调用。 |
DeregisterMem |
解注册内存。需要在断链后由Client和Server分别调用。 |
TransferSync |
从远端地址读取内存到本地,或者将本地内存推送到远端地址对应的内存上。 |
使用场景
主要用于分布式集群间的内存传输。
功能示例
本示例介绍传输接口的使用,主要涉及内存的注册、注销、传输。如下将根据业务角色给出伪代码示例。
- Client侧和Server侧根据建链章节的示例完成AdxlEngine的初始化。
- Client侧和Server侧为每个请求申请对应大小的内存并注册,若失败,则需要释放对应的资源。该操作需要在建链前进行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
void OnError(AdxlEngine &engine, const std::vector<MemHandle> &handles) { for (auto handle : handles) { (void) engine.DeregisterMem(handle); } engine.Finalize(); } MemDesc desc{}; desc.addr = reinterpret_cast<uintptr_t>(addr); desc.len = len; MemHandle handle = nullptr; auto ret = engine.RegisterMem(desc, MEM_HOST, handle); if (ret != SUCCESS) { printf("[ERROR] RegisterMem failed, ret = %u\n", ret); return -1; }
- 内存传输,有两种方式
- 在Client侧调用TransferSync接口,设置operation参数为READ,即从远端地址读取内存到本地,其中,本地地址和远端地址需在建链前分别在本地和远端完成注册。
1 2 3 4 5 6
TransferOpDesc desc{reinterpret_cast<uintptr_t>(&local), reinterpret_cast<uintptr_t>(remote), size}; auto ret = adxlEngine.TransferSync(remoteEngine, READ, {desc}); if (ret != SUCCESS) { printf("[ERROR] TransferSync read failed, ret = %u\n", ret); return -1; }
- 在Client侧调用TransferSync接口,设置operation参数为WRITE,即将本地地址对应内存推送到远端,其中,本地地址和远端地址需在建链前分别在本地和远端完成注册。
1 2 3 4 5 6
TransferOpDesc desc{reinterpret_cast<uintptr_t>(local), reinterpret_cast<uintptr_t>(remote), size}; auto ret = adxlEngine.TransferSync(remoteEngine, WRITE, {desc}); if (ret != SUCCESS) { printf("[ERROR] TransferSync write failed, ret = %u\n", ret); return -1; }
- 在Client侧调用TransferSync接口,设置operation参数为READ,即从远端地址读取内存到本地,其中,本地地址和远端地址需在建链前分别在本地和远端完成注册。
- 业务退出时,P侧和D侧根据断链章节的示例进行断链和调用finalize接口释放资源。
父主题: 功能介绍