2011-01-12 6 views
7

処理されているリクエストごとにtime(NULL)を呼び出すサーバー実装を見直しています。私は典型的なLinuxシステムで呼び出し時間(NULL)がどのような影響を与えているのか、日を決定するためのより安価なコマンドがある場合、または一般的にどのくらいの頻度でtime()を呼び出すのだろうか?サーバループでの呼び出し時間(NULL)はどれくらいですか?

このトピックに関するご意見ありがとうございます。

答えて

7

これはシステムコールです。他の回答と同様に、他の回答はシステムのコストを測定する良い方法です。 (一度カーネルに入ってしまえば、それほど多くの作業をする必要はないので、純粋なシステムコールオーバーヘッドのコストにかなり近くなります。Linuxは、システムコールを効果的に実装するためにできることを行っています。

他の回答とは違って、私はこのことをとても安価で自動的に心配する価値はないとは思わないでしょう。これが内側のループにある場合は、内側のループで何をしているかによって異なります。これがリクエストを処理するサーバであれば、リクエストごとに多くのシステムコールを作成している可能性があります。また、1つのリクエストでは、各リクエストのコストが大幅に変わることはありません。しかし、私はtime()(またはgettimeofday()を呼び出すことによるシステムコールのオーバヘッドが実際に沸騰している)が有害な影響を及ぼすコードを見てきました。

コストが心配な人は、安価な方法で時間を見つけることができます。一般的に、より安価な方法はありません。 x86上にいる場合は、rdtsc命令(他のCPUアーキテクチャにはアナログがある可能性があります)をCPUに問い合わせることができます。これは特権を持たない単一のアセンブリ命令ですので、どこにでもコードを置くことができます。しかし、多くの落とし穴があります - rdtscは予測可能なレートで常に増加するとは限りません。特に、使用しているCPUの正確なモデルに応じて、パワーマネージメントのCPUスピードが変化する場合があります。値は複数のcpusなどで同期されないことがあります。OSはこれをすべて追跡してgettimeofday()を呼び出すと、フレンドリーで使いやすいバージョンの情報を提供します。

1

これは本当にボトルネックですか?私は代わりにプロファイリングをお勧めします。現在の時刻を取得するのはです。の一般的な操作であり、私はそれが高価であることを非常に疑っています(測定するプログラムを簡単に書くことはできますが)。たとえば、すべてのWebサーバーはログファイルの要求ごとにそれを行います。

+0

確かにボトルネックではありませんが、処理時間にどのような影響があるのでしょうか。私はそれが高度に最適化された呼び出しだと思うが、誰かがこれについて明確な洞察を持っているのだろうかと思う。 – anselm

+0

@anselm - 誰もこの機能をパフォーマンス上の問題として以前見てきたのではないかと思います。なぜそれをベンチマークしないのですか? –

+0

私は誰かが賭ける。私は特に 'time'を見たことはありませんでしたが、私は一度Java関数' System.getCurrentTimeMillis'の性能をチェックしなければなりませんでした。それは、私が追加するかもしれないが、彼らは自分のコードを非常にうまく解析していなかった。しかし、システム時間を取得することは、実際にはWindows上では遅いです(いくつかのms IIRC、私は間違っている可能性があります)。長い時間前に、しかし。 –

0

カーネルでの処理があまりない単一のシステムコールです。あなたのサーバが100個のread()/ write()を実行するか、このようなことをするユーザにファイルを送る場合、time()は違いはありません。

3

現在の時刻を取得するには、Linuxへのシステムコールが必要です。 Vilxによって推薦したように、ベンチマークにかなり簡単です:このプログラムを実行する

#include <time.h> 

int main(void) 
{ 
    int i; 
    for (i = 0; i < 10000000; i++) 
     time(NULL); 
    return 0; 
} 

は、コール(6.26sあたり約1002 CPUサイクルに等しくする、64ビットカーネルで私弱虫1.6GHzのアトム330に6.26sを取ります*毎秒1.6Gサイクル/ 10M繰り返します≈ 1002サイクル)。

これは確かに他の人に言われているように、大きな懸念を保証するものではありません。

関連する問題