内存管理涉及的主要接口及功能如下:
|
接口名称 |
功能 |
|---|---|
|
RegisterMem |
注册内存。需要在建链前由Client和Server分别调用。 |
|
DeregisterMem |
解注册内存。需要在断链后由Client和Server分别调用。 |
|
TransferSync |
从远端地址读取内存到本地,或者将本地内存推送到远端地址对应的内存上。 |
主要用于分布式集群间的内存传输。
本示例介绍传输接口的使用,主要涉及内存的注册、注销、传输。如下将根据业务角色给出伪代码示例。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
void OnError(Hixk &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; } |
1 2 3 4 5 6 |
TransferOpDesc desc{reinterpret_cast<uintptr_t>(&local), reinterpret_cast<uintptr_t>(remote), size}; auto ret = engine.TransferSync(remote_engine, READ, {desc}); if (ret != SUCCESS) { printf("[ERROR] TransferSync read failed, ret = %u\n", ret); return -1; } |
1 2 3 4 5 6 |
TransferOpDesc desc{reinterpret_cast<uintptr_t>(local), reinterpret_cast<uintptr_t>(remote), size}; auto ret = engine.TransferSync(remote_engine, WRITE, {desc}); if (ret != SUCCESS) { printf("[ERROR] TransferSync write failed, ret = %u\n", ret); return -1; } |