我有一个过程,我相信可能会被抢先一步。我怎样才能找出干扰它的是什么?

时间:2012-07-23 15:08:06

标签: c++ linux operating-system scheduling interrupt

一个小的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以查看是否有帮助,但它没有。使用这些设置会导致什么原因以及我可以使用哪些其他方法来阻止这种情况?

0 个答案:

没有答案