GHT*_*nes 8 memory ssd hard-drive cache windows-10
我有一个 Windows 10 Professional 工作站,用于模拟印模中的材料流动。我使用的 FEA 软件为我运行的每个模拟创建了 50-100GB 的大型数据库文件。将这些文件复制到旋转媒体进行存储似乎没有利用该系统在传输时拥有的 RAM 量,快速启动一两秒钟,然后下降到两个 RAID0 7200RPM 磁盘的 300 MB/s 的本机传输速度(171-342 秒)。这些文件来自两个 1.2TB Intel 750 PCIe NVMe SSD 上的两个 600GB 分区的软件 RAID0,因此读取性能不是问题。该系统在带有 EBM 的 2200VA UPS 上,并每晚备份到我们的存储服务器,因此无需担心数据丢失。
我想知道的是:
如果我可以调整 Windows 10 的缓存设置,以 4GB/s(12-25 秒)的速度将整个 50-100GB 文件读入 RAM,那么两台 Intel 750 就能够做到,然后将它们透明地写入磁盘。我的印象是内置的 Windows 功能“磁盘缓存”能够做到这一点,但 Windows 中的一些默认缓存大小设置将缓存限制为大约 5GB(因此在开始时速度很小)。我不认为这个光点来自目标驱动器上吝啬的 128MB 缓存,因为“修改后的”物理内存使用量在传输的第一秒左右确实增加了约 5GB。在传输对话框消失后,可以看到 5GB 正在写入磁盘。RAM 使用量随着 RAID0 中两个 7200RPM 驱动器的速度而减少。一旦完成,您可以看到磁盘活动变为零,RAM 利用率恢复正常。这告诉我磁盘缓存至少可以工作,最多只限制为 5GB。
系统可以使用 50-100GB 的可用 RAM 来进行此传输,因为模拟通常最多只使用 80GB 的 RAM,并且模拟直到模拟的最后阶段才使用该数量的 RAM。
我有一台 Dell Precision T7910 工作站,其规格如下:
2P Xeon E5-2687W v4
256GB LRDIMM ECC DDR4 2400MHz
Quadro M4000
x2 Intel 750 1.2TB PCIe NVMe, one boot, 600GB RAID0 Two Partitons
x2 WD Gold 8TB in software RAID0 on SAS 12 GB Ports (128MB Cache)
Eaton 5PX 2200 IRT 240V UPS
Windows 10 Pro 1703 - System is old enough to not have Windows 10 Pro for Workstations
Run Code Online (Sandbox Code Playgroud)
我尝试过的:
Checked/Enabled: "Enable write caching on the device." - On each Disk
Checked/Enabled: "Turn off Windows write-cache buffer flushing on the device." - On each Disk
Made sure Superfetch service is running (for whatever good that does).
Moved away from built-in hardware RAID, as there is NO cache anyway.
Run Code Online (Sandbox Code Playgroud)
我研究了其他具有类似问题的主题,并遇到了另一个提到“CacheSet”工具的旧线程:
这适用于我的用例还是我应该继续寻找?
我对 Windows 平台上的磁盘缓存如何工作的理解是否正确,或者它的运行方式是否与我预期的不同?我只是在寻找对主内存的写缓存,使用可能高达 100GB 的 RAM,没有别的。
感谢您的帮助!欢迎任何建议。
编辑: 以管理员身份运行该 cacheset.exe 软件报告“663732 KB”的“峰值大小”,这似乎太小(648MB?)。只是不确定我想提交更改此设置并可能弄乱这个生产系统。我一直遇到的限制大约是 5GB。
双重编辑: 我修改了似乎实际缓存的明显 GB。关键是查看“修改后的物理内存”并在传输开始时看到 ~5GB 的“上限”。仍然希望将其增加到 100GB。
再次感谢你!
更大的缓存不会有帮助,对于任何标准文件复制应用程序都没有帮助。
无论 Windows 文件缓存有多大,在所有数据写入目标之前,没有任何健全的文件复制工具会关闭复制任务的输入文件(允许您删除它们)。即使整个输入数据碰巧已被读入缓存也是如此。
原因是缓存中的数据不安全——它随时可能消失。高速缓存使用的任何 RAM 自从磁盘读取以来未曾修改过,都将被内存管理器视为可丢弃。也就是说,如果其他东西需要 RAM,则可以随时从高速缓存中获取高速缓存使用的 RAM 并“重新利用”,即提供给其他东西。当然可以 - 毕竟,不应该有任何数据只存在于缓存中。(除非它在从磁盘读取后被修改过。在这种情况下,它会自动排队等待写回,这将在四秒内发生;在写回完成之前它不能被重新利用。)
因此,使用标准复制程序,您将必须等待旋转磁盘写入数据,然后才能删除源文件 - 无论缓存中缓冲了多少。
请注意,复制程序(或任何其他应用程序)甚至无法查明缓存中是否有某些内容。没有这样的界面。即使存在,信息在检索时(甚至在应用程序查看它之前)也会被视为“过时”。文件缓存应该自动工作,对应用程序透明,透明的部分原因在于它的控件很少。
这样想:您需要结果的安全中间副本 - 在功能上相当于不同目录中源文件的另一个副本,甚至可能是一个单独的驱动器号,然后才能安全地删除原始文件。Windows 文件缓存永远不会给你这些。即使 Windows 确实决定将原始文件全部放入文件缓存中(这不太可能),文件缓存也不会提供此信息。
(您可能想知道“那么它有什么好处呢?”文件缓存的主要目标是更快地重复访问大量小文件(和文件系统元数据)。它做得很好。)
超级抓取
TL,DR 版本:SuperFetch 也不给你这个。
您对 SuperFetch 表达的怀疑是正确的。虽然 SuperFetch 在它试图做的事情上是有效的,但它对这种情况没有帮助。SuperFetch 的作用是跟踪经常访问的文件(例如每次启动时),并尝试在需要之前将它们读入 RAM。
如果您想总体了解 Windows 缓存,这种区别很重要。Windows 文件缓存(这就是我在上一节中描述的)是反应性的,这意味着它永远不会缓存任何内容,直到程序实际尝试读取它。自第一个版本 (NT 3.1) 以来,它一直属于 Windows NT 系列。
SuperFetch 是一个独立的机制,最初是随 Vista 添加的。它是主动的,尝试预取过去经常访问的内容。
SuperFetch 将其 RAM 与 Windows 文件缓存分开管理。SuperFetch 使用 Windows 待机页面列表上的“较低优先级”页面 - 有趣的是,它只是将它们保留在该列表中,因此它们仍然是“可用”RAM 的一部分。(因此,在所有其他条件相同的情况下,在未启用 SuperFetch 的情况下,您不会注意到“可用”RAM 的差异,但您会注意到报告的“缓存”数量的差异。)分配给文件缓存的 RAM 是在工作集中,因此如果需要的话,需要更长的时间来重新调整用途。由于这种设计,SuperFetch 缓存比 Windows 文件缓存更快地“丢弃”,因此它不会为您提供任何内容的安全临时副本,就像文件缓存一样。
所以,你可以做什么?
为了解决您的问题,我会寻找专用硬件。也许购买一个不太昂贵或快速的 SSD(例如 120 GB),并将数据从 SSD 阵列复制到该 SSD,然后从那里复制到硬盘驱动器。唉,这意味着在所有数据都复制到临时磁盘之前您无法开始写入硬盘,因此这将比您现在所做的花费更长的时间。但源数据会更快释放。
一个更简单的想法是获取更多硬盘并将它们放入更大的条带集中以提高写入吞吐量。
一款了解数据结构的专用复制程序可能会有所帮助。
顺便说一句,我希望您的 FEA 软件在创建数据集时使用映射文件访问 - 它比传统的读/写调用快得多。
| 归档时间: |
|
| 查看次数: |
8631 次 |
| 最近记录: |