主要是rocksdb报错问题
在 db_bench 基准测试工具与 BlobFS 集成执行以下语句:
vagrant@vagrant:~/rocksdb$
make db_bench SPDK_DIR=relative_path/to/spdk
或者为发布版本添加 DEBUG_LEVEL=0(需要打开 USE_RTTI)。
export USE_RTTI=1 && make db_bench DEBUG_LEVEL=0 SPDK_DIR=relative_path/to/spdk
SPDK_DIR是你spdk下载包的路径
1、make: *** No rule to make target ‘home/vagrant/spdk/lib/rocksdb/env_spdk.o’, needed by ‘librocksdb.a’. Stop.
首先去清理rocksdb make生成的文件
vagrant@vagrant:~/rocksdb$
make clean
再去清理spdk make生成的文件
vagrant@vagrant:~/spdk$
make clean
rocksdb 还有残留在spdk中,用下面的语句去查询残留文件在哪
git status --ignored | grep env_spdk
比如我自己查到的内容如下
vagrant@vagrant:~/spdk$ git status --ignored | grep env_spdk
lib/rocksdb/env_spdk.cc.d
lib/rocksdb/env_spdk.o
再去依次执行spdk的make 和 rocksbd的make clean 就ok!
2、到了db_bench的时候出现如下错误
CCLD db_bench
/home/vagrant/spdk/lib/rocksdb/env_spdk.o: In function `rocksdb::initialize_spdk(void*)':
/home/vagrant/spdk/lib/rocksdb/env_spdk.cc:714: undefined reference to `spdk_app_start'
/home/vagrant/spdk/lib/rocksdb/env_spdk.cc:726: undefined reference to `spdk_app_fini'
/home/vagrant/spdk/lib/rocksdb/env_spdk.o: In function `rocksdb::__send_request(void (*)(void*), void*)':
/home/vagrant/spdk/lib/rocksdb/env_spdk.cc:113: undefined reference to `spdk_event_allocate'
/home/vagrant/spdk/lib/rocksdb/env_spdk.o: In function `rocksdb::rocksdb_run(void*)':
/home/vagrant/spdk/lib/rocksdb/env_spdk.cc:679: undefined reference to `spdk_app_stop'
/home/vagrant/spdk/lib/rocksdb/env_spdk.o: In function `rocksdb::SpdkEnv::SpdkEnv(rocksdb::Env*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long)':
/home/vagrant/spdk/lib/rocksdb/env_spdk.cc:739: undefined reference to `spdk_app_opts_init'
/home/vagrant/spdk/lib/rocksdb/env_spdk.o: In function `rocksdb::SpdkEnv::~SpdkEnv()':
/home/vagrant/spdk/lib/rocksdb/env_spdk.cc:780: undefined reference to `spdk_app_start_shutdown'
/home/vagrant/spdk/lib/rocksdb/env_spdk.o: In function `rocksdb::fs_unload_cb(void*, int)':
/home/vagrant/spdk/lib/rocksdb/env_spdk.cc:695: undefined reference to `spdk_app_stop'
/home/vagrant/spdk/lib/rocksdb/env_spdk.o: In function `rocksdb::__send_request(void (*)(void*), void*)':
/home/vagrant/spdk/lib/rocksdb/env_spdk.cc:114: undefined reference to `spdk_event_call'
/home/vagrant/spdk/lib/rocksdb/env_spdk.o: In function `rocksdb::rocksdb_shutdown()':
/home/vagrant/spdk/lib/rocksdb/env_spdk.cc:695: undefined reference to `spdk_app_stop'
collect2: error: ld returned 1 exit status
Makefile:1238: recipe for target 'db_bench' failed
make: *** [db_bench] Error 1
这个是版本问题,我用如下版本是没有问题的
我现在版本组合是spdk (v21.04.x) + dpdk ( spdk-21.02)+isa(spdk-v2.30.0)+rocksdb( spdk-v6.10.2)
spdk (v21.04.x)
git clone -b v21.04.x https://github.com/spdk/spdk.git
dpdk ( spdk-21.02)
git clone -b spdk-21.02 https://github.com/spdk/dpdk.git
isa(spdk-v2.30.0)
git clone -b spdk-v2.30.0 https://github.com/spdk/isa-l.git
rocksdb( spdk-v6.10.2)
git clone -b spdk-v6.10.2 https://github.com/spdk/rocksdb.git