对于执行时间极短的程序(<1ms)进行benchmark,要注意以下几点:
- 固定CPU频率,变频时,CPU会停顿,overhead可达6~50us,如果是支持invariant TSC,通过RDTSC或RDTSCP指令可避免因频率变化导致的耗时误差;
- 绑核,隔离CPU核(无法阻止内核进程调度到该核,所以cpu中断还是无可避免,关闭cpu中断需重编译内核);
- NUMA架构防止内存访问跨节点,跨CPU造成的波动;
- 去除多级缓存影响。程序多次执行时,数据又可能会由内存加载至高速缓存或寄存器,从而影响程序执行速度;
- 避免大量I/O。
相关参考:
- https://sites.utexas.edu/jdm4372/2018/07/23/comments-on-timing-short-code-sections-on-intel-processors/