0

我必须编写一个程序(perl、python 或 java)来模拟我们服务器上的工作负载,这样它就需要 2 个参数:

  1. 记忆

  2. 时间

并且基于这些参数,它应该启动一个进程,在指定的时间内消耗指定的内存量。内存的最大值可以高达 50-100GB,时间可以高达 12-24 小时。

我不能使用 fork 或多线程,这个过程应该是一个单线程并且应该不断地进行操作(比如整数/浮点等)。我也不想做任何 I/O 操作。

我能想到的最简单的方法是:

 1. while(timeSpent < timeLimit || memoryConsumed < memorySpecified){
 2.           if(memoryConsumed < ){
 3.                Add random number to ArrayList 
 4.           }else{
 5.                Multiply all numbers (Do some exception handling to prevent this from overflowing) 
 6.           }
 7. }

请让我知道是否有更好的方法来做到这一点。

谢谢,

阿米特

4

3 回答 3

1

我正在使用实用程序stress weather.ou.edu/~apw/projects/stress ...虽然对其进行了一些调整以扩展我想要的功能..

谢谢你们的帮助。

于 2012-01-04T01:48:41.147 回答
1

像这样的python代码不适合您的需要吗?

import argparse
import datetime

def main():
    parser = argparse.ArgumentParser(description = "Consume memory and time.")
    parser.add_argument('memory', metavar = 'M', type=int, help = "memory (in megabytes) to consume")
    parser.add_argument('time', metavar = 'H', type=int, help = "time (in hours) to consume")
    args = parser.parse_args()

    data = bytearray(args.memory * 1000000)
    now = datetime.datetime.today()
    finish = now + datetime.timedelta(hours = args.time)
    while now < finish:
        for i in xrange(args.memory * 1000000):
             data[i] = now.second
        now = datetime.datetime.today()


if __name__ == '__main__':
    main()
于 2011-12-07T05:42:54.847 回答
0

你的例子似乎是合理的,至少在第一步是这样。然而,有许多小细节需要纠正:

  • 您说您不想执行 I/O,这很好,但是在现代机器中分配 50-100 GB 时,无论您是否愿意,您都将执行 I/O(通过页面错误) ,所以你可能想在那里重新定义你的规范。
  • 此外,考虑到“对象”的粒度,许多科学计算应用程序无法通过“许多小对象”范式获得。许多人希望有一些参数来平衡“许多小对象”和“少数大对象”。
  • 此外,通过将容器中的所有数据点相乘或相加,您可能会生成一系列页面错误,这些页面错误很容易被操作系统预测,因此在现实世界中是不切实际的,您可能希望在遍历的方式中添加一些随机性它。

这是一个比看起来更微妙的问题,许多人希望从简单的开始,甚至可能使用标准测试,例如:SETI 或光线追踪器。

于 2011-12-07T05:46:04.897 回答