プログラムがあります。実行中にCPU温度が50度から80度に上昇するのが最大の悩みでした。
CPUの周波数を制御することで速度を遅くすることができますが、他のプロセスも遅くなるので望ましくありません。
他のプロセスに影響を与えずにCPUをクールに保つために、特定のプロセスの速度を遅くすることはできますか?
私のオペレーティングシステムはUbuntu 10.10です。
プロセスの優先順位を設定してみましたが、
nice -n 15 myprogram
これが機能するかどうかはわかりません。 CPUの最高温度は摂氏77度です。nice
他のプロセスと比較して、あるプロセスの相対的な優先順位のみを設定しますか?つまり、他のプロセスが実行されていない場合、この良いプロセスはより速く実行されますか?常にゆっくり実行するようにプロセスを設定したいと思います。
答え1
CPULimitがあなたのために必要なものです。プログラムを起動し、プログラム名またはPIDに対してcpulimitを実行して制限する割合を指定します。
次のコマンドは、PID 7777でプロセスのCPU使用率を5%に制限します。
cpulimit -p 7777 -l 5
あるいは、実行可能ファイル名を使用することもできます。
cpulimit -e myprogram -l 5
または実行可能ファイルの絶対パス:
cpulimit -P /path/to/myprogram -l 5
パーセントはすべてのコアのパーセンテージなので、コアが4つの場合は400%を使用できます。
答え2
あなたはできますレニス実行中のプロセスに高いまたは低い優先順位を付けます(いわゆる「良い値」)。 UNIXの優先順位の尺度はやや直感的ではありません。負の値は、プロセスが同時プロセスよりも優先されることを意味します。つまり、「より多くの」優先順位があります。
したがって、次のように特定のPIDのプロセスを「ゆっくり」試みることができます。
# lower priority of a process
renice +1 "PID"
このプログラムが実行されるたびに、プロセス「nice value」が 1 ずつ増加します。もちろん、これ以上の整数値を使用することもできます+1
。
注文するいいね+10の適切な値調整でプロセスを開始できます(この値を変更するにはオプションを使用してください-n
)。たとえば、
# start a CPU-intensive task with low priority
nice ./cpu-hog
しかし、「良い値」は、スケジューラがシステムの他のプロセスと比較して特定のプロセスを実行することをどれだけ好むかだけに影響します。コンピュータがほとんどアイドル状態の場合、個々のプロセスの「良い値」を上げるといいえこのプロセスがCPUを100%占有しないようにしてください。私は引用するgetpriority(2) マンページ:(強調は私が追加しました。)
相対値がプロセススケジューリングに影響を与える程度はUnixシステムによって異なり、Linuxではカーネルバージョンによって異なります。カーネル2.6.23以降、Linuxは良い値の相対的な違いがより強い影響を与えるアルゴリズムを採用しています。これにより、非常に低いNice値(+ 19)が発生し、実際にはプロセスにCPUがほとんど提供されません。別のことがあるたびに _システムの優先順位がより高い負荷です。
その理由は、UNIXに似たカーネルでプロセスが実行される方法にあります。カーネルがプロセスを実行することを決定するたびに、そのプロセスは特定の(固定および短い)期間CPUコアを完全に制御します。 「良い値」は、カーネルスケジューラがプロセスにタイムスロットを提供する頻度に影響を与える可能性がありますが、一度スケジュールされたら、プロセスが中断せずに一定時間実行されるという事実を変更することはできません。
したがって、システムにCPUアクセスを配置して競合する可能性がある他のプロセスがないと、CPU速度を遅くせずにプロセスを遅らせることはできません。
答え3
cgroupまさにこんな理由で作られました。
http://www.kernel.org/doc/Documentation/cgroups/ http://www.serverwatch.com/tutorials/article.php/3921001/Setting-Up-Linux-Cgroups.htm
慣れるには時間がかかり、設定にはrootアクセスが必要ですが、すべてスクリプト可能です。最新のUbuntuには.confファイルがあるため、スクリプトを直接作成する必要はありません。 10.10はよくわかりません。
この答えは良い出発点です。 https://askubuntu.com/a/94743/170177
cgroups はまだ開発中であるため、現在のカーネルでは一部の機能を使用できない場合があります。
cgroupを使うCPU共有何もしないでくださいいいねそんな価値がない。実際にプロセスを制限したいように聞こえますが、これは確実に行うことができます。
1 つまたは 2 つのスクリプトを使用または編集する必要があります。/etc/cgconfig.conf必要なパラメータを定義します。
特に値を編集したいです。CPU.cfs_期間_usそしてCPU.cfs_quota_us。これでプロセスを実行できます。CPU.cfs_quota_usマイクロ秒ごとCPU.cfs_期間_usマイクロ秒。
たとえば、
もしCPU.cfs_期間_us = 50000そしてcpu.cfs_quota_us = 10000これにより、何が起こってもプロセスはCPU時間の最大20%を占めます。
このスクリーンショットでは、CPU時間の2%をプロセスに割り当てました。
プロセスに関する限り、100%の速度で実行されています。
設定CPU共有一方、アイドルCPU時間は100%使用できます。
この同様の例では、私はプロセスを提供しますCPU.shares = 100(合計1024項目):
ご覧のとおり、プロセスは依然としてすべてのアイドルCPU時間を消費しています。
引用:
http://manpages.ubuntu.com/manpages/precise/man5/cgconfig.conf.5.html http://kennystechtalk.blogspot.co.uk/2015/04/throttle-cpu-usage-with-linux-cgroups.html