43d14cbd创建于 2025年11月13日历史提交

UBTurboRMRSAgentMigrateStrategy:内存迁出策略

库 LIBRARY

UBTurbo客户端库 (libubturbo_client.so)

摘要 SYNOPSIS

#include "turbo_rmrs_interface.h"

uint32_t UBTurboRMRSAgentMigrateStrategy(const MigrateStrategyParamRMRS &migrateStrategyParam, MigrateStrategyResult &migrateStrategyResult);

描述 DESCRIPTION

根据输入需要迁出本地内存大小和每个虚拟机对应最大迁出比例,确定虚拟机迁出的具体比例和对应远端NUMA。

参数 Parameters

name IN/OUT description
migrateStrategyParam IN struct MigrateStrategyParamRMRS {
std::vector<VMPresetParam> vmInfoList; // 虚拟机列表及最大迁出比例
std::uint64_t borrowSize; // 需要匀出本地内存大小
std::map<pid_t, std::vector<uint16_t>> pidRemoteNumaMap; // pid对应的远端numa信息Map
std::vector<uint16_t> timeOutNumas; // 归还超时的远端numa
};
struct VMPresetParam {
pid_t pid; // vm对应pid
uint16_t ratio; // 迁出最大比例
};
migrateStrategyResult OUT struct VMMigrateOutParam {
pid_t pid;
uint64_t memSize; // 迁出预设大小
uint16_t desNumaId; // 迁移远端numa
};
struct MigrateStrategyResult {
std::vector vmInfoList;
uint64_t waitingTime; // 单位ms
};

返回值 RETURN VALUE

返回 0 表示成功,返回其他值表示失败,请见错误 ERRORS

错误 ERRORS

返回值1:通用错误码

返回值2:socket创建失败

返回值3:与server通信失败

返回值4:未找到对应函数

返回值5:函数执行错误

返回值6:函数返回值不合法

约束 CONSTRAINTS

暂无

附注 NOTES

暂无

样例 EXAMPLES

以下程序完成内存迁出策略调用。

#include <iostream>
#include "turbo_rmrs_interface.h"

const char *const LIBUBTURBO_CLIENT_PATH = "/usr/lib64/libubturbo_client.so";
void *ubturboClientHandle = nullptr;
UBTurboRMRSAgentMigrateStrategy UBTurboRMRSAgentMigrateStrategy = nullptr;

int main()
{
    ubturboClientHandle = dlopen(LIBUBTURBO_CLIENT_PATH, RTLD_LAZY);
	UBTurboRMRSAgentMigrateStrategy = reinterpret_cast<UBTurboRMRSAgentMigrateStrategy>(dlsym(ubturboClientHandle, "UBTurboRMRSAgentMigrateStrategy"));
	
    MigrateStrategyParam migrateStrategyParam;
    /*
    填充对应参数
    */
    MigrateStrategyResult migrateStrategyResult;
    auto ret = UBTurboRMRSAgentMigrateStrategy(migrateStrategyParam, migrateStrategyResult);
    return 0;
}

UBTurboRMRSAgentMigrateExecute:内存迁出执行

库 LIBRARY

UBTurbo客户端库 (libubturbo_client.so)

摘要 SYNOPSIS

uint32_t UBTurboRMRSAgentMigrateExecute(const MigrateStrategyResult &migrateStrategyResult);

描述 DESCRIPTION

内存迁出执行。

参数 Parameters

name IN/OUT description
migrateStrategyResult IN struct VMMigrateOutParam {
pid_t pid;
uint64_t memSize; // 迁出预设比例
uint16_t desNumaId; // 迁移远端numa
};
struct MigrateStrategyResult {
std::vector<VMMigrateOutParam> vmInfoList;
uint64_t waitingTime; // 单位ms, 范围10s-3min
};

返回值 RETURN VALUE

返回 0 表示成功,返回其他值表示失败,请见错误 ERRORS

错误 ERRORS

返回值1:通用错误码 返回值2:socket创建失败 返回值3:与server通信失败 返回值4:未找到对应函数 返回值5:函数执行错误 返回值6:函数返回值不合法

约束 CONSTRAINTS

暂无

附注 NOTES

暂无

样例 EXAMPLES

以下程序完成虚拟机内存迁出功能。

#include <iostream>
#include "turbo_rmrs_interface.h"

const char *const LIBUBTURBO_CLIENT_PATH = "/usr/lib64/libubturbo_client.so";
void *ubturboClientHandle = nullptr;
UBTurboRMRSAgentMigrateExecute UBTurboRMRSAgentMigrateExecute = nullptr;

int main()
{
    ubturboClientHandle = dlopen(LIBUBTURBO_CLIENT_PATH, RTLD_LAZY);
	UBTurboRMRSAgentMigrateExecute = reinterpret_cast<UBTurboRMRSAgentMigrateExecute>(dlsym(ubturboClientHandle, "UBTurboRMRSAgentMigrateExecute"));
	
    MigrateStrategyResult migrateStrategyResult;
    /*
    填充对应参数
    */
    ret = UBTurboRMRSAgentMigrateExecute(migrateStrategyResult);
    return 0;
}

UBTurboRMRSAgentMigrateBack:内存归还

库 LIBRARY

UBTurbo客户端库 (libubturbo_client.so)

摘要 SYNOPSIS

#include "turbo_rmrs_interface.h"

uint32_t UBTurboRMRSAgentMigrateBack(MigrateBackResult &migrateBackResult);

描述 DESCRIPTION

检查并迁回当前节点上可迁回的远端虚拟机,计算可归还的远端NUMA列表。

参数 Parameters

name IN/OUT description
MigrateBackResult IN class MigrateBackResult {
public:
uint32_t result{};
std::vector<uint16_t> numaIds{}; // 决策结果,表示哪些远端numaID可以归还
};

返回值 RETURN VALUE

返回 0 表示成功,返回其他值表示失败,请见错误 ERRORS

错误 ERRORS

返回值1:通用错误码

返回值2:socket创建失败

返回值3:与server通信失败

返回值4:未找到对应函数

返回值5:函数执行错误

返回值6:函数返回值不合法

约束 CONSTRAINTS

暂无

附注 NOTES

暂无

样例 EXAMPLES

以下程序完成内存归还部分功能(将虚拟机迁回本地numa,计算可归还的远端NUMA列表)。

#include <iostream>
#include "turbo_rmrs_interface.h"

const char *const LIBUBTURBO_CLIENT_PATH = "/usr/lib64/libubturbo_client.so";
void *ubturboClientHandle = nullptr;
UBTurboRMRSAgentMigrateBack UBTurboRMRSAgentMigrateBack = nullptr;

int main()
{
    ubturboClientHandle = dlopen(LIBUBTURBO_CLIENT_PATH, RTLD_LAZY);
	UBTurboRMRSAgentMigrateBack = reinterpret_cast<UBTurboRMRSAgentMigrateBack>(dlsym(ubturboClientHandle, "UBTurboRMRSAgentMigrateBack"));
	
    MigrateBackResult migrateBackResult;
    /*
    填充对应参数
    */
    auto ret = UBTurboRMRSAgentMigrateBack(migrateBackResult);
    return 0;
}

UBTurboRMRSAgentBorrowRollBack:内存借用回滚

库 LIBRARY

UBTurbo客户端库 (libubturbo_client.so)

摘要 SYNOPSIS

uint32_t UBTurboRMRSAgentBorrowRollBack(std::map<std::string, std::set<BorrowIdInfo>> &borrowIdsPidsMap);

描述 DESCRIPTION

内存借用回滚的迁回部分的回调函数。

参数 Parameters

name IN/OUT description
borrowIdsPidsMap IN std::map<std::string, std::set>
(key为borrowId)
struct BorrowIdInfo {
pid_t pid;
uint64_t oriSize; // 对应pid之前占用远端内存大小
};

返回值 RETURN VALUE

返回 0 表示成功,返回其他值表示失败,请见错误 ERRORS

错误 ERRORS

返回值1:通用错误码

返回值2:socket创建失败

返回值3:与server通信失败

返回值4:未找到对应函数

返回值5:函数执行错误

返回值6:函数返回值不合法

约束 CONSTRAINTS

暂无

附注 NOTES

暂无

样例 EXAMPLES

以下程序完成内存借用回滚的迁回部分。

#include <iostream>
#include "turbo_rmrs_interface.h"

const char *const LIBUBTURBO_CLIENT_PATH = "/usr/lib64/libubturbo_client.so";
void *ubturboClientHandle = nullptr;
UBTurboRMRSAgentBorrowRollBack UBTurboRMRSAgentBorrowRollBack = nullptr;

int main()
{
    ubturboClientHandle = dlopen(LIBUBTURBO_CLIENT_PATH, RTLD_LAZY);
	UBTurboRMRSAgentBorrowRollBack = reinterpret_cast<UBTurboRMRSAgentBorrowRollBack>(dlsym(ubturboClientHandle, "UBTurboRMRSAgentBorrowRollBack"));
	
    std::map<std::string, std::set<BorrowIdInfo>> curBorrowIdsPidsMap;
    /*
    填充对应参数
    */
    auto ret = UBTurboRMRSAgentBorrowRollBack(curBorrowIdsPidsMap);
    return 0;
}

PidNumaInfoCollectRecvHandler:容器进程内存采集

库 LIBRARY

UBTurbo客户端库 (libubturbo_client.so)

摘要 SYNOPSIS

uint32_t UBTurboRMRSAgentPidNumaInfoCollect(const PidNumaInfoCollectParam &pidNumaInfoCollectParam, PidNumaInfoCollectResult &pidNumaInfoCollectResult);

描述 DESCRIPTION

RMRS提供容器进程内存采集。

参数 Parameters

name IN/OUT description
PidNumaInfoCollectParam IN class PidNumaInfoCollectParam : public Serializer {
public:
PidNumaInfoCollectParam() {}
explicit PidNumaInfoCollectParam(std::vector<pid_t> pidList) : pidList(pidList) {}
std::vector<pid_t> pidList{};
};
PidNumaInfoCollectResult OUT class PidNumaInfoCollectResult : public Serializer {
public:
PidNumaInfoCollectResult() {}
explicit PidNumaInfoCollectResult(std::vector< mempooling::PidInfo> pidInfoList)
: pidInfoList(pidInfoList) {}
std::vector< mempooling::PidInfo> pidInfoList{};

返回值 RETURN VALUE

返回 0 表示成功,返回其他值表示失败,请见错误 ERRORS

错误 ERRORS

返回值1:通用错误码

返回值2:socket创建失败

返回值3:与server通信失败

返回值4:未找到对应函数

返回值5:函数执行错误

返回值6:函数返回值不合法

约束 CONSTRAINTS

暂无

附注 NOTES

暂无

样例 EXAMPLES

以下程序完成RMRS容器进程内存采集。

#include <iostream>
#include "turbo_rmrs_interface.h"

const char *const LIBUBTURBO_CLIENT_PATH = "/usr/lib64/libubturbo_client.so";
void *ubturboClientHandle = nullptr;
UBTurboRMRSAgentPidNumaInfoCollect UBTurboRMRSAgentPidNumaInfoCollect = nullptr;

int main()
{
    ubturboClientHandle = dlopen(LIBUBTURBO_CLIENT_PATH, RTLD_LAZY);
	UBTurboRMRSAgentPidNumaInfoCollect =
        reinterpret_cast<UBTurboRMRSAgentPidNumaInfoCollect>(dlsym(ubturboClientHandle, "UBTurboRMRSAgentPidNumaInfoCollect"));
	
    turbo::rmrs::PidNumaInfoCollectParam pidNumaInfoCollectParam;
    turbo::rmrs::PidNumaInfoCollectResult pidNumaInfoCollectResult;
    /*
    填充对应参数
    */
    auto ret = MempoolingMessage::UBTurboRMRSAgentPidNumaInfoCollect(pidNumaInfoCollectParam, pidNumaInfoCollectResult);
    return 0;
}

UBTurboRMRSAgentNumaMemInfoCollect:容器进程内存采集

库 LIBRARY

UBTurbo客户端库 (libubturbo_client.so)

摘要 SYNOPSIS

uint32_t UBTurboRMRSAgentNumaMemInfoCollect(const NumaMemInfoCollectParam &numaMemInfoCollectParam, ResponseInfoSimpo &responseInfoSimpo);

描述 DESCRIPTION

RMRS提供容器进程内存采集。

参数 Parameters

name IN/OUT description
NumaMemInfoCollectParam IN class NumaMemInfoCollectParam : public Serializer {
public:
NumaMemInfoCollectParam() {}
explicit NumaMemInfoCollectParam(int numaId) :
numaId(numaId) {}
int numaId{};
ResponseInfoSimpo OUT class ResponseInfoSimpo {
public: ResponseInfoSimpo() = default;
explicit ResponseInfoSimpo(ResponseInfo responseInfoInput) : responseInfo_(std::move(responseInfoInput)) {}
inline ResponseInfo GetResponseInfo() {
return responseInfo_;
}
inline void SetResponseInfo(const int code, const std::string &message) {
responseInfo_.code = code;
responseInfo_.message = message;
}
std::string ToString() const {
return "code=" + std::to_string(responseInfo_.code) + ", message=" + responseInfo_.message;
}
ResponseInfo responseInfo_{};
};

返回值 RETURN VALUE

返回 0 表示成功,返回其他值表示失败,请见错误 ERRORS

错误 ERRORS

返回值1:通用错误码

返回值2:socket创建失败

返回值3:与server通信失败

返回值4:未找到对应函数

返回值5:函数执行错误

返回值6:函数返回值不合法

约束 CONSTRAINTS

暂无

附注 NOTES

暂无

样例 EXAMPLES

以下程序完成RMRS容器进程内存采集。

#include <iostream>
#include "turbo_rmrs_interface.h"

const char *const LIBUBTURBO_CLIENT_PATH = "/usr/lib64/libubturbo_client.so";
void *ubturboClientHandle = nullptr;
UBTurboRMRSAgentNumaMemInfoCollect UBTurboRMRSAgentNumaMemInfoCollect = nullptr;

int main()
{
    ubturboClientHandle = dlopen(LIBUBTURBO_CLIENT_PATH, RTLD_LAZY);
	UBTurboRMRSAgentNumaMemInfoCollect =
        reinterpret_cast<UBTurboRMRSAgentNumaMemInfoCollect>(dlsym(ubturboClientHandle, "UBTurboRMRSAgentNumaMemInfoCollect"));
	
   turbo::rmrs::NumaMemInfoCollectParam numaMemInfoCollectParam;
   turbo::rmrs::ResponseInfoSimpo responseInfoSimpo;
    /*
    填充对应参数
    */
    auto ret = MempoolingMessage::UBTurboRMRSAgentNumaMemInfoCollect(numaMemInfoCollectParam, responseInfoSimpo);
    return 0;
}

UBTurboRMRSAgentUCacheMigrateStrategy:pagecache迁移策略执行

库 LIBRARY

UBTurbo客户端库 (libubturbo_client.so)

摘要 SYNOPSIS

#include "turbo_rmrs_interface.h"

uint32_t UBTurboRMRSAgentUCacheMigrateStrategy(const UCacheMigrationStrategyParam &uCacheMigrationStrategy, ResCode &rescode);

描述 DESCRIPTION

RMRS提供pagecache迁移策略执行。

参数 Parameters

name IN/OUT description
uCacheMigrationStrategy IN struct UCacheMigrationStrategyParam {
int16_t localNumaId; // 执行迁出的本地numa节点。若小于0,代表所有本地numa节点
std::vector<uint16_t> remoteNumaIds; // 执行迁入的远端内存呈现numa节点列表
std::vector<pid_t> pids; // 需要迁移的进程列表
float ucacheUsageRatio; // 给Pagecache分配使用的内存比例
};
resCode OUT struct ResCode {
uint32_t resCode;
};

返回值 RETURN VALUE

返回 0 表示成功,返回其他值表示失败,请见错误 ERRORS

错误 ERRORS

返回值1:通用错误码

返回值2:socket创建失败

返回值3:与server通信失败

返回值4:未找到对应函数

返回值5:函数执行错误

返回值6:函数返回值不合法

约束 CONSTRAINTS

暂无

附注 NOTES

暂无

样例 EXAMPLES

以下程序完成内存迁出策略调用。

#include <iostream>
#include "turbo_rmrs_interface.h"

const char *const LIBUBTURBO_CLIENT_PATH = "/usr/lib64/libubturbo_client.so";
void *ubturboClientHandle = nullptr;
UBTurboRMRSAgentUCacheMigrateStrategy UBTurboRMRSAgentUCacheMigrateStrategy = nullptr;

int main()
{
    ubturboClientHandle = dlopen(LIBUBTURBO_CLIENT_PATH, RTLD_LAZY);
	UBTurboRMRSAgentUCacheMigrateStrategy = reinterpret_cast<UBTurboRMRSAgentUCacheMigrateStrategy>(dlsym(ubturboClientHandle, "UBTurboRMRSAgentUCacheMigrateStrategy"));
	
    UCacheMigrationStrategyParam param;
    ResCode result;
    /*
    填充对应参数
    */
    auto ret = UBTurboRMRSAgentUCacheMigrateStrategy(param, result);
    return 0;
}

UBTurboRMRSAgentUCacheMigrateStop:停止pagecache迁移

库 LIBRARY

UBTurbo客户端库 (libubturbo_client.so)

摘要 SYNOPSIS

#include "turbo_rmrs_interface.h"

uint32_t UBTurboRMRSAgentUCacheMigrateStop(ResCode &rescode);

描述 DESCRIPTION

RMRS提供停止pagecache迁移。

参数 Parameters

name IN/OUT description
ResCode OUT struct ResCode {
uint32_t resCode;
};

返回值 RETURN VALUE

返回 0 表示成功,返回其他值表示失败,请见错误 ERRORS

错误 ERRORS

返回值1:通用错误码

返回值2:socket创建失败

返回值3:与server通信失败

返回值4:未找到对应函数

返回值5:函数执行错误

返回值6:函数返回值不合法

约束 CONSTRAINTS

暂无

附注 NOTES

暂无

样例 EXAMPLES

以下程序完成停止pagecache迁移。

#include <iostream>
#include "turbo_rmrs_interface.h"

const char *const LIBUBTURBO_CLIENT_PATH = "/usr/lib64/libubturbo_client.so";
void *ubturboClientHandle = nullptr;
UBTurboRMRSAgentUCacheMigrateStop UBTurboRMRSAgentUCacheMigrateStop = nullptr;

int main()
{
    ubturboClientHandle = dlopen(LIBUBTURBO_CLIENT_PATH, RTLD_LAZY);
	UBTurboRMRSAgentUCacheMigrateStop = reinterpret_cast<UBTurboRMRSAgentUCacheMigrateStop>(dlsym(ubturboClientHandle, "UBTurboRMRSAgentUCacheMigrateStop"));
	
    ResCode result;
    auto ret = UBTurboRMRSAgentUCacheMigrateStop(result);
    return 0;
}

UBTurboRMRSAgentUpdateUCacheRatio:计算Pagecache远端内存使用比例

库 LIBRARY

UBTurbo客户端库 (libubturbo_client.so)

摘要 SYNOPSIS

#include "turbo_rmrs_interface.h"

uint32_t UBTurboRMRSAgentUpdateUCacheRatio(const MigrationInfoParam &migrationInfoParam, UCacheRatioRes &uCacheRatioRes);

描述 DESCRIPTION

RMRS提供计算Pagecache远端内存使用比例。

参数 Parameters

name IN/OUT description
MigrationInfoParam IN struct MigrationInfoParam {
uint64_t borrowMemKB; // 借用内存总大小,单位KB
std::vector<pid_t> pids; // 需要迁移的进程列表
};
UCacheRatioRes OUT struct UCacheRatioRes {
float ucacheUsageRatio; // ucache借用比例
uint32_t resCode; // 是否执行成功
};

返回值 RETURN VALUE

返回 0 表示成功,返回其他值表示失败,请见错误 ERRORS

错误 ERRORS

返回值1:通用错误码

返回值2:socket创建失败

返回值3:与server通信失败

返回值4:未找到对应函数

返回值5:函数执行错误

返回值6:函数返回值不合法

约束 CONSTRAINTS

暂无

附注 NOTES

暂无

样例 EXAMPLES

以下程序完成计算Pagecache远端内存使用比例。

#include <iostream>
#include "turbo_rmrs_interface.h"

const char *const LIBUBTURBO_CLIENT_PATH = "/usr/lib64/libubturbo_client.so";
void *ubturboClientHandle = nullptr;
UBTurboRMRSAgentUpdateUCacheRatio UBTurboRMRSAgentUpdateUCacheRatio = nullptr;

int main()
{
    ubturboClientHandle = dlopen(LIBUBTURBO_CLIENT_PATH, RTLD_LAZY);
	UBTurboRMRSAgentUpdateUCacheRatio = reinterpret_cast<UBTurboRMRSAgentUpdateUCacheRatio>(dlsym(ubturboClientHandle, "UBTurboRMRSAgentUpdateUCacheRatio"));
	
    MigrationInfoParam param;
    UCacheRatioRes result;
    /*
    填充对应参数
    */
    auto ret = UBTurboRMRSAgentUpdateUCacheRatio(param, result);
    return 0;
}