我正在尝试对我的自制 NAS 进行压力测试以解决冷却问题。
由于stress
、norFIRESTARTER
和 都mprime95
不会监控温度,因此我想编写一个小脚本,如果温度上升过多,则终止所有脚本(即我当前正在运行的脚本):
sudo renice -n -20 $$; \
maxitemp=0; \
while [ $maxitemp -le 40 ]; do
sleep 1
maxitemp=$(s-tui -j | jq "[.Temp|.[]|tonumber]|max")
echo "$(date +%Y-%m-%d_%H:%M:%S) Maximal Temperature $maxitemp"
done; \
echo "$(date +%Y-%m-%d_%H:%M:%S) EMERGENCY KILL BECAUSE OF HIGH TEMPERATURE" | tee -a ~/stresstest.txt; \
killall stress; \
killall FIRESTARTER; \
killall mprime
但是,如果我启动我的 Ubuntu Live CD,将其连接到互联网,安装 s-tui 和 jq 以及 mprime 并运行它,prime95 会启动工作程序和计算机(一台笔记本电脑,因为我在真正在我珍贵的 NAS 上运行它之前正在测试它)停止响应,我无法取消 prime95,鼠标不再移动,只是光驱发疯了。我必须长按电源按钮关闭机器才能停止它。 即使我用一个简单的脚本替换上面的脚本
sudo renice -n -20 $$; \
sleep 30;
killall mprime
为什么会这样?我怎样才能让我的监控和安全网绝对优先于压力?
更新
事实证明,问题不在于优先级,而在于 mprime 使用了太多 RAM,从而将交换/磁盘缓存推出 RAM,这导致驱动器出现故障并且系统无响应。
https://www.mersenneforum.org/showthread.php?t=25429
我将把这个问题留在这里,因为我认为 powerload79 的回答对其他人非常有帮助!
答案1
你不能给予绝对优先级,但您可以执行以下操作来最大化温度监控的相对优先级:
1)确保以 nice -n 19 运行压力任务以最小化其优先级,此外还将监控进程的优先级设置为 -20。
2.1)使用cgroups进一步降低压力任务的优先级:
# Create a user and group called idle:
adduser idle
# Create a corresponding cgroup
/bin/cgcreate -a idle:idle -t idle:idle -g cpu:idle
/bin/cgset -r cpu.shares=2 idle
# Run your stressful proccess as part of this cgroup
/bin/cgexec -g cpu:/idle /usr/bin/mprime
2.2)使用cgroups进一步提高监控任务的优先级:
# Create a user and group called fast:
adduser fast
# Create a corresponding cgroup
/bin/cgcreate -a fast:fast -t fast:fast -g cpu:fast
/bin/cgset -r cpu.shares=262144 fast
# Run your minitoring proccess as part of this cgroup
/bin/cgexec -g cpu:/fast /usr/bin/my_monitoring_script
在防止密集任务干扰其他工作负载方面,这将产生巨大的差异。不仅您的监控任务运行起来会更轻松,而且所有其他常规进程将能够更顺利地运行,同时压力测试仍能获得所有不受干扰的时钟周期。
3) 如果您的发行版附带该工具,请使用 tuned-adm 将配置文件设置为“latency-performance”,例如 Fedora/CentOS/RHEL。您可能必须在 Ubuntu/Debian 上自行构建它。