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