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