sync_fsync_fdatasync_linux

原创:linux2019/09/24发布pv:0uv:0ip:0twitter #linux

fsync, fdatasync 同步内核的页缓存到磁盘

#include <unistd.h>

int fsync(int fd);
int fdatasync(int fd);
  • fsync: 文件描述符(fd)在内核中所有的脏页同步到的磁盘,调用会被阻塞直到磁盘写入完成,能确保被修改过的块立即写入到磁盘
  • fdatasync:类似于fysnc,文件属性(st_atime,st_mtime等)不会同步到磁盘,目的是为了减少磁盘交互

与fdatasync相比fsync的性能问题#性能

fysnc 除了同步文件的修改内容(脏页),还会同步文件的描述信息(metadata、包括size、访问时间st_atime、st_mtime等),因为文件数据和metadata通常存在磁盘不同的地方,所以fsync至少需要两次I/O操作

多余的一次IO操作,有多么昂贵呢?根据Wikipedia的数据,当前硬盘驱动的平均寻道时间(Average seek time)大约是3~15ms,7200RPM硬盘的平均旋转延迟(Average rotational latency)大约为4ms,因此一次IO操作的耗时大约为10ms左右。

文件的尺寸(st_size)如果发生变化,是需要立即同步的否则OS一旦崩溃,即使文件的数据部分已同步,由于metadata没有同步,依然读不到修改的内容,最后的饿访问时间和修改时间是不需要每次同步的

相关推荐

  • 高负载定位的常用工具以及用法分析
  • centos使用ss代理的方法
  • 高大上的epoll是如何实现高效处理百万句柄
  • 微信扫一扫
    关注该公众号