【发布时间】:2010-09-13 14:11:54
【问题描述】:
我有一个RHEL 框,我需要将它置于中等且可变的 CPU 负载 (50%-75%) 之下。
解决此问题的最佳方法是什么?有没有我不知道的可以做到这一点的程序?我很高兴编写一些 C 代码来实现这一点,我只是不知道哪些系统调用会有所帮助。
【问题讨论】:
标签: linux load redhat cpu-cycles
我有一个RHEL 框,我需要将它置于中等且可变的 CPU 负载 (50%-75%) 之下。
解决此问题的最佳方法是什么?有没有我不知道的可以做到这一点的程序?我很高兴编写一些 C 代码来实现这一点,我只是不知道哪些系统调用会有所帮助。
【问题讨论】:
标签: linux load redhat cpu-cycles
这正是您所需要的(互联网存档链接): https://web.archive.org/web/20120512025754/http://weather.ou.edu/~apw/projects/stress/stress-1.0.4.tar.gz
从主页: “stress 是用于 POSIX 系统的简单工作负载生成器。它对系统施加可配置数量的 CPU、内存、I/O 和磁盘压力。它是用 C 编写的,是根据 GPL 许可的免费软件。”
【讨论】:
找到一个简单的具有源代码的素数搜索程序。修改源代码,在主循环中添加一个 nanosleep 调用,以任何延迟为您提供所需的 CPU 负载。
【讨论】:
在系统上获得一些负载的一种常见方法是一遍又一遍地编译一个大型软件包。类似于 Linux 内核的东西。
获取源代码的副本,解压 tar.bz2,进入顶级源目录,将内核配置从 /boot 复制到 .config 或 zcat /proc/config.gz > .config,然后进行 make oldconfig,然后当真;做干净 && 做 bzImage;完成
如果你有一个 SMP 系统,那么 make -j bzImage 很有趣,它会产生并行的 make 任务。
其中一个问题是调整 CPU 负载。除了等待磁盘 I/O 时,这将是最大的 CPU 负载。
【讨论】:
您可以使用 Bash 脚本来执行此操作。使用“ps -o pcpu | grep -v CPU”获取所有进程的 CPU 使用率。将所有这些值加在一起以获得当前使用情况。然后有一个繁忙的 while 循环,它基本上会继续检查这些值,找出当前的 CPU 使用率,并等待计算出的时间量以使处理器保持在某个阈值。需要更多细节,但希望这会给您一个好的起点。
看看我找到的这个CPU Monitor 脚本,并尝试获得一些其他关于如何实现此目的的想法。
【讨论】:
这真的取决于您要测试的内容。如果您只是在测试 CPU 负载,那么吃空 CPU 周期的简单脚本就可以正常工作。我个人最近不得不测试 RAID 阵列的性能,我依靠 Bonnie++ 和 IOZone。 IOZone 会给盒子带来相当大的负载,尤其是当您将文件大小设置为大于 RAM 时。
您可能也对this Article感兴趣。
【讨论】:
Lookbusy 启用 CPU 负载的设定值。 Project site
lookbusy -c util[-high_util], --cpu-util util[-high_util]
i.e. 60% load
lookbusy -c 60
【讨论】:
使用“nice”命令。
a) 最高优先级: $ nice -n -20 my_command
或
b) 最低优先级: $ nice -n 20 my_command
【讨论】:
使用 awk 加载和锤击 CPU 的简单脚本。该脚本会进行数学计算,因此 CPU 负载会在 passwd 到 loadserver.sh 的较高值上达到峰值。
签出脚本@http://unixfoo.blogspot.com/2008/11/linux-cpu-hammer-script.html
【讨论】:
您可能可以使用一些负载生成工具来完成此操作,或者运行脚本以占用所有 CPU 周期,然后在进程上使用 nice 和 renice 来改变进程获得的周期百分比。
这是一个示例 bash 脚本,它将占用所有空闲 CPU 周期:
#!/bin/bash
while true ; do
true
done
【讨论】:
不确定您的目标是什么。我相信 glxgears 将使用 100% CPU。
因此,找到任何你知道的进程会将 CPU 最大化到 100%。
如果您有四个 CPU 内核(0 1 2 3),您可以使用“taskset”将此进程绑定为 CPU 0 和 1。这应该会加载您的机器 50%。加载它 75% 将进程绑定到 0 1 2 个 CPU。
免责声明:尚未对此进行测试。请让我们知道您的结果。即使这样可行,我不确定你会从中获得什么?
【讨论】: