次のことだけを行う小さな 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
、それが役立つかどうかを確認しましたが、そうではありませんでした。これらの設定がオンになっていると何が原因で、これを防ぐために他にどのような方法がありますか?