模拟物理磁盘以加快执行速度?

问题描述:

我们有一个命令行exe文件,它接受来自文本文件的输入并生成输出文本文件。它用于复杂的工业模拟。模拟物理磁盘以加快执行速度?

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

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

是否有无论如何我可以欺骗此可执行文件不写入物理磁盘?如果我们在U​​nix上,我认为管道可以做到这一点,但我们的部署服务器是Windows Server 03.

我刚想到一个ramdrive可以解决这个问题,但是我没有玩过其中一个,因为MS- DOS 6.任何值得关注的商业产品?有没有人有任何其他想法通过代码模拟物理驱动器?我们在.NET 3.5上。

+1

如果您已经知道磁盘访问是瓶颈,并且您知道这是给定的,您为什么要优化您没有源代码开始的可执行文件? – Alex 2009-08-31 06:15:42

+2

我不想优化可执行文件,我想优化由可执行文件实现的模型。尽管模型是未知的,但仍然可以使用基于梯度下降的奇特技术来尝试估计参数和最优解空间。无论如何,这不是辩论的话题。我在这里询问有关模拟磁盘访问的问题。 – Alex 2009-08-31 06:32:41

+0

你的输入/输出文件有多大?缓存磁盘控制器可能是答案... – DmitryK 2009-08-31 06:36:15

管道输出是可能的在windows中以及 - 如果可执行文件生成输出只能标准出,你可以使用。

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

+0

您可以请扩展这可能工作? – Alex 2009-08-31 09:31:55

+0

它在unix上的做法相同:尝试'dir |更多'例如。基本上,如果您的程序编码为直接写入磁盘,这不是一个选项。 – 2009-08-31 12:01:21

+0

不幸的是,这是事实。如果我们有源代码,我们根本不会写入磁盘。 – Alex 2009-09-07 18:10:03

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

另一种选择是在15000 RPM磁盘或SSD(固态硬盘)上花费一点现金,虽然这比RAM磁盘要慢。

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

+0

我们在企业国有企业内部运作。访问或修改硬件不是一种选择。我们的应用程序还必须与虚拟机兼容才能进行测试。 关于逆向工程 - 黑箱优化是该过程的一部分。 – Alex 2009-08-31 07:39:16

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

+0

有趣的方法,但我们只能访问虚拟机。主机操作系统超出限制。 – Alex 2010-01-01 08:17:43

+0

我应该最初提到我们的部署服务器已经是虚拟机。 – Alex 2010-01-01 08:18:51