2012-03-29 17 views
0

いくつかのライブラリ呼び出しのパフォーマンスを測定しようとしています。私の主な測定ツールはrdtsc呼び出しです。いくつかの読書をした後、私は、最も正確な読書を得るために、私は先取りと割り込みを無効にする必要があることを認識します。誰かが私にこれらをする方法を理解するのを助けることができますか?私は、pthreadには「親和性」メカニズムがあることを知っています。それは仕事を完了するのに十分ですか?pthreadを単一のコアに固定する

私はまた、他の上で一つのアプローチを使用してのいずれかの利点があり、私はソート

preempt_disable() 
raw_local_irq_save(...) 

のカーネルに電話をかけることができることをどこかで読ん?私は後者のアプローチを試みて、このエラーを受けました。

error: 'preempt_disable' was not declared in this scope 

これはlinux/preempt.hをインクルードすることで修正できますが、コンパイラはまだ文句を言います。

linux/preempt.h: No such file or directory 

はもちろん、私はカーネルのハッキングを行っていないと私はどこにでも私のシステムでこのファイルを見つけることができませんでした。私は本当に私は新しいLinuxカーネルをインストールする必要はありません望んでいる。 :)

ありがとうございます。単一のCPUにpthreadをピン留め

+0

とにかくあなたの問題は表示されません。 lib呼び出しに時間がかからない場合、lib呼び出しが中断する可能性は少なくなります。 libコールに非常に時間がかかる場合、割り込み時間は重要ではありません。 libコールが 'ちょうどいい'の場合は、割り込み時間が重要ではない割合になるようにそれらをたくさん作ってください。割り込みを無効にする?他に誰も実行していない不自由なOSでパフォーマンスを測定しようとすると、どのような点がありますか?プリエンプションを無効にすることは簡単です。アイドル状態のシステムでテストを実行するだけです。準備ができていない場合は、プリエンプションはありません。 –

答えて

3

pthread_setaffinity_np

を使用して行わしかし、あなたが最後に達成したいことはそれほど単純ではありませんすることができます。私はあなたに理由を説明します。

preempt.hは、Linuxカーネルソースの一部です。その場所はhereです。カーネルソースが必要です。とにかく、それにアクセスするためのカーネルモジュールを書く必要があります、あなたはそれをユーザー空間から使うことはできません。 Learn how to write a kernel module hereを学んでください。 preempt_disableと同じですinterrupt disabling kernel functions

ここでポイントは、pthreadsがユーザースペースにあり、プリエンプション無効化機能がカーネルスペースにあることです。インタラクションするには?

プリエンプションを中断して割り込みを無効にし、ユーザースペースから呼び出す場合は、自分のwrite a new system callにする必要があります。それとも、他のKernel-User Space Interfacesなどioctlsysfsprocfsよう

に頼る必要があるしかし、私は、これらすべてのベンチマークライブラリ関数にあなたを助ける方法として、実際には懐疑的です。あなたは見てみたいです。how performance is typically measured using rdtsc