当字节在文件上写入0时,是否可以保持写作时间稳定



linux内核:5.1.15GLIBC:2.29G :9.1.1性病:C 17 - ofastext4fsHDD:Seagate ST1000LM014 1TB SSHD 2.5"

std::array<int, 10000> state;

i写作 nbrmsgs ints从状态到像这样打开的文件:

#include <fcntl.h>
#include <unistd.h>
persistfd=open("persist", O_CREAT | O_WRONLY | O_SYNC, S_IRUSR | S_IWUSR);

呼叫:

pwrite(persistfd, state.data(), nbrmsgs*sizeof(int), 0)

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

(

以前,我使用而不是pwrite,而无需指定偏移。因此,这将字节添加到文件末尾。

我正在监视写入周围的经过的时间,并且在我的平台上的1个微型左右,直到文件达到一定尺寸,然后经过的时间开始生长,大概是因为涉及重新安置的所有内容indodes和C库呼叫下方的所有任务(。

我将写入更改为pwrite,使用偏移0,并且文件尺寸的确保持恒定。但是,我仍然看到经过多个PWRITES之后的时间开始增长。

  1. 对我来说,由于文件不"生长",我期望经过的时间应该保持稳定?
  2. 是否有可能对ext4fs进行调整,或者对内核参数有可能使PWRITIOD到0相同的数据大小,并且随着文件的增长,观察到的经过的时间保持稳定?

,所以您说您想要它稳定。不,你不。您只认为您想要它稳定。

使其稳定:

1(获得专用的SSD

2(用 write()

写下你的东西

3(fflush()在每次测量之前。在OS必须由于内存压力而必须拆分写入的情况下,这比O_SYNC更好。O_DIRECT的使用将显得稳定,但实际上不稳定。

没有模型除了往返冲洗外盘外,稳定的时间有意义。这也是最慢的模型。决定您想要什么。

或者,如果您根本不关心崩溃,请使用Oldschool Ram驱动器。

# mknod -m 660 /dev/ram0 b 1 0将在ram0中制作一个专用的RAM磁盘,然后您可以在此后涂抹。您仍然需要使用O_DIRECT打开才能保持稳定。

最新更新