gpt4 book ai didi

rocksdb - 我是否正确地强制 RocksDB 使用 fsync? fsync() 和 msync() 均未在 strace 中显示

转载 作者:行者123 更新时间:2023-12-02 18:40:50 26 4
gpt4 key购买 nike

我通过 C API 使用 RocksDB。

我有一个测试程序,它打开数据库,执行 1,000 次写入(收集启动写入和回调之间的计时数据),执行 1,000 次读取,然后关闭。

这有效。平均写入时间约为 1 毫秒。

我修改了测试程序以通过此打开写入同步

rocksdb_writeoptions_set_sync(wri_u, 1);

然后再次运行。平均写入时间约为 8 毫秒。

到目前为止,一切顺利。

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

非同步程序显示 4 次 fsync() 调用、2 次 fdatasync() 调用和 0 次 msync() 调用。合理。

...但是程序的同步版本显示相同的 4、2 和 0。奇怪!奇怪!令人担忧!

同步版本确实显示了与非同步版本相比的 2 个有趣的变化:(i) 每次写入 2 次调用 nanosleep(),(ii) mmap() 花费的时间增加了 80%。

一个奇怪的理论是,也许 msync() [或其替代品]实际上是用 nanosleep() 实现的?

这是在桌面 Linux 16.04 上

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 中显示

谢谢。

最佳答案

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

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

关于rocksdb - 我是否正确地强制 RocksDB 使用 fsync? fsync() 和 msync() 均未在 strace 中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53617068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com