如何模拟工作量

2024-06-16 10:54:47 发布

您现在位置:Python中文网/ 问答频道 /正文

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

  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. }

请告诉我有没有更好的办法。在

谢谢

阿米特


Tags: to内存程序服务器参数数量进程时间
3条回答

这样的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()

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

  • 你说你不想做I/O,这很好,但是在 在一台现代机器上分配50-100 GB的内存 不管你想要还是不想要(通过页面错误),所以你可能需要重新定义 你的规格。在
  • 另外,要考虑到“对象”的粒度,许多 科学计算应用程序无法利用“许多小对象” 范式。你可能需要一些参数来平衡 “小物体多”和“大物体少”。在
  • 另外,通过将 容器您可能会生成一系列页面错误 很容易被操作系统预测,因此在 在现实世界中,你可能想在你的方式中加入一些随机性 穿过它。在

这是一个比表面看起来更微妙的问题,您可能希望从简单的开始,甚至可能使用标准测试,例如:SETI或raytracer。在

我用的是效用压力天气预报/~apw/项目/压力。。。虽然它做了一点调整来扩展我想要的功能。。在

谢谢你们的帮助。在

相关问题 更多 >