ホームページ > システムチュートリアル > Linux > デュアルコア CPU キラーにより、Linux プロセスの実行が高速化されます。

デュアルコア CPU キラーにより、Linux プロセスの実行が高速化されます。

WBOY
リリース: 2024-02-14 11:50:13
転載
1188 人が閲覧しました

Linux システムを使用する場合、データ処理やプログラムのコンパイルなど、完了するまでに大量のコンピューティング リソースを必要とする、CPU を大量に使用するタスクが発生することがよくあります。ただし、システムのハードウェア構成が低いと、タスクの実行が遅くなり、作業効率に重大な影響を及ぼします。この問題を解決するために、この記事では、プロセスを特定の CPU コアにバインドして、プロセスの実行効率を向上させることができる「CPU バインディング」と呼ばれる技術を紹介します。

デュアルコア CPU キラーにより、Linux プロセスの実行が高速化されます。

通常のアプリケーションの場合、オペレーティング システムのデフォルトのスケジューリング メカニズムは問題ありません。ただし、プロセスでより高い操作効率が必要な場合は、別のコアへのバインドを検討して、異なるコアでのスケジューリングによって生じるオーバーヘッドを削減する必要があります。

プロセス/スレッドを特定の CPU コアにバインドすると、プロセスは常にこのコア上で実行され、オペレーティング システムによって他のコアにスケジュールされることはなくなります。ただし、バインドされたコアは依然として他のアプリケーションを実行するようにスケジュールされている可能性があります。

オペレーティング システムによるマルチコア CPU のスケジューリング

現在、Windows と Linux はどちらもマルチコア CPU のスケジューリングと管理をサポートしています。

マルチコア環境でのソフトウェア開発の中核は、マルチスレッド開発です。このマルチスレッドは、ソフトウェア実装におけるマルチスレッドを表すだけでなく、ハードウェアにおけるマルチスレッド テクノロジの使用も必要とします。

マルチコア オペレーティング システムの焦点は、プロセスの割り当てとスケジューリングにあります。コアごとに共有条件や過去の動作条件が異なるため、プロセス割り当てではプロセスを適切な物理コアに割り当てます。一部の物理コアは 2 次キャッシュを共有できますが、他の物理コアは独立しています。データ共有を伴うプロセスが共有二次キャッシュを持つコアに割り当てられている場合、パフォーマンスは大幅に向上しますが、そうでない場合は、パフォーマンスに影響が出る可能性があります。

プロセス スケジューリングには、リアルタイム、負荷分散、その他の問題が含まれます。現在の研究で注目されている問題は、主に次の側面に焦点を当てています:

  1. プログラムの並行開発と設計
  2. 複数のプロセスの時間相関
  3. タスクの割り当てとスケジューリング
  4. キャッシュされたエラー共有
  5. 一貫したアクセスの問題
  6. プロセス間通信
  7. マルチプロセッサ コア内のリソースの競合

CPU コア上で複数のプロセスおよびマルチスレッドが実行されている場合の状況は次のとおりです。
各 CPU コアがプロセスを実行する場合、各プロセスのリソースは独立しているため、CPU コアを切り替えるときにコンテキストを考慮する必要はありません。 各 CPU コアがスレッドを実行するとき、場合によってはスレッドがリソースを共有する必要があるため、これらのリソースを CPU の 1 つのコアから別のコアにコピーする必要があり、追加のオーバーヘッドが発生します。

CPU コアで実行するプロセスをバインドします

CPU のコア数を確認します

cat /proc/cpuinfo を使用して CPU 情報、次の 2 つの情報を表示します。

プロセッサ、CPU プロセッサを指定します

CPU コア、プロセッサごとのコア数を指定します

システム コール sysconf を使用して CPU コアの数を取得することもできます:
リーリー
2 つのプロセッサを備えた仮想マシンを使用しています。各プロセッサにはコアが 1 つだけあり、これは 1 つのプロセッサ上の 2 つのコアに相当します。

タスクセット ディレクティブを使用する

プロセスIDの取得

リーリー

プロセスが現在実行されている CPU を表示する

リーリー

表示された 10 進数の 3 を 2 進数に変換すると、下位 2 つが 1 になります。1 は 1 つの CPU に対応するため、プロセスは 2 つの CPU で実行されます。

cpu1で実行するプロセスを指定します

リーリー

CPU ラベルは 0 から始まるので、cpu1 は 2 番目の CPU を表すことに注意してください (最初の CPU ラベルは 0)。

この時点で、アプリケーションは実行するために cpu1 にバインドされています。次を参照してください:

リーリー

プログラム起動時にCPUをバインドする

リーリー

sched_setaffinity システムコールを使用します

sched_setaffinity は、プロセスを特定の CPU にバインドできます。

リーリー ###例### リーリー

操作結果

リーリー

CPU コアで実行するようにスレッドをバインドします

pthread_setaffinity_np 関数を使用してスレッドを CPU コアにバインドします。そのプロトタイプは次のように定義されます: リーリー 各パラメータの意味は sched_setaffinity と同様です。

###例### リーリー

操作結果

リーリー

この記事の導入を通じて、CPU バインド テクノロジを使用してプロセスを特定の CPU コアにバインドし、それによってプロセスの実行効率を大幅に向上させる方法を学びました。実際のアプリケーションでは、さまざまなシナリオとニーズに応じて適切な CPU バインディング ソリューションを選択し、最高のパフォーマンス向上効果を達成できます。この記事が、読者の皆様の CPU バインディング テクノロジの理解と適用を深め、Linux システムの使用における作業効率の向上に役立つことを願っています。

以上がデュアルコア CPU キラーにより、Linux プロセスの実行が高速化されます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:lxlinux.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート