2016-12-20 11 views
3

GPUサーバでのプロセスのCPU使用量を制限したい。私はいくつかの方法、 "nice"または "cpulimit"を見つける。しかし、彼らは私が欲しいものではありません。
cpulimitは、プロセスがSIGSTOPを取得してからスリープ、SIGCONTを取得した後のパーセンテージを超えるまで、プロセスを高速で実行できるようにします。
しかし、私はパーセンテージを超えたプロセスが眠ることは望ましくありません。私はそれが一定の割合を超えないことを願っています。それを通常の方法で実行し続けます。例えば
プロセスのCPU使用量を制限する方法はありますか?

、私はcpulimit -p 1111 -l 30を実行すると、端末は
[1]+ Stopped
になりますこれは私が欲しいものではありません。

答えて

2

あなたのプログラムに睡眠を送ることなくこれが可能ではないと思います。しかし、別のスレッドがCPUへのアクセスを要求したときにUNIXが実行することになるため、スリープが心配されるべきではないと思います。

あなたは、あなたのプログラムは、CPUコアの50%を使用していることが表示される場合はCPUコアのみを一度に1つのまたは2つのスレッドを行うことができますので、それは、時間の50%である(ご使用の構成に依存し、lscpuをlinuxで見てください)。

コアを常に100%消費し、他のプロセスの入力を許可しないアプリケーションを構築している場合、可能かもしれませんが、あなたのカーネルが別の緊急プログラム。

私のアドバイスは、アプリが一時停止する可能性があるため、アプリが一時停止する可能性があることを考慮することです。これは明らかに必要なものです。

希望私はあなたを助けてください:) yaを参照してください!

+0

これは私がより良い解決策を見つけることができない理由かもしれません。 –

0

可能な方法はのプロセス(またはプロセス・グループ)を実行し、(多くのためsignal(7)を参照)、代わりSIGSTOPSIGCONT信号を送って、あなた自身の「殻様」のプログラムを設計するかもしれません。たとえば、CPU時間の50%以下を使用するプログラムを使用する場合は、開始するか、10ミリ秒間実行するか、SIGSTOPを送信し、10ミリ秒間スリープし、SIGCONTを送信するか、10ミリ秒、SIGSTOPなどを送信します。

このような制御プログラムの概念実証は、half.cユーティリティ(GPLv2 +ライセンス)です。ところで、halfプログラムはそれ自体停止しないので、プロセスのため、端末上にStopped(シェルによって表示されるメッセージ)が表示されません。

FWIWは、私はいくつかの過熱MSI S270のラップトップ上でLinuxカーネルをコンパイルできるようにするには、十年以上前にそのプログラムを開発し

(実際の話は少し複雑であり、また、あまりにも安いRAMを関与モジュールが熱すぎるとうまく動作しなかったため、RAMモジュールの変更がハードウェアの問題全体を解決したことに気づくのに1年以上が必要でした)。

関連する問題