マルチコアマシンでいくつかのベンチマークを実行しようとしています。明示的にそれらを使用するように指示されない限り、特定のコアを単に回避するようにLinuxカーネルに伝えたいです。
アイデアは、ベンチマーク用に少数のコア(マシンには6つの物理コアがある)を確保し、CPUマスクを使用して、指定されたコアにベンチマークプロセスのみを許可できるというものです。
これは実現可能ですか?
マルチコアマシンでいくつかのベンチマークを実行しようとしています。明示的にそれらを使用するように指示されない限り、特定のコアを単に回避するようにLinuxカーネルに伝えたいです。
アイデアは、ベンチマーク用に少数のコア(マシンには6つの物理コアがある)を確保し、CPUマスクを使用して、指定されたコアにベンチマークプロセスのみを許可できるというものです。
これは実現可能ですか?
回答:
あなたは、いくつかの希望プロセッサアフィニティ(またはCPUアフィニティを)。
関連するsyscallはsched_setaffinity(2)ですが、ベンチマークをコーディングする場合は、pthread_set_affinity_np(3)から使用する必要があります。
関連するコマンドはtaskset(1)であり、ベンチマークするコマンド(またはシェル)で使用できます。
可能であれば、ベンチマークに関係のない他のタスクによってマシンに多くの負荷がかからないように注意してください。
あるいは、いくつかの使用ハイパーバイザーのようなのXenを、そのハイパーバイザーのためのゲストOSとしてのLinuxをブートします。次にxen
、CPUコアの制限されたセットのみを使用するように構成します(正確な詳細はわかりません。調べる必要があります)。Debianの(および関連)ディストリビューションでは、次のようなパッケージのインストール可能性があるxen-linux-system-amd64
、xen-hypervisor-amd64
、xen-utils
など(私はDebianの/シドに使用していますxen-hypervisor-4.5-amd64
、xen-linux-system-4.0.0-1-amd64
、xen-utils-4.5
など...)。
使用可能なコアの数を制限するために、Linuxカーネルを(カーネルのコンパイル時に、または特定の引数をカーネルのGrubローダーに渡して)構成する方法が存在する可能性があります。
、デスクトップLinuxのPC-にいくつかのプログラム-egをベンチマーク(使用を多くの外部の実行中のプロセスを避けるために世話をするときもちろん、それは、良いですps auxw
、pstree -p
、top
これらを見つけるために)。少なくとも、ほとんどの対話型アプリケーション(Firefox、電子メール、エディターなどのブラウザー、EclipseなどのIDE)を閉じて終了し、少数の端末のみをベンチマークに維持します。ログインしていなくても、バッチモードでベンチマーク(ベンチマークを使用batch
またはat
実行)することもできます(GnomeやKDE、XfceなどのGUIセッションを実行しないでください)。
at
またはを使用してbatch
)バッチモードでベンチマークを実行することもできます(そのため、消費セッションを実行しないでください)。