如何模拟不同的CPU频率和限制RAM

10

我需要用C#构建一个模拟器。该模拟器应该能够运行第二个线程,可配置CPU速度和有限的内存大小,例如144MHz和50MB。
当然,我知道模拟器永远无法像真实硬件一样精确。但我尽量让它达到几乎相似的性能。
目前,我考虑创建一个线程,定期停止/休眠。根据所需的CPU速度,模拟器应调整该线程的休眠时间,从而模拟不同的CPU频率。为了测量达到的速度,我想使用PerformanceCounters。但是,这种方法存在一个问题,即我不知道如何限制线程可以使用的RAM大小。
你们有什么想法来实现这样一个模拟器吗?

谢谢!


+1 我想知道答案。但我担心你已经陷入了太深的水中。 - Oskar Kjellin
看看竞技场分配器,以限制内存到特定的总量。 - WhirlWind
3
请注意,时钟频率并不是衡量性能的好指标。在我Core2Duo的一个内核下降频到1GHz时,性能比2.5 GHz Pentium 4要好得多。如果你想了解你的软件在特定设备上的运行情况,应该尝试获取实际芯片的仿真器。 - back2dos
4个回答

3

1
+1. 虚拟化可能是最好的想法。例如,如果用于虚拟服务器,那么对于 VM 实现 CPU 上限(周期/毫秒可能)也是有意义的。因此,我会寻找是否有这样的选项。 - back2dos
虚拟机的问题在于没有办法改变CPU速度。 - geiserbua

2

1
如果您关心模拟操作系统环境,那么一个答案是使用虚拟机环境,在其中可以控制内存和CPU参数等。
线程暂停/停止可能有助于模拟CPU频率,但这将非常不准确,因为当您暂停线程时,它将被取消调度,然后由操作系统在某个“随机”时间重新调度,即一个您无法控制的时间点。
至于限制内存,启动一个将托管您的代码的新进程是一个选项,然后限制该进程的内存,例如:

http://www.codeproject.com/KB/threads/Setting_Max_Memory_Limit.aspx

但这并不能真正模拟操作系统的内存限制。


到目前为止,我看到的所有虚拟机都存在一个问题,即我无法配置CPU速度。此外,我还有一个问题,就是我只能限制整个虚拟机的内存大小,而不能针对特定的进程/线程进行限制。 启动一个新进程并控制它的第二种方法是一个好主意。 - geiserbua
1
通常您可以指定分配给虚拟机的CPU资源百分比,这样可以“大致”限制CPU资源。至少在Hyper-V上可以这样做。顺便说一句,如果您喜欢别人的答案,请为他们投票。 :) - Tim Lloyd

0

有一个线程可以使客户操作码的软件执行暂停吗?

我认为它可以工作,但有点奇怪,像快进、暂停、快进、暂停等等...

如果你只想减缓一个进程的速度,请尝试这个:使用CPU单步功能,并"调试"该进程。您必须编写一个自定义处理程序来处理CPU单步陷阱。您的处理程序的工作只是一个大型NOP循环。

每条指令之间都有一个良好的延迟。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接