2012-05-01 13 views
3

私はいくつかのデータベースシステムでローカル実験を行っています。私はクエリを実行する前後に/proc/statusからCPU情報を集めます(合計)。違いは、クエリの実行時にjiffiesまたはUSER_HZの量がわかるはずです。しかし、(clock_gettime()によると)クエリの実行時間が0.001 seconds以下の場合、その差はゼロです。 CPUの情報を利用するためにこれを高速化するのですか、それとも他に何か不足していますか?私は速すぎてjiffiesをカウントできませんか?

+0

'clock_gettime'は、ほとんどのマシンではナノ秒の解像度、または少なくともマイクロ秒です。私は時間を測定するためにすべての時間を使用し、ゼロになることはありません。 –

答えて

1

Linuxカーネル2.6.0以降、jiffyは1/250秒、つまり0.004秒です[time(7)]を参照してください。それ以上の解像度は決して得られません。

rdtsc命令を使用することをお勧めします。この命令は、コンパイラ組み込み関数として使用されている可能性があります。これは1CPUティックごとに増分されるため、頻度で割ることで、経過した時間を取得できます。 with inline assemblyを実装することもできます。

実際には/proc/statusをチェックするのはちょっとばかげています。ファイルディスクリプタを開いて内容を読み取るのが実際に実行した時間より長くかかる可能性が高いからです。 rdtscははるかに信頼性が高いです。

+0

これを明確にしていただきありがとうございます。通常、私のクエリは、何桁も長く実行されます。だから私は、 '/ proc'へのアクセスオーバーヘッドが、CPU使用率の十分な近似のために無視できることを願っています。私はこれを私の測定プロセスの評価として取っていきます。それはぴったりしたものでもありません:P – lupz

+1

正直なところ、「rdtsc」に切り替えるのは難しくありません。 –

+0

私のマシンは、最初の例では約80点です(まだeclipseを通してg ++に上記のパラメータを渡す方法を理解していません)。私はインラインアセンブリーがほんの数ステップだけ離れているとは決して考えなかったでしょう。 – lupz

関連する問題