首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >即使应用程序使用O_DSYNC打开文件,NFS客户端也会聚合写入请求

即使应用程序使用O_DSYNC打开文件,NFS客户端也会聚合写入请求
EN

Stack Overflow用户
提问于 2017-08-24 04:36:08
回答 1查看 215关注 0票数 0

我正在运行一个应用程序,该应用程序使用O_DSYNC选项打开NFS挂载中的文件。然后,应用程序在循环中将6500字节的数据写入文件1000次。

我监视了客户端的行为,并注意到它以4096字节和8192字节的批处理将写入发送到底层文件系统。

根据man open,对使用O_DSYNC打开的文件的写操作将根据同步I/O数据完整性完成的要求来完成。它进一步说,

代码语言:javascript
复制
O_DSYNC provides synchronized I/O data integrity completion, meaning write operations will flush data to the underlying hardware, but will only flush metadata updates that are required to allow a subsequent read operation to complete successfully. 

我假设使用O_DSYNC时,在底层文件系统成功写入数据之前,write()调用不会返回。这不是这里正在发生的事情。NFS客户端正在缓存写入并以4k的倍数刷新它们。为何会这样呢?

请注意,我使用的是一个运行Linux4.9版的亚马逊EC2实例,页面大小为4096。

EN

回答 1

Stack Overflow用户

发布于 2017-08-24 05:48:55

设备写入只能是存储块大小的倍数:对于旧磁盘为512字节,对于许多新磁盘为4096字节。由于文件不与磁盘块对齐,这可能会导致两个磁盘块的读取-修改-写入,从而导致对设备的8k写入,即使文件写入要小得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45848862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档