一个小型 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
以查看是否有帮助,但没有。启用这些设置可能会导致这种情况,我还有哪些其他方法可以防止这种情况发生?