X86/Aarch64下编译PMDK工具

✨前言:

什么是PMDK?
Intel的PMDK(‌Persistent Memory Development Kit)‌是一个库,‌旨在简化持久内存的应用开发并解决一些常见挑战。‌

PMDK,‌全称为Persistent Memory Development Kit,‌是由Intel开发的一套函数库和工具的集合,‌适用于所有的持久内存(‌厂商中立)‌,‌无论这些内存来自哪个制造商。‌它包含了一系列函数库,‌如libpmem、‌libvmem、‌libpmemblk、‌libpmemlog、‌libpmemobj、‌libpmempool、‌libvmmalloc等,‌这些库的设计目的是为了方便非易失性内存的应用开发。‌通过PMDK,‌开发人员可以更容易地利用持久内存的优势,‌如高性能、‌低延迟以及数据的持久性,‌这些特性使得持久内存成为一种介于传统内存和存储之间的新技术。‌
在这里插入图片描述

具体而言,‌PMDK中的某些库,‌如libpmemobj,‌提供了基本的事务支持,‌允许应用程序用特定的语法表示事务,‌从而将应用程序从比较困难的底层细节中解放出来。‌这种支持对于需要自己实现简单数据库系统的应用程序来说尤为重要。‌通过PMDK,‌开发人员可以更加专注于应用程序的核心功能,‌而不是花费大量时间处理底层细节。‌
此外,‌PMDK还支持Hadoop等大数据处理框架,‌通过配置PMDK库的路径和包含文件的路径,‌可以构建支持PMDK的Hadoop本地库,‌从而提高大数据处理的性能和效率。‌
持久内存开发套件 (PMDK), 前身为NVML,是持续丰富的开发库和工具的集合。这些库在 Linux 和 Windows 上进行调整和验证后,以这些操作系统的 DAX 功能(直接访问)为基础,允许应用程序访问持久内存作为内存映射文件,如SNIA NVM 编程模型所述。
在这里插入图片描述
总的来说,‌Intel的PMDK通过提供一系列函数库和工具,‌简化了持久内存的应用开发过程,‌解决了许多常见挑战,‌使得开发人员能够更加高效地利用持久内存的优势,‌无论是对于传统的应用程序开发还是对于大数据处理等高性能计算领域,‌PMDK都发挥了重要作用

🌟编译需要的一些库的路径

https://git.kernel.org/pub/scm/libs/libtrace/libtraceevent.git/
https://git.kernel.org/pub/scm/libs/libtrace/libtracefs.git/

🌟1.首先编译PMDK需要如下的packages的依赖,那就是先编译好ndctl

在这里插入图片描述

🌟2.编译环境需要如下包对应的版本,需要自己下载对应的包安装编译:

pkg-config:0.27.1
make:GNU Make 4.2.1
ninja :1.13.0.git
GCC:10.2.1(10.2.0也可)
meson:0.61.5
pandoc:2.0.6
asciidoctor:2.1.0

在这里插入图片描述

✨3.编译ndctl

🌟从GitHub上的ndctl仓库克隆代码:

git clone https://github.com/pmem/ndctl.git
cd ndctl

🌟编译

安装Meson和Ninja:
Meson依赖于Ninja构建系统来实际编译代码。请确保这两个工具都已安装(已安装忽略):

sudo yum install meson ninja-build

🌟安装lib kmod meson build的时候需要依赖这个

sudo yum search kmod-devel
sudo yum install kmod-devel

🌟 libudev是udev库的开发文件包,用于设备管理和发现。

sudo yum install systemd-devel

🌟安装libuuid-devel:

sudo yum install libuuid-devel

🌟安装json-c-devel:

sudo yum install json-c-devel

🌟安装libtraceevent 先yum search traceevent,这里X86下有对应的安装包可以直接安装,arm下要手动下载对应的源码编译

在这里插入图片描述

🌟安装traceevent提示以下错误,这是因为perf的版本不兼容,先rmove掉

在这里插入图片描述

卸载冲突的包:如果你不需要perf包,你可以尝试卸载它来解决冲突,然后再安装libtraceevent-devel。

sudo yum remove perf
sudo yum install libtraceevent-devel

🌟也可以手动安装libtraceevent

在libtraceevent项目的根目录中,创建一个名为builddir的目录来存放构建文件:

meson setup builddir

如果报如下错误
在这里插入图片描述

🌟先安装xmlto

 yum install xmlto

这个命令会设置编译环境并生成ninja的构建文件。如果你想要有不同的设置(例如,启用调试符号或选择安装路径),可以在这一步中添加相应的meson参数。

🌟切换到builddir目录并开始构建过程:

cd builddir
ninja

🌟构建完成后,安装库:

sudo ninja install

🌟安装完毕后,更新库缓存:

sudo ldconfig

🌟 确保 pkg-config 路径:

安装的库包括.pc文件,它被安装在/usr/local/lib64/pkgconfig。这个路径应该已经包含在pkg-config的搜索路径中。如果不是,你需要设置PKG_CONFIG_PATH环境变量:

export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:$PKG_CONFIG_PATH

将上述命令添加到~/.bashrc或类似的shell启动脚本文件中,以便在新的shell会话中自动设置环境变量。

🌟检查 PKG_CONFIG_PATH:

为了确保pkg-config能够找到libtraceevent,你可以运行以下命令检查:

pkg-config --libs --cflags libtraceevent

如果这个命令返回错误,说明pkg-config不能找到libtraceevent.pc文件。你需要确保在PKG_CONFIG_PATH中设置了正确的路径。

🌟 检查软件链接:

libtraceevent提供了软件链接,这些软件链接用于导向特定的库版本。确保链接正确并且没有损坏:

ls -l /usr/local/lib64/libtraceevent*

🌟 编译libtracefs (只有上面的步骤做完之后libtraceevent才能编译这个)

meson来配置构建环境:

meson setup builddir

builddir是用于存放构建输出的目录名,您可以使用任何您喜欢的名称。

🌟进入构建目录并开始构建过程:

cd builddir
ninja

🌟 ninja命令将执行实际的编译。

sudo ninja install

这将把编译生成的文件安装到它们需要去的地方。

🌟 运行 ldconfig:

运行ldconfig确保系统的动态链接器缓存了新的库路径:

sudo ldconfig

🌟设置 PKG_CONFIG_PATH:

如果pkg-config未找到新安装的libtracefs.pc文件,则需要指定正确的路径。通常,/usr/local/lib64/pkgconfig默认是在搜索路径中,但如果它不在,你可以手动添加它:

export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:$PKG_CONFIG_PATH

如果你需要这个设置在未来登陆时也有效,那么最好把它添加到你的shell配置文件(例如/.bashrc或/.bash_profile)中。
验证 pkg-config 是否可以找到 libtracefs:
通过以下命令,检查pkg-config是否可以找到libtracefs:

pkg-config --libs --cflags libtracefs

在这里插入图片描述

🌟安装asciidoctor

先下载gem(编译asciidoctor需要用到)

yum install gem

克隆asciidoctor的git仓库:

git clone https://github.com/asciidoctor/asciidoctor.git
cd asciidoctor

一旦你有了源代码,你通常可以按照仓库内的安装指南来安装它。对于Ruby Gems,这通常意味着使用gem build命令来创建一个gem包,然后可以用gem install来安装它:

gem build asciidoctor.gemspec
gem install asciidoctor-*.gem

请确保你有足够的权限来安装gem(可能需要使用sudo)。

🌟最后,验证安装是否成功:

asciidoctor --version

在这里插入图片描述

🌟安装keyutils:

sudo yum install keyutils-libs-devel

🌟安装iniparser库:

如果你的包管理器没有提供iniparser的开发包,你可能需要从源代码手动安装。这可能包括下载iniparser的源代码,然后编译和安装它。可以从它的GitHub仓库或其他地方获取源代码。

git clone https://github.com/ndevilla/iniparser.git
cd iniparser
mkdir build
cd build
cmake ..
make
sudo make install

如果上面步骤的cmake报错 可以使用下面的步骤解决
在这里插入图片描述

对于基于RPM的系统:

sudo yum install doxygen

🌟编译ndctl 进入ndctl目录

执行 meson setup builddir 报这个错
问题1:
在这里插入图片描述

首先 find /usr -name “iniparser.h”,这里看到路径/usr/local/include/iniparser/iniparser.h 路径和meson.build的路径不一致。
在这里插入图片描述

以下命令来修改路径:

sudo mkdir -p /usr/include/iniparser
sudo cp /usr/local/include/iniparser/*.h /usr/include/iniparser/

🌟构建项目:

使用ninja来实际编译项目。如果meson setup命令已经在名为builddir的目录中成功完成,则执行:

ninja -C builddir

这将编译目标项目并生成可执行程序或库文件。-C 参数指定ninja应该在指定的目录中查找build.ninja文件,这个文件是由Meson自动生成的,并且包含了编译指令。

🌟测试项目(可选):

如果ndctl提供了自动测试,你可以使用以下命令运行它们:

ninja -C builddir test

这个步骤将运行所有预定义的测试来验证编译是否正确。

🌟安装项目:

构建成功之后,如果你要安装项目到系统中,使用以下命令:

sudo ninja -C builddir install

查看版本,这样daxctl工具就安装成功了
在这里插入图片描述

✨4 编译PMDK 工具

可以看到PMDK的md里面安装要求 如下的几个包:需要先编译安装之前的ndctl和daxctl
在这里插入图片描述

问题解决:如果make 提示如下路径问题的话
在这里插入图片描述

这个问题是在 PMDK 的 make 过程中 pkg-config 无法正确找到 ndctl 的开发文件。

🌟4.1 设置 PKG_CONFIG_PATH:

由于已经安装在 /usr/lib/pkgconfig 中,通常这个路径是默认包含在 pkg-config 的搜索路径中。但为了确保,可以运行:

export PKG_CONFIG_PATH=/usr/lib64/pkgconfig:$PKG_CONFIG_PATH
```

🌟4.2 安装pandoc

sudo yum install pandoc  

安装完 pandoc 后,重新尝试编译 PMDK:
在这里插入图片描述

cd pmdk
git checkout tags/2.0.1
make clean
make
make install 

如下代表安装成功
在这里插入图片描述

如下路径可以看到daxio等工具都已经编译好。

如果运行提示这个错误可以将编译好之后的so放到/usr/lib64下面即可。
在这里插入图片描述

在这里插入图片描述

至此daxctl和pmdk下的工具都已经编译好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏天Aileft

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值