首页 > 解决方案 > 较大缓冲区的 C write() 吞吐量不一致

问题描述

我写了一个小程序来测量 c write() 调用的系统时间。我一直将缓冲区附加到文件,直到它达到文件大小。但是对于两种不同的缓冲区大小,我得到的数字截然不同。这是一个片段 -

case#1:
char buffer1[] = malloc(4* 1024);
for(int i=0; i< 1048576; i++){
    int w = write(outputfile, buffer1, sizeof(buffer1));
}

case#2:
char buffer2[] = malloc(1024* 1024);
for(int i=0; i< 4096; i++){
    int w = write(outputfile, buffer2, sizeof(buffer2));
}

您可以看到程序将 1048576x4kB = 4096x1024kB = ~4096 MB 的数据写入文件的两种情况。

在我的机器(8 gig ddr3 ram,核心 i7,240gb ssd)中,case#1 需要 14.96 系统时间才能完成,吞吐量约为 274 MB/s。

而 case#2 需要 0.9 秒的系统时间来完成,给我一个大约 4551 MB/s 的吞吐量。

我对其他一些缓冲区大小进行了一些中间运行,它们也产生了高度变化的数字。

我知道更大的缓冲区大小意味着对 write() 函数的调用次数更少。但是,不是每次调用都应该花费更长的时间,并且最终完成写入文件所需的总时间应该相同,而不管缓冲区大小如何?为什么不同缓冲区大小的吞吐量变化如此之大?

这是程序:https ://drive.google.com/file/d/1Bj_CnO8DqFrOO3WwbsZbzFYjHLijTW7A/view?usp=sharing

标签: fileiobenchmarkingwrite

解决方案


推荐阅读