Filesystems 哪个操作系统支持高效的文件系统写屏障?

Filesystems 哪个操作系统支持高效的文件系统写屏障?,filesystems,consistency,memory-barriers,fsync,journaling,Filesystems,Consistency,Memory Barriers,Fsync,Journaling,文件系统或磁盘驱动程序是否支持文件系统修改围栏的概念,如CPU或共享内存系统中的内存围栏 围栏是一种指令,它将内存操作分开,这样在围栏事件之后的全局可见内存访问直到所有之前的访问都无法检测到 这样的功能是否可以有效地用于文件内容修改(和保留库修改)?当然,一个过于简单的解决方案是等到所有写操作都写入稳定的存储器;但是,这会阻塞应用程序,如果需要许多同步点,则效率可能会很低。此外,当一个大写操作(包括由围栏分隔的多个写操作)在完全日志记录的系统上满足相同的约束时,或者当磁盘驱动程序保证最大的写操作

文件系统或磁盘驱动程序是否支持文件系统修改围栏的概念,如CPU或共享内存系统中的内存围栏

围栏是一种指令,它将内存操作分开,这样在围栏事件之后的全局可见内存访问直到所有之前的访问都无法检测到

这样的功能是否可以有效地用于文件内容修改(和保留库修改)?当然,一个过于简单的解决方案是等到所有写操作都写入稳定的存储器;但是,这会阻塞应用程序,如果需要许多同步点,则效率可能会很低。此外,当一个大写操作(包括由围栏分隔的多个写操作)在完全日志记录的系统上满足相同的约束时,或者当磁盘驱动程序保证最大的写操作是原子的时,可能会导致许多小的单个写操作

是否可以强制文件系统驱动程序使用文件系统访问围栏进行写操作?这个概念有没有被探讨过

精密度


问题的背景不是多个进程以快速的方式访问相同的文件,而是一个进程将数据保存在数据库中,这样进程中断(甚至计算机崩溃)只会留下一个修改序列(在两个围栏之间)部分写入

我不知道您引用的“围栏”适用于“文件系统修改”的概念。在CPU中,从CPU处理指令的方式来看,指令是不可分割的:CPU无法处理一半的指令并停止。但只有一小部分写入文件才是“不可分割的”“从文件系统的角度来看。如果写入的第一部分出现在文件修改之前,FS应该如何处理其余的写入操作?也许,您想提供一些真实(非抽象)的代码来证明您的目的。@Tsyvarev实际上英特尔字符串指令是不可分割的;它们甚至是可中断的(这是例外而不是规则)。大多数指令都是不可中断的,但它们不能保证原子性:任意写入在英特尔上不是原子的。然而,这与我的问题无关。”但从文件系统“不可分割WRT”的角度来看,只有一小部分写入文件是“不可分割的”,而其他进程写入同一文件?这可以通过文件锁或简单约定来解决,并且是完全不同的Q。我不认为多个进程以冲突的方式写入相同的文件。我认为在进程停止的情况下,在大容量内存中稳定存储。也许我应该说得更清楚些!好的,你是对的:不可分割的属性与问题无关。现在我理解你的问题是在搜索
sync
/
fsync
模拟,这与。。。在什么地方?您的编辑建议您实际搜索这些函数。@Tsyvarev我希望这些函数有一个非阻塞的替代方案,如果系统不想刷新写缓存,它也不会强制系统刷新写缓存(写入缓冲区计时器尚未过期,或者驱动程序正在忙于写入其他内容,或者磁盘没有旋转,驱动程序希望保持这种状态…)。防护栏不会加速以前的写入,它表示以下写入不会出现在以前的写入之前。在日志系统中,防护栏甚至可能不会命令写入日志,而是添加日志条目以命令提交日志条目。