MLCacheDirect构建指南:CMake与Bazel两种方式轻松编译
MLCacheDirect构建指南CMake与Bazel两种方式轻松编译【免费下载链接】MLCacheDirectMulti-level cache pass-through acceleration solution.项目地址: https://gitcode.com/openeuler/MLCacheDirect前往项目官网免费下载https://ar.openeuler.org/ar/MLCacheDirect是一个强大的多级缓存直通加速解决方案专为高性能数据传输场景设计。本文将为您详细介绍如何使用CMake和Bazel两种构建系统来编译MLCacheDirect项目让您能够快速上手并部署这个高效的异步流水分片传输库。无论您是新手开发者还是有经验的系统工程师这份终极指南都将帮助您顺利完成构建过程。为什么选择MLCacheDirectMLCacheDirect的核心优势在于其异步流水分片传输架构能够将大数据传输按固定大小切分为多个chunk通过URMA协议高效传输并使用线程池进行任务管理。这种设计使得数据传输更加高效、可靠特别适合需要高性能数据处理的场景。 构建环境准备在开始构建之前请确保您的系统满足以下基本要求操作系统支持Linux系统x86_64或aarch64架构编译器GCC编译器构建工具CMake或Bazel依赖库URMA库liburma.so可选工具rpmbuild用于生成RPM包️ 方法一使用CMake构建推荐CMake是MLCacheDirect项目的主要构建系统提供了完整的构建、测试和打包功能。快速开始最简单的构建方式就是运行项目根目录的构建脚本# 克隆项目仓库 git clone https://gitcode.com/openeuler/MLCacheDirect cd MLCacheDirect # 赋予执行权限并运行构建脚本 chmod x build.sh ./build.sh构建脚本详解MLCacheDirect的CMake构建脚本[build.sh](https://link.gitcode.com/i/1fc2a586e60ce379938ad2bdd207f6c8)非常智能它能够自动识别系统架构x86_64或aarch64清理旧的构建产物配置CMake构建选项编译libos_transport.so动态库生成RPM安装包常用构建选项# 只运行单元测试 ./build.sh -t # 编译并生成覆盖率报告 ./build.sh --gcov-ut # 生成带覆盖率插桩的库文件 ./build.sh --gcov # 启用故障注入功能 ./build.sh --with-inject # 生成compile_commands.json用于代码分析工具 ./build.sh --bear构建目录结构执行CMake构建后项目目录结构如下MLCacheDirect/ ├── build-x86_64/ # x86_64架构构建目录 │ ├── CMakeCache.txt │ ├── libos_transport.so │ └── install/ ├── build-aarch64/ # aarch64架构构建目录 ├── output/ # RPM包输出目录 │ ├── os-transport-1.0.0-1.x86_64.rpm │ └── os-transport-devel-1.0.0-1.x86_64.rpm手动CMake构建如果您需要更精细的控制也可以手动使用CMake# 创建构建目录 mkdir build cd build # 配置项目 cmake -DCMAKE_INSTALL_PREFIX/usr \ -DCMAKE_BUILD_TYPERelease \ -DOS_TRANSPORT_BUILD_TESTSOFF \ .. # 编译 make -j$(nproc) # 安装到系统 sudo make install 方法二使用Bazel构建Bazel是Google开源的构建工具MLCacheDirect也提供了完整的Bazel支持。Bazel快速构建# 使用Bazel构建脚本 chmod x build_bazel.sh ./build_bazel.shBazel构建选项# 清理构建缓存 ./build_bazel.sh -c # 运行测试 ./build_bazel.sh -t # 调试模式构建 ./build_bazel.sh -d # 仅构建不打包RPM ./build_bazel.sh --no-rpm自定义URMA路径如果您的URMA库安装在非标准位置可以通过环境变量指定URMA_INCLUDE_DIR/opt/urma/include \ URMA_LIB_DIR/opt/urma/lib64 \ ./build_bazel.shBazel构建特点增量构建Bazel具有出色的增量构建能力缓存机制构建结果会被缓存加快后续构建速度沙箱环境确保构建的确定性和可重复性 RPM包生成与管理两种构建方式都支持生成RPM包方便系统部署。生成的RPM包构建完成后您会得到两个RPM包主包os-transport-1.0.0-1.arch.rpm包含libos_transport.so动态库开发包os-transport-devel-1.0.0-1.arch.rpm包含头文件include/os_transport.h安装RPM包# 安装主包和开发包 sudo rpm -ivh output/os-transport-1.0.0-1.x86_64.rpm sudo rpm -ivh output/os-transport-devel-1.0.0-1.x86_64.rpm验证安装# 检查库文件 ls -la /usr/lib64/libos_transport.so* # 检查头文件 ls -la /usr/include/os-transport/ # 查看包信息 rpm -qi os-transport 构建过程详解架构自动识别MLCacheDirect的构建脚本能够自动识别当前系统架构x86_64Intel/AMD 64位架构aarch64ARM 64位架构构建目录会根据架构自动命名build-x86_64或build-aarch64。依赖管理项目的主要依赖包括URMA库必须的传输协议库pthread线程支持库CMake/Bazel构建系统重要提示MLCacheDirect核心库不依赖CUDA runtime只有上层联调工具需要CUDA。编译选项说明CMake选项-DOS_TRANSPORT_BUILD_TESTS启用单元测试-DOS_TRANSPORT_WITH_INJECT启用故障注入功能-DCMAKE_BUILD_TYPE构建类型Release/DebugBazel配置--configrelease发布模式构建--configdebug调试模式构建--enable_workspace启用工作区支持 测试与验证单元测试MLCacheDirect包含完整的单元测试套件# 运行所有单元测试 ./build.sh -t # 或使用Bazel运行测试 ./build_bazel.sh -t测试内容线程池测试test_thread_pool日志模块测试test_os_transport_log_unit传输核心测试test_os_transport_unit覆盖率报告要生成代码覆盖率报告./build.sh --gcov-ut这将生成控制台覆盖率摘要HTML格式的详细覆盖率报告位于build-arch/coverage-html/ 常见问题与解决方案问题1URMA库找不到症状构建时提示找不到URMA头文件或库文件解决方案# 设置URMA路径环境变量 export URMA_INCLUDE_DIR/path/to/urma/include export URMA_LIB_DIR/path/to/urma/lib64 # 重新构建 ./build.sh问题2权限不足症状安装RPM包时提示权限错误解决方案# 使用sudo权限 sudo rpm -ivh output/os-transport-*.rpm问题3架构不匹配症状在ARM架构上构建x86_64的RPM包解决方案构建脚本会自动识别架构确保在目标架构上执行构建。问题4内存不足症状构建过程中内存耗尽解决方案# 减少并行编译任务数 make -j2 # 使用2个核心 # 或清理缓存后重试 ./build_bazel.sh -c ./build.sh 构建产物验证构建完成后建议验证生成的文件# 检查动态库 file build-x86_64/libos_transport.so # 检查符号表 nm -D build-x86_64/libos_transport.so | grep -i os_transport # 验证RPM包内容 rpm -qlp output/os-transport-1.0.0-1.x86_64.rpm 最佳实践建议开发环境使用CMake进行开发CMake提供了更好的IDE集成支持启用测试始终运行测试确保代码质量使用版本控制将compile_commands.json加入.gitignore生产环境使用Release模式生产环境使用-DCMAKE_BUILD_TYPERelease验证架构匹配确保构建架构与部署架构一致备份构建配置保存成功的构建参数持续集成自动化构建将构建脚本集成到CI/CD流水线多架构测试在x86_64和aarch64架构上都进行测试版本管理为每个版本打标签并生成对应的RPM包 项目结构说明了解项目结构有助于更好地理解构建过程MLCacheDirect/ ├── CMakeLists.txt # CMake构建配置 ├── BUILD.bazel # Bazel构建配置 ├── WORKSPACE # Bazel工作区配置 ├── include/ # 公共头文件 │ └── os_transport.h # 主要API头文件 ├── src/ # 源代码 │ ├── os_transport.c # 核心传输实现 │ ├── os_transport_thread_pool.c # 线程池实现 │ └── os_transport_urma.c # URMA封装 ├── test/ # 单元测试 ├── rpm/ # RPM打包配置 └── tools/ # 工具和示例 高级技巧自定义构建参数# 自定义编译器 CCclang CXXclang ./build.sh # 自定义安装前缀 ./build.sh sudo make install DESTDIR/opt/mlcachedirect交叉编译虽然构建脚本主要支持本地架构但您可以手动配置交叉编译# 设置交叉编译工具链 export CCaarch64-linux-gnu-gcc export CXXaarch64-linux-gnu-g # 手动配置CMake cmake -DCMAKE_SYSTEM_NAMELinux \ -DCMAKE_SYSTEM_PROCESSORaarch64 \ ..性能优化构建# 启用优化标志 CFLAGS-O3 -marchnative ./build.sh # 使用Bazel优化构建 bazel build --configopt //:libos_transport.so 构建成功验证构建成功后您应该看到类似输出✅ 编译打包成功架构x86_64版本1.0.0 主包路径output/os-transport-1.0.0-1.x86_64.rpm Devel包路径output/os-transport-devel-1.0.0-1.x86_64.rpm 下一步行动成功构建MLCacheDirect后您可以集成到项目中链接libos_transport.so库查看API文档阅读[include/os_transport.h](https://link.gitcode.com/i/a787812152f6ce420ea83795fc1db93c)头文件运行示例查看[tools/datasystem_test/](https://link.gitcode.com/i/868183e9e66a22db9249c6f4dd2695ce)目录中的示例代码性能测试测试数据传输性能 相关资源官方文档查看项目README了解详细API使用源码结构参考[src/](https://link.gitcode.com/i/551e5fe0b8be7c8654704986cfc4f2e4)目录了解实现细节测试用例查看[test/](https://link.gitcode.com/i/532588b2331d2cdda19830c3e94ba8b5)目录学习如何使用API通过本指南您已经掌握了MLCacheDirect的两种构建方法。无论是使用简单直接的CMake还是选择灵活高效的Bazel都能轻松完成项目的编译和部署。选择适合您工作流的构建方式开始体验MLCacheDirect带来的高性能数据传输能力吧【免费下载链接】MLCacheDirectMulti-level cache pass-through acceleration solution.项目地址: https://gitcode.com/openeuler/MLCacheDirect创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考