首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当字节被写入文件的偏移量为0时,是否有可能保持写入时间稳定?

当字节被写入文件的偏移量为0时,是否有可能保持写入时间稳定?
EN

Stack Overflow用户
提问于 2019-07-07 19:11:47
回答 1查看 64关注 0票数 1

linux内核: 5.1.15 glibc: 2.29 g++:9.1.1STD: c++17 -Ofast ext4fs HDD: Seagate ST1000LM014 1TB SSHD2.5“

代码语言:javascript
复制
std::array<int, 10000> state;

我将nbrmsgs ints从状态写入打开的文件,如下所示:

代码语言:javascript
复制
#include <fcntl.h>
#include <unistd.h>
persistfd=open("persist", O_CREAT | O_WRONLY | O_SYNC, S_IRUSR | S_IWUSR);

呼吁:

代码语言:javascript
复制
pwrite(persistfd, state.data(), nbrmsgs*sizeof(int), 0)

这都是使用同步写入。要求是确保数据在继续之前被写入文件(即如果写入后进程崩溃,数据在文件中,但是如果内核层或硬件层失败,这不是我的问题)。

以前,我使用的是 used 而不是pwrite,而没有指定偏移量。因此,这是在将字节添加到文件的末尾。

我在监视编写过程中经过的时间,在我的平台上,它在1微米左右相当稳定,直到文件达到一定的大小,然后运行时间开始增长,大概是因为重新定位inode和C库调用下的所有任务。

我用偏移量0将写更改为pwrite,并且文件大小确实保持不变。然而,我仍然看到经过的时间开始增长,在许多pwrites之后。

  1. 对于我来说,既然文件没有“增长”,那么期望经过的时间应该保持稳定是错误的吗?
  2. 是否有可能对ext4fs或内核params进行用户级别的调整,以使写入0的页更有可能偏移相同大小的数据,并且在文件没有增长的情况下,观察到的运行时间保持稳定?
EN

回答 1

Stack Overflow用户

发布于 2019-07-07 20:17:28

所以你说你希望它稳定下来。不,你不想。你只想让它稳定下来。

为了让它稳定:

1)获得一个专用的SSD

2)用write()写你的东西

3)每次测量前的fflush()。在操作系统由于内存压力而不得不拆分写的情况下,这比O_SYNC更好。O_DIRECT的使用看起来是稳定的,但实际上并非如此。

没有任何一个模型,在稳定的时代是有意义的,除了往返冲洗磁盘。这也是最慢的模型。决定你想要什么。

或者,如果您根本不关心崩溃,那么使用老式的RAM驱动器。

# mknod -m 660 /dev/ram0 b 1 0将在ram0中制作一个专用的内存磁盘,之后您可以在上面乱写。您仍然需要使用O_DIRECT打开它才能保持稳定。

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

https://stackoverflow.com/questions/56925312

复制
相关文章

相似问题

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