我正在使用低级I / O函数“写入”以我的代码(Linux上的C语言)将一些数据写入磁盘。首先,我将数据存储在内存缓冲区中,然后在缓冲区已满时使用“写入”将数据写入磁盘。那么“写”的最佳缓冲区大小是多少?根据我的测试,更快不是越大,所以我在这里寻找答案。
进行写操作可能是文件系统块大小的倍数,因此可能会有一些优势,尤其是在就地更新文件的情况下。如果向文件中写入的块少于部分块,则操作系统必须读取旧块,合并新内容,然后将其写出。如果您快速按顺序快速写入小片段,则不一定会发生这种情况,因为更新将在内存中的缓冲区中完成,随后将刷新这些缓冲区。但是,如果您每次执行写操作都没有填充一个块(以及一个正确对齐的块:块大小的倍数,偏移量是块大小的倍数),有时您可能会触发一些低效率的操作。
传输大小的问题并不一定会随着mmap消失。如果先映射文件,然后再将memcpy一些数据映射到地图中,则将使页面变脏。该页面必须在以后的某个时间刷新:它的时间不确定。如果您制作另一个memcpy触摸同一页面的页面,则该页面现在可能已经干净了,并且您又使它变脏了。因此它被写入两次。与页面对齐的副本(页面大小的倍数)将是解决方法。
memcpy