您好,想咨询关于 NebulaGraph 结合 RocksDB io_uring 的相关问题。
当前使用 NebulaGraph 社区版 3.8,环境为裸金属服务器,Linux 内核 5.15,NVMe SSD。
已知信息:
- NebulaGraph 官方预编译包内置的 RocksDB 未启用 io_uring,网络层 RPC 使用 libevent+epoll,仅磁盘 IO 可通过替换 IOURingEnv 改造;
- 需要自行编译 RocksDB 开启
WITH_IO_URING,再重新编译 NebulaGraph 链接该自定义 RocksDB;
想请教几个问题:
- Nebula storaged 多 RocksDB 实例(多 data_path)场景,每个实例单独创建 io_uring ring,是否存在已知稳定性问题、资源泄漏风险?
- 在 Raft 复制、Snapshot、Balance 分片迁移场景,RocksDB IOURingEnv 下 WAL fsync/compaction 的错误处理逻辑,社区是否有相关踩坑案例?
- 开启 io_uring 后,除内核版本、ulimit 之外,是否有推荐的内核 sysctl 参数、RocksDB option 特殊配置?
- 是否有生产环境使用该方案的案例?该改造是否会影响 Raft 数据一致性?
负载背景:业务存在大量冷数据图扫描,block cache 命中率偏低,存在 compaction IO 瓶颈,想评估 io_uring 降低 IO 长尾延迟的收益。
谢谢!