Psy*_*eek 12 windows-7 hard-drive hard-drive-cache
在 Windows 7 中,使用设备管理器,调出磁盘的属性,然后转到策略选项卡,有 2 个开关项。写缓存,这不是问题。
和
[X] 关闭设备上的 Windows 写入缓存缓冲区刷新 <--- 仅此一项!
Microsoft 在该项目的选项卡上放置了免责声明。“为防止数据丢失,除非设备有单独的电源,允许设备在断电时刷新其缓冲区,否则不要选中此复选框。”
简单来说,这对文件写入、文件保存、文件复制有什么影响?
1. 改变偏执程序的写操作:( 事实或虚构)
它是否改变了强制缓存刷新发生的程序的写刷新工作方式?有些程序非常专注于完成写入,而没有猜测,这些程序是否能够继续保护性写入,或者这些程序是否也会发生这种变化?
2. 受影响的计划类型:
变更会或不会影响哪些类型的行动/计划?类型,一些程序流,一些可以快速写出,一些是连续的,一些是保护性的(或您可以用简单术语定义的任何其他类型)。
3. 你有没有看到任何东西,甚至是一个基准:
如果设置是打开的,写作中有哪些可观察到的变化?任何观察到的行为变化的松散示例。或观察到行为没有变化?
4.什么是holdup或delay:
我们知道大多数计算机上的这些动作中的大多数都非常快,数据最终会被写入。相对于驱动器的速度,时间量是否重要?
就我的问题而言,存在的风险不是问题之一,如果你想覆盖它,它不会妨碍。
“写入缓存缓冲区刷新”是什么意思几乎是一个骗局,但该链接适用于不同的操作系统。尽管 A 有一些 info ,但即使链接中使用的术语也不相同。它也没有回答用户想知道的最重要的事情,我试图在这里概述。
小智 9
你在第一个问题中的断言是虚构的。Windows API调用,如将仍然确保数据得到所有的出路在物理介质,即使写入缓冲区冲洗禁用。因此,“安全”并且知道它们在做什么的程序会很好。调用如在.NET等最终调用这个API。FlushFileBuffers()
FileStream.Flush()
在不FlushFileBuffers()
直接调用的情况下执行大量磁盘 I/O 的程序或最终调用它的任何帮助程序 API,将看到最显着的性能提升。例如,如果您正在运行非必要的 I/O,如果数据丢失也没关系,例如 BOINC(如果丢失,您只需重新下载文件或尝试重新计算计算),您可以避免调用FlushFileBuffers()
,并且只需调用一个 API,例如WriteFile()
-- 数据将被缓冲以进行写入,但实际上它可能不会被写入很长时间,例如文件描述符关闭时或程序退出时。不幸的是,如果系统崩溃(例如 BSOD),所有数据也有可能丢失,因此真的很重要如果您正在处理您确实调用的任何类型的有价值/不可替换的数据FlushFileBuffers()
,无论是否启用缓冲区刷新!否则一个简单的驱动程序错误(例如在您的图形驱动程序中)可能会导致您丢失大量数据。
找不到任何基准,但是您会在符合上述第二项描述的程序中注意到更多。
将数据同步到磁盘实际上并没有那么快,尤其是在紧密循环中频繁完成的情况下。默认情况下,如果我从阅读 Windows Internals 书籍中正确回忆起,NTFS 默认情况下每5 秒将所有脏文件系统缓冲区同步到磁盘。这显然是稳定性和性能之间的一个不错的权衡。频繁同步数据的问题在于它使硬盘驱动器进行大量查找和写入。
考虑以下伪代码:
1: seek to a certain block (1)
2: write a couple megabytes of data into blocks starting at (1)
3: wait 2 seconds
4: seek to another block (2)
5: write some more megabytes of data into blocks starting at (2)
6: seek back to block (1)
7: write some more megabytes of data into blocks starting at (1)
8: wait 10 minutes
9: seek to block (1)
10: write some megabytes of data into blocks starting at (1)
11: wait 5 seconds
12: seek to block (2)
13: write some megabytes of data into blocks starting at (2)
14: explicit call to FlushFileBuffers()
Run Code Online (Sandbox Code Playgroud)
启用自动 5 秒缓冲区刷新:
具有自动5秒缓冲冲洗掉(在你的问题的复选框的效果):
考虑到一个繁忙的系统每秒可能会经历数百到数万次写入文件,这对性能来说非常有用,尤其是在传统的旋转硬盘上(在 SSD 上则不那么令人印象深刻)。一般而言,RAM 比硬盘快 20 倍,尽管 SSD 的差距较小。
他们说你应该使用备用电池的原因是你不希望在 RAM 中缓冲 35 分钟的写入数据,这些数据没有写入磁盘仅仅因为你的程序员懒惰并且没有调用FlushFileBuffers()
,然后有电源故障。当然,备用电池并不能保护您免受导致蓝屏死机的驱动程序错误......
归档时间: |
|
查看次数: |
3635 次 |
最近记录: |