実行中のプロセスでCPUコア使用量を上書きできますか? [閉鎖]

実行中のプロセスでCPUコア使用量を上書きできますか? [閉鎖]

たとえば、10個のCPUコアでプロセスを実行してから、CPUコア使用量を5にオーバーライドする方法はありますか?

答え1

まさか。

もちろん、これはポータブルな方法で行うことはできません。これを実行するシステムを指定していません。私はそれが私が最もよく知っているので、それがLinuxであると仮定していますが、自由に明確にしてください。

Linuxカーネルには「CPUの好み」sched_setaffinity()sched_getaffinity()可能走る。 CPUの数が現在のプロセスで使用されているスレッドの数より少ない場合は、必然的に少ないコアを使用します。しかし、このアプローチの問題は軍隊プロセスを実行する特定の CPU コアのセットです。 CPUを多用する作業の場合、これはこれらのコアが熱くなりやすいことを意味します。問題を減らすためにCPUを冷却するのに十分なシステム容量がない場合、一般的な回避策はカーネルが問題のあるプロセスを再起動することです。 。別のコアに予約して、使用したコアが同時に1つのコアを冷却できるようにします。一連のコアを強制的に実行すると、この方法は機能しなくなり、コアはCPU周波数の変更に置き換える必要があります。しかし、他のプロセスも実行中であるため、コアを調整しようとしていてCPU時間を少し与えたい場合は、それほど重要ではないかもしれません。

sched_setaffinity()以下を使用して、コマンドラインからアクセスおよびシステムコールを実行できます。sched_getaffinity()taskset

taskset -p 0x3 $PID

$PIDこれから、pidを持つプロセスはプロセッサコア0と1でのみ実行できることをカーネルに通知します。 (0x3は、ビット1がコア0を表し、ビット2がコア1を表すビットマスクです。)

アフィニティマスクは2進数で、16進数で入力され、以下のクアッドコアプロセッサのフルテーブルを使用して使用するCPUを指定できます。

0x1 - cpu0
0x2 - cpu1
0x3 - cpu0 and cpu1
0x4 - cpu2
0x5 - cpu0 and cpu2
0x6 - cpu1 and cpu2
0x7 - cpu0, cpu1 and cpu2
0x8 - cpu3
0x9 - cpu0 and cpu3
0xA - cpu1 and cpu3
0xB - cpu0, cpu1 and cpu3
0xC - cpu2 and cpu3
0xD - cpu0, cpu2 and cpu3
0xE - cpu1, cpu2 and cpu3
0xF - cpu0, cpu1, cpu2 and cpu3

答え2

方法を見つけました! !

CPUlimitは、次の場合に適しています。

https://github.com/opsengine/cpulimit

関連情報