0

次のことだけを行う小さな C++ プログラム:

struct bat
{
    const char* a;
    const char* b;
    void*       v;
};

struct rat
{
    rat()
        : 
          isOn(true),
          bats(),
          batscounter(0) {}

    uint64_t
    update()
        {
            uint64_t start = rdtsc();
            if (!isOn)
                return;

            bat& b = bats[batscounter];
            batscounter = (++batscounter % 10);
            b.v = this;
            b.a = "aname";
            b.b = "bname";
            return (rdtsc() - start);
        }

    bool isOn;
    bat bats[10];
    size_t batscounter;
};

それをループして rdtsc からのタイムスタンプを検査すると、平均 20 サイクルが表示されますが、多くの場合、20K サイクル (毎秒) を超えるスパイクが表示されます。このメソッドは、毎秒約 70M 回呼び出されています。を使用して空のホストでこれを実行しています。ulimit -r 99プロセスのアフィニティマスクを設定して1、それが役立つかどうかを確認しましたが、そうではありませんでした。これらの設定がオンになっていると何が原因で、これを防ぐために他にどのような方法がありますか?

4

0 に答える 0