· linux kernel module centos

Build a kernel module on CentOS

발단

bcache (Linux kernel block layer cache) 를 적용하려고 알아보니 CentOS 7 의 커널은 bcache module 이 disabled 였다. 그래서 kernel source 를 받아서 bcache module 을 build 시도했다.

경험하면 할 수록 CentOS 는 서버환경에서 별로이다. - Debian 추천!! :)

Build 환경 구축

required packages 설치
# yum install rpm-build redhat-rpm-config asciidoc hmaccalc perl-ExtUtils-Embed pesign xmlto \
              audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel \
              ncurses-devel newt-devel numactl-devel pciutils-devel python-devel zlib-devel
kernel source 다운로드

http://vault.centos.org/7.N.YYMM/updates/Source/SPackages/ 에서 kernel-$(uname -r).src.rpm 파일을 다운로드 및 설치한다. 설치가 되면 rpmbuild 디렉토리 이하에 관련 files 이 복사되어 있다.

# rpm -i http://vault.centos.org/7.2.1511/updates/Source/SPackages/kernel-3.10.0-327.18.2.el7.src.rpm 2>&1 | grep -v exist
# cd ~rpmbuild/SPECS
# rpmbuild -bp --target=$(uname -m) kernel.spec
# cd ~rpmbuild/BUILD
module build

edit .config # cd ~rpmbuild/BUILD/kernel-3.10.0-327.13.1.el7/linux-3.10.0-327.13.1.el7.x86_64 # vim .config

.config … CONFIG_BCACHE=m …

build

# make modules_install SUBDIRS=drivers/md/bcache
// modules_install: bcache.ko 복사,depmod -a 수행

# modinfo bcache
filename:       /lib/modules/3.10.0-327.13.1.el7.x86_64/kernel/drivers/md/bcache/bcache.ko
author:         Kent Overstreet <kent.overstreet@gmail.com>
license:        GPL
license:        GPL
author:         Kent Overstreet <koverstreet@google.com>
rhelversion:    7.2
srcversion:     744AC1548F61C54B1445EF6
depends:
vermagic:       3.10.0 SMP mod_unload modversions
모듈 적재
# modprobe bcache
insmod: error inserting 'bcache.ko': -1 Invalid module format

# dmesg
...
bcache: no symbol version for module_layout

모듈 build 할때 signing 이 안되어서 발생하는 문제. (signing 하는 방법은 추후에 업데이트 할것!!)

일단은 –force 으로 해결!!

# modprobe -f bcache
# lsmod | grep bcache
bcache                209287  0

적용후

동일한 조건에서 dm-cache 와 bcache 를 fio 로 시험을 해보았다. 결과는 dm-cache 가 random read, sequential read 가 월등히 빨랐다.

CentOS 에서 bcache 모듈을 제외한게 dm-cache 가 좋다고 판단해서 일까…

참고