【问题标题】:emulating a physical disk to speed up execution?模拟物理磁盘以加快执行速度?
【发布时间】:2010-11-24 06:30:02
【问题描述】:

我们有一个命令行 exe,它从文本文件中获取输入并生成输出文本文件。它用于复杂的工业模拟。

这个 exe 的源代码早已不复存在。现在很容易创建一个 .NET 包装器来控制此 exe 的执行并通过 Web 服务与外部应用程序链接。

不幸的是,一个新的要求是在这个黑盒模型上运行优化。现在有多种方法可以执行黑盒优化,但它们都需要调用可执行文件数千(数百万?)次。很明显,基于磁盘的文本文件的创建和解析是模拟过程的瓶颈。

无论如何我可以欺骗这个可执行文件不写入物理磁盘吗?如果我们在 Unix 上,我想管道可以解决问题,但我们的部署服务器是 Windows Server 03。

我突然想到 ramdrive 可能会解决这个问题,但自 MS-DOS 6 以来我还没有玩过其中一个。有什么值得一看的商业产品吗?有人对通过代码模拟物理驱动器有任何其他想法吗?我们在 .NET 3.5 上。

【问题讨论】:

  • 如果您已经知道磁盘访问是瓶颈,并且您知道这是给定的,为什么要优化您没有源的可执行文件开头的代码?
  • 我不想优化可执行文件,我想优化可执行文件实现的模型。即使模型未知,您仍然可以使用基于梯度下降的奇特技术来尝试估计参数和最优解空间。无论如何,这不是辩论的主题。我在这里询问如何模拟磁盘访问。
  • 您的输入/输出文件有多大?缓存磁盘控制器可能是答案...
  • 文件一点都不大,我们说的是3或4个文件,总共不到50KB。不幸的是,我们无法访问服务器,因此硬件解决方案是不可能的。
  • Microsoft 提供了适用于 Windows 2000 的 RAMdisk 驱动程序(包括源代码)。 support.microsoft.com/default.aspx?scid=kb;en-us;Q257405 不确定它是否会在 2003 下运行。

标签: device-emulation ramdisk


【解决方案1】:
【解决方案2】:

如果您在 Vista 上运行,commercial Ramdisk product 可能适合您。如果您的系统已经使用了大部分内存,则可能需要 x64 版本,以确保您最终不会进行过多的页面交换。

另一种选择是在 15000 RPM 磁盘或 SSD(固态磁盘)上花费一些现金,尽管这会比 RAM 磁盘慢。

尽管从长远来看,对处理工具进行逆向工程并从头开始重写以避免瓶颈可能会更便宜。

【讨论】:

  • 我们在一家国有企业中运营。访问或修改硬件不是一种选择。出于测试目的,我们的应用程序还必须与 VM 兼容。关于逆向工程 - 黑盒优化是该过程的一部分。
【解决方案3】:

在 Windows 中也可以进行管道输出 - 如果可执行文件仅生成标准输出的输出,您可以使用它。

如果它实际写入文件:由于 Windows 缓存文件系统写入,我可以想象简单地写入,然后删除小文件几乎与 ramdisk 一样快。您是否真的尝试过以现实的速度运行程序,删除所有运行后的输出?如果您密切关注 CPU 使用率和磁盘队列,您应该会知道普通的旧磁盘缓存是否足够。

【讨论】:

  • 与在 unix 上的方式相同:例如尝试dir | more。基本上,如果您的程序被编码为直接写入磁盘,这不是一个选择。
  • 不幸的是,情况就是这样。如果我们有源代码,我们根本不会写入磁盘。
【解决方案4】:

如果您在虚拟机中运行它,其虚拟磁盘的缓存是主机操作系统的责任...这意味着,您可以在虚拟机内或多或少的任何东西上运行您的 Windows 服务器,并获得一个额外的层的缓存。这在环境中有效吗?

【讨论】:

  • 有趣的方法,但我们只能访问虚拟机。主机操作系统超出范围。
  • 我本来应该提到我们的部署服务器已经是一个虚拟机了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-02
  • 2020-02-06
  • 1970-01-01
  • 2016-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多