web-dev-qa-db-ja.com

Linuxカーネルに特定のCPUを使用しないように指示する

マルチコアマシンでいくつかのベンチマークを実行しようとしています。Linuxカーネルに特定のコアを単に回避するように伝えたいのですnlessを使用するように明示的に指示します。

アイデアは、ベンチマーク用に少数のコア(マシンには6つの物理コアがある)を確保し、cpuマスクを使用して、特定のコアに対してベンチマークプロセスのみを許可できるというものです。

これは実現可能ですか?

8
Lajos Nagy

isolcpusパラメータを使用して、一部のCPUコアをカーネルスケジューリングから分離できます。このパラメーターをgrub.confに追加し、再起動して有効にします。

5
VenkatC

プロセッサアフィニティ (またはCPUアフィニティ)が必要です。

関連するシステムコールは sched_setaffinity(2) ですが、ベンチマークをコーディングする場合は pthread_set_affinity_np(3) で使用する必要があります。

関連するコマンドは taskset(1) であり、ベンチマークするコマンド(またはシェル)で使用できます。

可能であれば、ベンチマークに関係のない他のタスクによってマシンに多くの負荷がかからないように注意してください。

または、 Xen のように hypervisor を使用し、LinuxをそのハイパーバイザーのゲストOSとして起動します。次に、一部の制限されたCPUコアのみを使用するようにxenを構成します(正確な詳細はわかりません。調べる必要があります)。 Debian(および関連)ディストリビューションでは、xen-linux-system-AMD64xen-hypervisor-AMD64xen-utilsなどのパッケージをインストールできます(Debian/Sid xen-hypervisor-4.5-AMD64xen-linux-system-4.0.0-1-AMD64xen-utils-4.5など...で使用しています)。

Linuxカーネルを(カーネルのコンパイル時に、または特定の引数をカーネルのGrubローダーに渡して)使用可能なコアの数を制限するいくつかの方法がある可能性があります。

もちろん、いくつかのプログラムをベンチマークするとき、それはより良いです-例えばデスクトップLinux PCの場合-多くの外部実行プロセスを回避するように注意してください(ps auxwpstree -ptopを使用してこれらを検索します)。少なくとも、ほとんどの対話型アプリケーション(Firefox、電子メール、エディターなどのブラウザー、EclipseなどのIDE)を閉じて終了し、少数の端末のみをベンチマーク対象にします。ログインしていなくても、バッチモードでベンチマーク(batchまたはatを使用してベンチマークを実行)することもできます(そのため、GUIセッションがないGnomeまたは[〜#〜] kde [〜#〜]またはXfceなど...実行中)。