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之后的时间开始增长。
- 对我来说,由于文件不"生长",我期望经过的时间应该保持稳定?
- 是否有可能对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
打开才能保持稳定。