How to build Milvus v2.3.4 arm image to support ky10 sp3 #30810
Ghostbaby
started this conversation in
Show and tell
Replies: 2 comments
-
Thanks for the update! We will update this document into milvus official docuemnt |
Beta Was this translation helpful? Give feedback.
0 replies
-
请问下这个对编译环境的架构有要求吗?必须是arm架构的环境编译吗? |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
ubuntu 20.04
安装 cmake
安装依赖包
安装 conan
安装 GO 1.80
下载源码
git clone https://github.com/milvus-io/milvus.git git checkout v2.3.4 cd ./milvus
检查 OS PAGESIZE
ky10 SP3 操作系统 PAGESIZE 为 65536 即 64KB。
修改 MILVUS_JEMALLOC_LG_PAGE 配置
MILVUS_JEMALLOC_LG_PAGE
变量的主要作用是在编译 jemalloc 时指定大页面(large page)的大小。jemalloc 是一个内存分配器,被设计来提高应用程序在多线程环境下的性能和效率。通过指定大页面大小,可以优化内存的管理和访问,从而提高性能。大页面支持允许操作系统以较大的内存块来管理和分配内存,减少页面表项的数量,从而减少了页面表查找的时间,提高了内存访问的效率。这在处理大量数据时尤其重要,可以显著减少页面错误(page faults)和TLB(Translation Lookaside Buffer)缺失,提高应用程序性能。
在 ARM64 架构上,不同的系统可能支持不同大小的页面,如 4KB 和 64KB。
MILVUS_JEMALLOC_LG_PAGE
的设置允许开发者为目标平台定制 jemalloc 的编译,以确保它能够有效地在不同页面大小的系统上运行。通过指定--with-lg-page
配置选项,可以确保 jemalloc 在管理内存时利用了系统支持的最优页面大小。例如,如果一个系统支持 64KB 的页面大小,通过将
MILVUS_JEMALLOC_LG_PAGE
设置为对应的值(2的幂次方值,64KB即为2的16次方,因此值为16),jemalloc 能够以 64KB 为单位来分配和管理内存,这可以提高在该系统上运行的应用程序的性能。修改 make 配置文件,文件目录为:
./milvus/scripts/core_build.sh
,修改一下配置:arch=$(uname -m) CMAKE_CMD="cmake \ ${CMAKE_EXTRA_ARGS} \ -DBUILD_UNIT_TEST=${BUILD_UNITTEST} \ -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -DCMAKE_CUDA_COMPILER=${CUDA_COMPILER} \ -DCMAKE_LIBRARY_ARCHITECTURE=${arch} \ -DBUILD_COVERAGE=${BUILD_COVERAGE} \ -DMILVUS_GPU_VERSION=${GPU_VERSION} \ -DMILVUS_CUDA_ARCH=${CUDA_ARCH} \ -DEMBEDDED_MILVUS=${EMBEDDED_MILVUS} \ -DBUILD_DISK_ANN=${BUILD_DISK_ANN} \ + -DMILVUS_JEMALLOC_LG_PAGE=16 \ -DUSE_ASAN=${USE_ASAN} \ -DUSE_DYNAMIC_SIMD=${USE_DYNAMIC_SIMD} \ -DCPU_ARCH=${CPU_ARCH} \ -DINDEX_ENGINE=${INDEX_ENGINE} " if [ -z "$BUILD_WITHOUT_AZURE" ]; then CMAKE_CMD=${CMAKE_CMD}"-DAZURE_BUILD_DIR=${AZURE_BUILD_DIR} \ -DVCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET} " fi CMAKE_CMD=${CMAKE_CMD}"${CPP_SRC_DIR}"
在 jemalloc 中使用
-DMILVUS_JEMALLOC_LG_PAGE=16
这个编译选项设置为16的原因是因为它指定了“large pages”的大小为2的16次方字节,即 216=65536216=65536 字节或64KB。这个值是为了优化内存管理和提高性能而设定的,特别是在那些支持或优先使用大页面(large page)来减少页表管理开销的系统上。在编译jemalloc时指定
-DMILVUS_JEMALLOC_LG_PAGE=16
意味着告诉jemalloc在进行内存分配时假设系统的大页面大小为64KB。这样,jemalloc可以更有效地与操作系统的内存管理器协同工作,利用大页面来优化性能。这对于确保在具有不同默认页面大小的系统上获得最佳性能非常重要,尤其是在那些可能由于硬件或系统配置不同而有不同内存管理需求的环境中。构建镜像
修改Dockerfile 如下:
构建语句:
docker build -t ghostbaby/milvus:v2.3.4_arm64 .
校验镜像:
docker run ghostbaby/milvus:v2.3.4_arm64 milvus run proxy
Beta Was this translation helpful? Give feedback.
All reactions