UBS-IO API完全参考:从创建Cache实例到性能优化的10个关键接口
【免费下载链接】ubs-ioUbs-io provides high-level I/O services for application-affinity global data read/write caching systems based on UB superpods.项目地址: https://gitcode.com/openeuler/ubs-io
前往项目官网免费下载:https://ar.openeuler.org/ar/
UBS-IO(Unified Buffer Service I/O)是openEuler社区提供的高性能分布式读写缓存系统,专为存算分离架构设计,通过计算侧缓存显著提升I/O性能。本文为您提供完整的UBS-IO API参考指南,涵盖从基础初始化到高级性能优化的10个关键接口。🚀
🔧 快速开始:UBS-IO核心接口概览
UBS-IO提供了一套完整的C API接口,支持两种工作模式:融合模式适用于AI训练场景,分离模式适用于大数据处理场景。在开始使用前,您需要了解系统的基本架构:
UBS-IO通过多级分布式缓存设计,结合内存和高速磁盘介质,为应用提供高性能的I/O加速服务。系统支持回写模式和透写模式两种缓存策略,以及本地亲和和全局均衡两种数据亲和策略。
📋 10个关键API接口详解
1.BioInitialize - 系统初始化接口
这是使用UBS-IO的第一步,初始化系统并配置工作模式。支持两种工作模式:
- CONVERGENCE(0)- 融合模式,适用于AI场景
- SEPARATES(1)- 分离模式,适用于大数据场景
CResult BioInitialize(WorkerMode mode, ClientOptionsConfig *optConf);关键参数:
mode: 工作模式选择optConf: 客户端配置,包括日志类型、安全开关、证书路径等
2.BioCreateCache - 创建Cache实例
创建缓存实例是核心操作,您需要根据应用场景选择合适的缓存策略和数据亲和策略:
CResult BioCreateCache(CacheDescriptor desc);缓存策略选择:
- WRITE_BACK(1)- 回写模式:数据先写入缓存,异步刷回后端存储
- WRITE_THROUGH(2)- 透写模式:数据同时写入缓存和后端存储
数据亲和策略:
- LOCAL_AFFINITY(1)- 本地亲和:数据尽量存放在本地节点
- GLOBAL_BALANCE(2)- 全局均衡:数据在集群中均衡分布
3.BioPut/BioGet - 基础读写操作
这是最常用的数据读写接口,支持对象级别的存储和读取:
CResult BioPut(uint64_t tenantId, const char *key, const char *value, uint64_t length, ObjLocation location); CResult BioGet(uint64_t tenantId, const char *key, uint64_t offset, uint64_t length, ObjLocation location, char *value, uint64_t *realLength);性能提示:单次写入最大支持4MB数据,适用于中小型对象存储。
4.BioAllocCacheSpace + BioPutWithCopyFree - 免拷贝写入优化
对于高性能场景,UBS-IO提供了免拷贝写入机制,避免数据复制开销:
CResult BioAllocCacheSpace(uint64_t tenantId, uint64_t objectId, uint64_t length, CacheSpaceDesc *space); CResult BioPutWithCopyFree(uint64_t tenantId, const char *key, CacheSpaceDesc *space);应用场景:适用于需要高性能写入的大数据量场景,如AI训练中的模型参数保存。
5.BioLoad - 异步数据加载接口
支持异步数据预加载,提高后续读取性能:
CResult BioLoad(uint64_t tenantId, const char *key, uint64_t offset, uint64_t length, ObjLocation location, BioLoadCallback callback, void *context);回调机制:通过回调函数通知加载完成,避免阻塞主线程。
6.BioCalcLocation - 对象位置计算
计算对象在分布式系统中的位置信息:
CResult BioCalcLocation(uint64_t tenantId, uint64_t objectId, ObjLocation *location);位置信息用途:用于后续的读写操作,确保数据访问的正确性。
7.BioShowCacheResource - 缓存资源监控
查询系统缓存资源使用情况,帮助您了解系统负载:
CResult BioShowCacheResource(CacheResourcesDesc **nodeDesc, uint64_t *nodeNum);监控指标包括:
- 读缓存内存/磁盘容量和使用情况
- 写缓存内存/磁盘容量和使用情况
- 各节点资源分布
8.BioShowCacheHitRatio - 缓存命中率统计
获取系统缓存命中率信息,评估缓存效果:
CResult BioShowCacheHitRatio(CacheHitFinalDesc *desc, CacheHitFinalDesc **nodeDesc, uint64_t *nodeNum);命中率指标:
- 读缓存内存/磁盘命中数
- 写缓存内存/磁盘命中数
- 后端存储命中数
9.BioListAll + BioStat - 对象管理接口
支持对象列举和状态查询,便于系统管理:
CResult BioListAll(uint64_t tenantId, const char *prefix, ObjStat **objs, uint64_t *objNum); CResult BioStat(uint64_t tenantId, const char *key, ObjLocation location, ObjStat *stat);内存管理提醒:使用BioListAll后必须调用BioFreeListResources释放内存。
10.BioNotifyUpgradePrepare/BioNotifyUpgradeFinish - 系统升级接口
支持在线系统升级,确保服务连续性:
CResult BioNotifyUpgradePrepare(uint64_t tenantId); CResult BioNotifyUpgradeFinish(uint64_t tenantId); CResult BioCheckUpgradeReady(uint64_t tenantId);升级流程:
- 调用
BioNotifyUpgradePrepare准备升级 - 等待缓存数据淘汰到后端存储
- 调用
BioCheckUpgradeReady检查就绪状态 - 执行系统升级
- 调用
BioNotifyUpgradeFinish完成升级
🚀 性能优化最佳实践
1.选择合适的缓存策略
- AI训练场景:推荐使用回写模式+本地亲和策略,减少训练过程中的I/O延迟
- 大数据分析场景:推荐使用透写模式+全局均衡策略,保证数据一致性
2.合理使用免拷贝写入
对于频繁写入的大数据场景,使用BioAllocCacheSpace和BioPutWithCopyFree组合,可以显著提升写入性能。
3.监控缓存命中率
定期使用BioShowCacheHitRatio监控缓存效果,根据命中率调整缓存策略和资源分配。
4.异步预加载优化
对于顺序读取的场景,使用BioLoad进行异步预加载,提前将数据加载到缓存中。
5.错误处理策略
UBS-IO提供了丰富的错误码,主要错误码包括:
| 错误码 | 含义 | 处理建议 |
|---|---|---|
| RET_CACHE_OK | 操作成功 | - |
| RET_CACHE_NOT_FOUND | Cache实例不存在 | 检查租户ID和实例状态 |
| RET_CACHE_NO_SPACE | 空间不足 | 清理缓存或扩容资源 |
| RET_CACHE_NEED_RETRY | 需要重试 | 实现重试机制 |
| RET_CACHE_PT_FAULT | 分区故障 | 检查集群状态 |
📊 实际应用示例
场景1:AI模型训练数据缓存
// 1. 初始化UBS-IO(融合模式) ClientOptionsConfig config = {0}; config.logType = FILE_TYPE; strcpy(config.logFilePath, "/var/log/ubs-io/ai_training.log"); BioInitialize(CONVERGENCE, &config); // 2. 创建缓存实例(回写模式 + 本地亲和) CacheDescriptor desc; desc.tenantId = 1001; desc.affinity = LOCAL_AFFINITY; desc.strategy = WRITE_BACK; BioCreateCache(desc); // 3. 训练过程中缓存模型参数 ObjLocation location; BioCalcLocation(1001, model_id, &location); BioPut(1001, "model_weights", weight_data, weight_size, location);场景2:大数据分析查询加速
// 1. 初始化UBS-IO(分离模式) ClientOptionsConfig config = {0}; config.logType = STDOUT_TYPE; BioInitialize(SEPARATES, &config); // 2. 创建缓存实例(透写模式 + 全局均衡) CacheDescriptor desc; desc.tenantId = 2001; desc.affinity = GLOBAL_BALANCE; desc.strategy = WRITE_THROUGH; BioCreateCache(desc); // 3. 预加载查询数据 BioLoadCallback callback = my_load_callback; BioLoad(2001, "query_data", 0, 1024*1024, location, callback, NULL);🔍 调试与监控技巧
1.资源使用监控
使用BioShowCacheResource定期监控缓存资源使用情况,及时发现资源瓶颈:
CacheResourcesDesc *nodeDesc = NULL; uint64_t nodeNum = 0; CResult ret = BioShowCacheResource(&nodeDesc, &nodeNum); if (ret == RET_CACHE_OK) { // 分析各节点资源使用情况 for (uint64_t i = 0; i < nodeNum; i++) { printf("Node %d: 读缓存使用率 %.2f%%, 写缓存使用率 %.2f%%\n", nodeDesc[i].nodeId, (float)nodeDesc[i].rCacheMemUsedSize / nodeDesc[i].rCacheMemCapacity * 100, (float)nodeDesc[i].wCacheMemUsedSize / nodeDesc[i].wCacheMemCapacity * 100); } BioFreeCacheResourcePtr(&nodeDesc, nodeNum); }2.性能调优建议
根据BioShowCacheHitRatio的监控结果调整缓存策略:
- 读缓存命中率低:考虑增加预加载或调整数据分布
- 写缓存使用率高:考虑调整淘汰策略或扩容资源
- 后端命中率高:考虑增加缓存容量或优化数据访问模式
🎯 总结
UBS-IO通过这10个关键API接口,为开发者提供了完整的分布式缓存解决方案。从基础的Cache实例创建到高级的性能优化接口,UBS-IO能够满足不同场景下的I/O加速需求。无论是AI训练、大数据分析还是其他高性能计算场景,UBS-IO都能显著提升应用性能。
核心优势:
- ✅ 支持多种缓存策略和数据亲和策略
- ✅ 提供免拷贝写入机制,优化性能
- ✅ 完整的监控和诊断接口
- ✅ 支持在线升级,保证服务连续性
- ✅ 丰富的错误处理机制
通过合理使用这些API接口,您可以充分发挥UBS-IO的性能优势,为您的应用提供高效的I/O加速服务。💪
【免费下载链接】ubs-ioUbs-io provides high-level I/O services for application-affinity global data read/write caching systems based on UB superpods.项目地址: https://gitcode.com/openeuler/ubs-io
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考