我正在使用运行内核3.5.7的Ubuntu盒进行各种实验.我将我的基准代码预热到1000万次迭代,然后进行9000次迭代.我仍然看到以下抖动:
Average: 242 nanos | Min Time: 230 nanos | Max Time: 4717 nanos
0.75 = avg: 240, max: 246
0.9 = avg: 241, max: 247
0.99 = avg: 242, max: 250
0.999 = avg: 242, max: 251
0.9999 = avg: 242, max: 517
0.99999 = avg: 242, max: **2109** <===
0.999999 = avg: 242, max: **3724** <===
0.9999999 = avg: 242, max: **4424** <===
Run Code Online (Sandbox Code Playgroud)
我看到0.01%的迭代时间都很糟糕.是否有可能真正实现Linux内核?内核中是否还有其他东西无法控制?
for(int i = 0; i < iterations; i++) {
long start = …Run Code Online (Sandbox Code Playgroud) 我正在用C++构建一个FIX引擎,但我没有引用知道什么是一个好的性能数字.考虑到网络时间和FIX解析时间,客户端向服务器发送FIX消息的微秒时间是多少?也有人知道这个简单的FIX消息从客户端到服务器操作的当前最低可能延迟吗?
当使用下面的基准代码编译时,-O3它在延迟方面的差异给我留下了深刻的印象,所以我开始怀疑编译器是否通过以某种方式删除代码而“作弊”。有没有办法检查?我可以安全地进行基准测试-O3吗?期望速度提高 15 倍是否现实?
没有的结果-O3:平均:239纳米最小:230 纳米(900 万次迭代) 有
结果-O3:平均:14纳米,最小:12 纳米(900 万次迭代)
int iterations = stoi(argv[1]);
int load = stoi(argv[2]);
long long x = 0;
for(int i = 0; i < iterations; i++) {
long start = get_nano_ts(); // START clock
for(int j = 0; j < load; j++) {
if (i % 4 == 0) {
x += (i % 4) * (i % 8);
} else {
x …Run Code Online (Sandbox Code Playgroud) 我正在浏览JIT HotSpot编译器日志(-XX:+PrintCompilation -XX:+UnlockDiagnosticVMOptions -XX:+PrintInlining),以确保正在优化/编译重要/热门方法。该方法显示:
已经编译成一个大方法
这意味着什么?JIT是否正确优化/内联了我的方法?
Oracle Wiki的这种解释并没有使我得出任何结论:
已经编译成一个大方法:已经有从调用站点调用的方法的已编译代码,并且为其生成的代码大于InlineSmallCode
这意味着什么?这是否意味着我的代码已经过优化/内联,或者HotSpot现在正在跳过它,因为它是在其他地方编译的?
c++ ×3
optimization ×3
benchmarking ×2
real-time ×2
fix-protocol ×1
g++ ×1
java ×1
jit ×1
jvm-hotspot ×1
latency ×1
performance ×1
quickfix ×1