我试图在Python中创建一个纯内存密集型脚本用于测试目的,但我尝试的每个脚本也增加了我的cpu。我已经阅读过this post了,我还试过了,其中包括:
#!/usr/bin/python
from datetime import datetime
startTime = datetime.now()
l1 = [17]*900
l2=[]
j=0
while j<9000:
l2=l1
j=j+1
print "Finished in ", datetime.now() - startTime
为了将数组复制到另一个数组,但我又一次有了cpu变种。
已更新 那么,我如何才能使标准CPU利用率(一个核心100%使用率),45%的内存利用率以及几分钟后内存利用率增加到90%?
答案 0 :(得分:2)
我有一些误解,我试图解决。
如果您想提高内存利用率,则需要不断向列表中添加数据:
l = []
for i in range(0, 1024*1024):
l.append("*" * 1024)
或使用与您的方法类似的东西,
l = [17] * 1024
for i in range(0, 16):
l = l + l # doubles the list each time.
那将分配内存。如果您想要单独衡量对它的访问权限,那么您希望循环l
修改值或对它们进行求和。
sum(l)
或
for i in range(0, len(l)):
l[i] += 1
最后,您的基准测试将非常简单(例如,不会解决多个内核同时访问内存,不考虑处理器缓存,前瞻,随机与串行访问等)使用Python也不是最佳选择,因为您无法完全控制内存分配和垃圾回收。
适当的内存基准测试是一个很深的主题......
编辑:
这是你要求的,或多或少:
from datetime import datetime
from datetime import timedelta
memory1 = "*" * 1024*1024*1024
start = datetime.now()
j = 0
while (datetime.now() - start) < timedelta(minutes=1):
j += 1
memory2 = "*" * 1024*1024*1024
while (datetime.now() - start) < timedelta(minutes=2):
j += 1
您可以调整memory1
和memory2
以获得40%和90%,具体取决于您的实际系统大小。程序将在分配字符串时需要使用CPU。它首先必须从内核请求内存,但是必须用'*'
填充它,否则内存将只是虚拟内存。如果你用C语言写这个,你可以在每个4k页面中触摸一个字节。