CPUの一部で動作するようにプロセスを割り当てる方法は? [コピー]

CPUの一部で動作するようにプロセスを割り当てる方法は? [コピー]

私たちはただ最初の6つのCPU。 RHELマシンがあります。

合計12個のコアを持つ物理DELLシステムがあります(lscpu)。

プロセスが最初の6つのコアのみを使用するように指定できますか?

または、最後の6つのコアをマスクして実際に使用できる他の方法最初の6コア、または最後の6つのコアを無効にします。

メモ: 本当の理由は、コアあたりの費用を支払うからです。コア全体の半分が利用可能な場合は、価格の半分を支払うだけです。

答え1

この用語はCPUの好み。このtasksetコマンドを使用して個々のプロセスに設定できます。

<command>最初の6コアでのみ実行(コア#0〜#5):

taskset -c 0-5 <command> [arguments for command]

プロセスがすでに実行されている場合は、PIDを介して好みを設定できます。

taskset -c 0-5 -p <PID of an existing process>

特定のプロセスに適用される制限が必要な場合そしてすべてのサブプロセスその後、Stephen Kittがコメントで述べたように、cgroupが必要です。問題のプロセスがsystemdサービスとして実行されている場合は、そのファイルのセクションCPUAffinity=0-5に追加するか、オーバーレイファイルを作成します。[Service].service

ただし、使用されるコアの数を制限する必要がある場合ライセンス目的で、関連ソフトウェアベンダーがどのような方法を許可しているかを確認する必要があります。簡単にキャンセルできない方法が必要な場合や、ソフトウェアが毎日使用するコア数(最大)の日次報告などのメカニズムが必要な場合があります。

答え2

はい、RedHatシステムは通常次のものを使用します。numactl

プロセスが特定のCPUにバインドされることを保証するものではありませんが(必要なCPUが利用できない場合は他のCPUにバインドできるようにするため)、最善の方法でバインドするようにジョブの開始を構成します。プロセスがスリープする)再起動希望のCPUにバインドします。

この場合、CPUは物理的な項目ではなく、「プログラムを実行できるもの」を意味します。これは、(この会話では)物理コアが1つのCPUであり、ハイパースレッディングが別のCPUであり、物理パッケージに多くのCPUがあることが多いことを意味します。これらのCPUのリストを取得するには:

cat /proc/cpuinfo
  • numactl --hardwareハードウェアのレイアウトを表示します。各ノードは「メモリ境界」です。これは、一部のCPUが他のCPUよりも高速にアクセスできる孤立したRAMビットであることを意味します。その理由は通常、1セットのCPUから直接アクセスできるのに対し、他のCPUはそのRAMビットにアクセスするためにこれらの境界を超えて要求する必要があるためです。numactl特定のメモリ境界のみを直接使用できるため、これは重要です。特定のCPUを指定する場合は、CPU-ローカルメモリ境界を指定するのが最善です。

  • numactl --physcpubind=0-7 <command><command>通常、コア0〜7で実行されているすべての項目を実行します。

  • numactl --physcpubind=0,7 <command><command>コア0または7から始まります。

もちろん、いずれの場合も、オペレーティングシステムがコアを使用できないと判断して実行を遅らせるのではなく、指定されていないコアからプログラムを起動する「コア損失」が発生する可能性があります。このnumactlオプションは、メモリ位置のより明示的なバインディングを可能--localallocにしながら、コアローカルメモリを使用しようとします。--membind=...

numastat開始されたプロセスの合計を統計形式で表示しますnuma_hits。特定のプロセスがヒットまたは欠落していることを確認するには、プロセスが終了する前にファイルシステムから詳細を読み取る必要があります。numa_missesnumactl/proc

答え3

ライセンスコストを回避するために、ソフトウェアが実行される CPU を制限しても、ソフトウェアのコアインスツルメンテーションに影響を与えないことがあります。ソフトウェアは特定のコアでのみ実行するように要求できますが、ソフトウェアはすべてのコアを検出し、ライセンス/許可構成と比較してその数を確認します。

必要に応じて動作させるには、両方のオペレーティングシステムを同じハードウェアプラットフォームに配置してHyperVisorをインストールすることをお勧めします。一部のHyperVisor(XENなど)はハードウェアを強力に分割できますが、他のHyperVisorはそうではありません。他のハイパーバイザーソリューションよりもハードウェア(単一の仮想マシンのみをサポートするように構成されたハードウェア)を強力に分割するソリューションを使用すると、より大きな成功を収めることができます。

これにはいくつかの要件があります。 CPU を 2 つ以上のパッケージ (実際の CPU チップ) に大まかに分散する必要があるため、CPU の強力な分割が機能し、残りのシステムはこのアプリケーションで予約されている部分にアクセスできません。制限のために100%以上のものではありませんが、制限を満たすことができる場合は、新しいマシンを購入するよりも優れています。

頑張ってください。このソリューションを試す前に、このソリューションがアプリケーションに適しているかどうかを100%知ることは不可能です。

関連情報