Build CephFS Kernel Module with Latest Codes

栏目: 服务器 · 发布时间: 5年前

内容简介:使用CephFS的时候,若需要获取较高的性能,kernel client是一定会使用到的,但它的每次更新都需要升级Linux内核,这样影响比较大,很多时候是不能接受的。其实我们可以通过拉取Linux对应版本的源码,把最新的CephFS kernel代码merge进当前系统对应版本的源码上,然后进行编译,成功后替换CephFS模块。这种方法要求两个Linux Kernel Version相差不要太大,不然代码的merge会很痛苦的,也很容易出错!

使用CephFS的时候,若需要获取较高的性能,kernel client是一定会使用到的,但它的每次更新都需要升级 Linux 内核,这样影响比较大,很多时候是不能接受的。

其实我们可以通过拉取Linux对应版本的源码,把最新的CephFS kernel代码merge进当前系统对应版本的源码上,然后进行编译,成功后替换CephFS模块。

这种方法要求两个Linux Kernel Version相差不要太大,不然代码的merge会很痛苦的,也很容易出错!

编译安装CephFS模块

下载内核源码

比如当前Linux的最新稳定版本为:4.19.1,我们使用CephFS kernel client的内核版本为:4.18.5。

则通过wget下载4.18.5和4.19.1内核代码:

# wget https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.18.5.tar.xz
# wget https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.19.1.tar.xz

解压缩

root@ceph1:~# tar -xvf linux-4.18.5.tar.xz
root@ceph1:~# tar -xvf linux-4.19.1.tar.xz

编译

根据当前机器的版本信息,修改源码的Makefile文件,并执行编译:

root@ceph1:~# uname -a
Linux ceph1 4.18.5-041805-generic #201808241320 SMP Fri Aug 24 13:22:12 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
root@ceph1:~# cd linux-4.18.5
root@ceph1:~/linux-4.18.5# vim Makefile
...
VERSION = 4
PATCHLEVEL = 18
SUBLEVEL = 5
EXTRAVERSION = -041805-generic
root@ceph1:~/linux-4.18.5# make menuconfig
root@ceph1:~/linux-4.18.5# make

上述命令或花费数个小时,请通过screen来执行。

注:根据make的输出安装依赖的packages

以后修改Ceph模块代码后,对于Ceph模块的编译,只需要执行如下命令:

root@ceph1:~/linux-4.18.5# make m=fs/ceph

安装

编译后Ceph相关的模块主要有如下几个,通过insmod安装即可:

root@ceph1:~/linux-4.18.5# insmod net/ceph/libceph.ko
root@ceph1:~/linux-4.18.5# insmod drivers/block/rbd.ko
root@ceph1:~/linux-4.18.5# insmod fs/fscache/fscache.ko
root@ceph1:~/linux-4.18.5# insmod fs/ceph/ceph.ko
root@ceph1:~/linux-4.18.5# lsmod | grep ceph
ceph                  380928  0
fscache               364544  1 ceph
libceph               315392  2 ceph,rbd
libcrc32c              16384  5 nf_conntrack,nf_nat,btrfs,raid456,libceph

注:若机器本来已经安装了ceph模块,依据上述安装module的逆序卸载即可(rmmod命令)

代码合并

Linux源码中,与ceph相关的代码有以下几个位置:

fs/ceph/
net/ceph/
drivers/block/rbd*
include/linux/ceph/

若要使用较新内核版本里的Ceph代码在4.18.5内核上编译模块,需要把对应上面的所有Ceph代码copy替换掉,然后依据上面的编译步骤开始编译;

可以在如下的链接里查看内核4.19.1和4.18.5的代码修改:

v4.19.1 diff with v4.18.5

可以看出里面ceph相关代码有很大的变动!

注意事项:

  • 因为不同内核版本里的函数名称、接口和代码都可能变化,要依据编译出错和提示修改替换后的代码,使之能够在4.18.5内核上编译通过

  • 编译成功后,使用新的ceph module替换4.18.5里的ceph module即可,要在测试机器上先测试一下,因为很可能会有kernel panic


以上所述就是小编给大家介绍的《Build CephFS Kernel Module with Latest Codes》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Head First Web Design

Head First Web Design

Ethan Watrall、Jeff Siarto / O’Reilly Media, Inc. / 2009-01-02 / USD 49.99

Want to know how to make your pages look beautiful, communicate your message effectively, guide visitors through your website with ease, and get everything approved by the accessibility and usability ......一起来看看 《Head First Web Design》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具