编译RocksDB

  • MacOS本机编译
  • CentOS编译

MacOS编译

编译不通过的问题

编译环境

  • MacOS
  • M1 Pro
  • gcc

报错信息

/opt/homebrew/Cellar/gcc/10.2.0_4/lib/gcc/10/gcc/aarch64-apple-darwin20/10.2.1/include/arm_acle.h: In function 'int __rndr(uint64_t*)':
/opt/homebrew/Cellar/gcc/10.2.0_4/lib/gcc/10/gcc/aarch64-apple-darwin20/10.2.1/include/arm_acle.h:201:34: error: invalid conversion from 'uint64_t*' {aka 'long long unsigned int*'} to 'long unsigned int*' [-fpermissive]
  201 |   return __builtin_aarch64_rndr (__res);
      |                                  ^~~~~
      |                                  |
      |                                  uint64_t* {aka long long unsigned int*}
<built-in>: note:   initializing argument 1 of 'int __builtin_aarch64_rndr(long unsigned int*)'
/opt/homebrew/Cellar/gcc/10.2.0_4/lib/gcc/10/gcc/aarch64-apple-darwin20/10.2.1/include/arm_acle.h: In function 'int __rndrrs(uint64_t*)':
/opt/homebrew/Cellar/gcc/10.2.0_4/lib/gcc/10/gcc/aarch64-apple-darwin20/10.2.1/include/arm_acle.h:207:36: error: invalid conversion from 'uint64_t*' {aka 'long long unsigned int*'} to 'long unsigned int*' [-fpermissive]
  207 |   return __builtin_aarch64_rndrrs (__res);
      |                                    ^~~~~
      |                                    |
      |                                    uint64_t* {aka long long unsigned int*}
<built-in>: note:   initializing argument 1 of 'int __builtin_aarch64_rndrrs(long unsigned int*)'

解决问题

百思不得其解 最后终于在google搜到了和我一样的问题
https://githubmemory.com/repo...
可能真的是gcc导致的问题
换成clang后,问题解决。

运行db_bench被终止的问题

编译成功后 运行db_bench时出现以下问题
警告关闭自动compact

而如果更改代码中该变量为true

出现新报错

怀疑MacOS可能文件系统不支持
转而使用CentOS编译

CentOS编译

配置信息

  • CentOS 7.4
  • 1核2g丐版阿里云

编译经过

经历了必不可少的升级cmake,安装gflags、snappy等一部分依赖准备步骤后开始编译
可能是由于配置的问题,编译的速度实在不尽如人意,保守估计编译了大概两个小时,还没有编译完...... 和在自己的Mac上的编译速度没法比。

在CentOS上编译通过后 运行时出现了一模一样的问题
应该不是系统的问题,怀疑是db_bench运行参数的问题。
可能是默认的参数太大了,配置跟不上。

不知道是不是和这个大哥遇到的问题相似
https://discuss.nebula-graph....

更改参数后进行benchmark,可成功运行

简单的benchmark尝试

  1. 创建数据库并填入一些数据(fillseq)
    ./db_bench --benchmarks="fillseq"
    获得更多的指标
    ./db_bench --benchmarks="fillseq,stats" --statistics
  2. 读数据
    ./db_bench --benchmarks="readrandom" --use_existing_db
    合并写和读操作
    ./db_bench --benchmarks="fillseq,readrandom,readseq"
03-06 00:00