如何模拟工作量

时间:2011-12-07 05:05:51

标签: java python perl workload

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

  1. 内存

  2. 时间

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

    我不能使用fork或多线程,这个进程应该是一个单独的线程并且应该继续执行操作(如Integer / Floating point等)。我也不想做任何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. }
    

    如果有更好的方法,请告诉我。

    谢谢,

    阿米特

3 个答案:

答案 0 :(得分: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()

答案 1 :(得分:1)

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

感谢您的帮助。

答案 2 :(得分:0)

你的例子似乎是合理的,至少在第一步。然而,有许多小细节可以做对:

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

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