首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我是否正确地强迫RocksDB使用fsync?fsync()和msync()都没有显示在strace中。

我是否正确地强迫RocksDB使用fsync?fsync()和msync()都没有显示在strace中。
EN

Stack Overflow用户
提问于 2018-12-04 16:10:37
回答 1查看 462关注 0票数 3

我通过C使用RocksDB。

我有一个测试程序,它打开一个数据库,执行1,000次写入(从写开始到回调之间收集定时数据),执行1,000次读取,并关闭。

这个很管用。写一篇文章的平均时间大约是1ms。

我修改了测试程序,通过以下方式打开写同步

代码语言:javascript
运行
复制
rocksdb_writeoptions_set_sync(wri_u, 1);

然后再运行一次。写一篇文章的平均时间大约是8ms。

到现在为止还好。

但是,我随后在两个版本的程序上运行strace,以验证fsync()或fdat异步()或msync()是否正在被调用。

非同步程序显示fsync()、fdatasync()和msync()的4个调用。合情合理。

...but程序的同步版本显示相同的4、2和0。奇怪!令人惊讶!担心!

同步版本确实显示了与非同步版本相比的两个有趣的增量:(i)每次写2次对nanos休眠()的调用,(ii) mmap()所花费的时间增加了80%。

我的另一个理论是,也许msync()或者是它的替代品实际上是以Nanos休眠()来实现的?

这是在桌面Linux 16.04上

代码语言:javascript
运行
复制
uname -a

Linux mithril 4.4.0-139-generic #165-Ubuntu SMP Wed Oct 24 10:58:50 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

不管怎么说,我的问题是,根据主题:

,我是不是强迫RocksDB使用fsync?因为fsync()和msync()都没有显示在strace中。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-12-05 22:19:18

是的,这是打开fsync()的正确方法。

问题是strace必须与-f标志一起使用,以跟踪新线程中的系统调用.RocksDB在其他线程中执行所有同步操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53617068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档