API指南
- cache初始化传入容量大小,当前最大256TiB,不支持动态修改。
cache_line_size支持8k/16k/32k/64k,推荐使用8k。- ocf会创建io_worker_num个队列,一个io_worker对应一个ocf队列对submission_queue/completion_queue。
- region_id全局唯一,一个slot对应一个core,最多支持511个core,一个core逻辑空间最大4096TiB,最多承载128K个32GiB region。Slot下所有region放在slot对应core。设备空间下,region_id重映射一个remap_id,region在core上对应的区间为
remap_id*32GiB~(remap_id+1)*32GiB。 - 同一个slot调用的
ocf_get/ocf_put/ocf_invalid/ocf_lookup要求在一个线程中。
初始化
ocf模块初始化。接口类型为同步接口。
int ocf_init(struct ocf_config *cfg);
| 参数名 | 数据类型 | 参数类型 | 描述 |
|---|---|---|---|
| cfg | struct ocf_config * | 入参 | 请参见结构体章节 |
STATE_SUCCESS:初始化成功。STATE_PARAM_INVALID:cfg内部参数非法,例如cache_line_size不是支持的类型。STATE_FAIL:ocf初始化失败,例如ocf已经进行过初始化;ocf上下文初始化/cache初始化等流程失败。
退出
ocf模块注销接口。接口类型为同步接口。
void ocf_exit();
无入参
无返回值
创建core
当前ocf core和slot一 一对应,新增slot时,通过该接口创建对应的ocf core资源。接口类型为异步接口。
int ocf_add_core(uint32_t slot_id);
| 参数名 | 数据类型 | 参数类型 | 描述 |
|---|---|---|---|
| slot_id | uint32_t | 入参 | slot标识,全局唯一 |
STATE_SUCCESS:ocf core创建成功。STATE_OCF_UNAVAILABLE:ocf不可用,例如未进行初始化,或正在恢复中。STATE_CORE_EXIST:slot对应的core已经创建。STATE_MEM_ALLOC_ERR:内存不足或内存申请失败。STATE_FAIL:core创建流程失败。
删除core
当前ocf core和slot一 一对应,迁出或删除slot时,通过该接口释放对应的ocf core资源。释放时,ocf内部会对core在cache的映射做失效来确保slot在ocf中的缓存清除。接口类型为异步接口。
int ocf_remove_core(uint32_t slot_id);
| 参数名 | 数据类型 | 参数类型 | 描述 |
|---|---|---|---|
| slot_id | uint32_t | 入参 | slot标识,全局唯一 |
STATE_SUCCESS:ocf core移除成功。STATE_OCF_UNAVAILABLE:ocf不可用,未进行初始化或正在做恢复中。STATE_CORE_CREATING:slot对应的core正在创建,不能删除。STATE_MEM_ALLOC_ERR:内存不足或内存申请失败。
region cache失效
region删除时,调用该接口来清除cache中的region数据。接口类型为异步接口。
int ocf_remove_region(uint32_t slot_id, uint32_t region_id);
| 参数名(可选) | 数据类型 | 参数类型 | 描述 |
|---|---|---|---|
| slot_id | uint32_t | 入参 | slot标识,全局唯一 |
| region_id | uint32_t | 入参 | region标识,全局唯一 |
STATE_SUCCESS,数据清除成功。STATE_OCF_UNAVAILABLE,ocf不可用。STATE_MEM_ALLOC_ERR,申请失败。
提交读请求
将读请求提交到ocf队列,接口类型为异步接口。
请求说明:region指定区间数据在cache中读取。
int ocf_get(struct req_context *cxt);
| 参数名 | 数据类型 | 参数类型 | 描述 |
|---|---|---|---|
| ctx | struct req_context * | 入参 | 请参见4.3结构体章节 |
STATE_SUCCESS,请求提交ocf队列成功。STATE_OCF_UNAVAILABLE,ocf不可用。STATE_PARAM_INVALID,ctx为空指针或者ctx内部参数设置不合法。STATE_CORE_NOT_EXIST,slot对应core不存在,请求提交失败。STATE_MEM_ALLOC_ERR,内存申请失败。
提交写请求
将写请求提交到ocf队列,异步接口。
请求类型:将region指定区间数据刷新到cache。
int ocf_put(struct req_context *cxt);
| 参数名 | 数据类型 | 参数类型 | 描述 |
|---|---|---|---|
| ctx | struct req_context * | 入参 | 请参见4.3结构体章节 |
STATE_SUCCESS,请求提交ocf队列成功。STATE_OCF_UNAVAILABLE,ocf不可用。STATE_PARAM_INVALID,ctx为空指针或者ctx内部参数设置不合法。STATE_CORE_NOT_EXIST,slot对应core不存在,请求提交失败。STATE_MEM_ALLOC_ERR,内存申请失败。
提交失效请求
将失效请求提交到ocf队列,异步接口。
请求类型:region部分区间数据在cache中删除。
int ocf_invalid(struct req_context *ctx);
| 参数名 | 数据类型 | 参数类型 | 描述 |
|---|---|---|---|
| ctx | struct req_context * | 入参 | 请参见4.3结构体章节 |
STATE_SUCCESS,请求提交ocf队列成功。STATE_OCF_UNAVAILABLE,ocf不可用。STATE_PARAM_INVALID,ctx为空指针或者ctx内部参数设置不合法。STATE_CORE_NOT_EXIST,slot对应core不存在,请求提交失败。STATE_MEM_ALLOC_ERR,内存申请失败。
提交查询请求
将查询请求提交到ocf队列,异步接口。
请求类型:查询region指定区间数据在cache是否全命中。
int ocf_lookup(struct req_context *cxt);
| 参数名 | 数据类型 | 参数类型 | 描述 |
|---|---|---|---|
| ctx | struct req_context * | 入参 | 请参见4.3结构体章节 |
STATE_SUCCESS,请求提交ocf队列成功。STATE_OCF_UNAVAILABLE,ocf不可用。STATE_PARAM_INVALID,ctx为空指针或者ctx内部参数设置不合法。STATE_CORE_NOT_EXIST,slot对应core不存在,请求提交失败。STATE_MEM_ALLOC_ERR,内存申请失败。
轮询
触发已完成请求的回调,接口类型取决于执行回调接口的类型。
int ocf_poll(uint32_t io_worker_id, uint32_t max_num);
| 参数名 | 数据类型 | 参数类型 | 描述 |
|---|---|---|---|
| io_worker_id | uint32_t | 入参 | io_worker标识 |
| max_num | uint32_t | 入参 | 每次可处理的请求结果的最大数量 |
STATE_SUCCESS,请求提交ocf队列成功。STATE_OCF_UNAVAILABLE,ocf不可用。STATE_PARAM_INVALID,io_worker_id值异常。
获取ocf cache/core映射
获取ocf cache/core及其映射等信息,同步接口。
struct ocf_dump_info *ocf_dump_cache_core_info();
无入参
NULL,查询失败。非NULL,返回的结构体指针,结构体中包含查询信息的字符串,表示查询成功。
获取region_id和remap_id映射
获取region_id和remap_id的映射,同步接口。
struct ocf_dump_info *ocf_dump_region_info();
无入参
NULL,查询失败。非NULL,返回的结构体指针,结构体中包含查询信息的字符串,表示查询成功。
获取ocf内部处理IO的各项计数
ocf内部处理IO的各项计数,同步接口。
struct ocf_dump_info *ocf_dump_cache_stats();
无入参
NULL,查询失败。非NULL,返回的结构体指针,结构体中包含查询信息的字符串,表示查询成功。
查询ocf当前状态
查询ocf当前状态(用于确认ocf是否可用),同步接口。
struct ocf_dump_info *ocf_dump_status();
无入参
NULL,查询失败。非NULL,返回的结构体指针,结构体中包含查询信息的字符串,表示查询成功。
释放ocf_dump_info结构体内存
释放ocf_dump_info结构体内存,同步接口。
void ocf_release_dump_info(struct ocf_dump_info *info);
| 参数名 | 数据类型 | 参数类型 | 描述 |
|---|---|---|---|
| info | struct ocf_dump_info * | 入参 | 请参见4.3结构体章节 |
无
| 名称 | 说明 | 定义 |
|---|---|---|
| ocf_config | ocf初始化入参结构体,包含ocf初始化必要的元素 | |
| req_context | 向ocf提交读/写/查询/失效这些异步请求的接口的入参结构体 | |
| ocf_dump_info | 查询命令输出结构体 | |
| 枚举体描述 | 定义 |
|---|---|
| 错误码 | |
修订记录
| 发布日期 | 修改说明 |
|---|---|
| 2024-06-30 | 第一次正式发布。 |