【发布时间】:2011-12-04 07:23:39
【问题描述】:
我有一个客户端节点将文件写入另一个节点上的硬盘(实际上我正在写入并行 fs)。
我想了解的是:
当我write()(或pwrite())时,write 调用究竟何时返回?
我看到了三种可能性:
write在客户端对 I/O 操作进行排队后立即返回:
在这种情况下,write可以在数据实际离开客户端节点之前返回(如果您正在写入本地硬盘驱动器,则写入调用采用延迟写入,其中数据只是排队等待写入。但这是否也会发生当您写入远程硬盘时?)。我写了一个测试用例,在其中我将一个大矩阵(1GByte)写入文件。没有fsync,它显示出非常高的带宽值,而使用fsync,结果看起来更真实。所以看起来它可能正在使用延迟写入。write在数据传输到服务器缓冲区后返回:
现在数据在服务器上,但驻留在其主存储器的缓冲区中,但尚未永久存储在硬盘驱动器上。在这种情况下,I/O 时间应该以通过网络传输数据的时间为主。write在数据实际存储到硬盘后返回:
我敢肯定,默认情况下不会发生这种情况(除非您编写的文件非常大,这会导致您的 RAM 被填满并最终被清除等等......)。
另外,我想确定的是:
是否会出现程序在没有任何数据实际离开客户端节点的情况下终止的情况,这样延迟、带宽和硬盘驱动器带宽等网络参数根本不包含在程序的执行时间中?考虑到我们不做fsync 或类似的事情。
编辑:我正在使用 pvfs2 并行文件系统
【问题讨论】:
-
哪个网络文件系统?规则在文件系统中,系统管理员可以在 1、2 和 3 之间进行选择。
-
我正在写入 pvfs2 并行文件系统