gpt4 book ai didi

linux - 在多个文件和一个文件上调用 fsync 时的性能

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:30:32 25 4
gpt4 key购买 nike

我有多个线程,每个线程都接受请求,进行一些处理,将结果存储在提交日志中,然后返回结果。为了保证最多 x 秒的数据丢失,这个提交日志需要每 x 秒 fsync 一次。

我想避免线程之间的同步,这意味着他们每个人都需要有自己的提交日志而不是共享日志 - 是否有可能以一种高性能的方式定期 fsync 所有这些不同的提交日志?

这是在 Linux 上,ext4(或 ext3)

(注意:由于代码的性质,即使在正常处理过程中,线程也需要从提交日志中重新读取一些它们自己最近的数据(但从来没有其他线程提交日志数据),所以我相信它会使用共享日志是不切实际的,因为许多线程需要读取/写入它)

最佳答案

如果你只需要每隔几秒刷新一次,你还需要 fsync() 吗? IE。操作系统应该相当定期地为你做这件事(除非系统负载很重并且磁盘 I/O 供不应求)。

否则,让您的线程执行以下操作:

if (high_resolution_time() % n == 0) {
fsync();
}

其中 n 是一个值,例如3 如果 high_resolution_time() 返回返回的 Unix EPOCH 时间(以秒表示)。将使线程每 3 秒刷新一次文件。

当然,问题在于您需要更高的时钟分辨率,以避免每秒多次通过此代码段的线程不会快速连续多次刷新其文件。我不知道你使用什么编程语言,但在 Linux 上你可以使用 C获取时间:

struct timeval tv;
gettimeofday(&tv, null);
double x = (double)tv.tv_sec * (double)1000000 + (double)tv.tv_usec;
if (x % 3000000 == 0) { // fsync every 3 seconds
fsync();
}

关于linux - 在多个文件和一个文件上调用 fsync 时的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28058597/

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