同配置AMD机器运行相同可执行文件user时间不一致原因咨询
同配置AMD机器运行相同可执行文件user态时间稳定差异问题
问题概述
在两台标称硬件配置完全一致的AMD机器上运行测试代码时,两台机器统计的程序user态运行时间存在稳定差异,相关信息如下:
基础环境一致性校验
两台机器均使用gcc 9编译同一份源码,编译生成的可执行文件经objdump反汇编结果完全一致。
测试用源码
#include <time.h> int main() { double time_spent = 0.0; clock_t begin = clock(); int a = 0; for(int j = 0; j < 1000; j++) { for(int i = 0; i < 20000000; i++) { if(i%1000000 == 0) a = i; } } clock_t end = clock(); time_spent += (double)(end - begin) / CLOCKS_PER_SEC; printf("The elapsed time is %f seconds\n", time_spent); return 0; }
运行结果差异
- 机器1:程序自身输出elapsed time为21.140000秒,
time命令统计real 21.14、user 21.14、sys 0.00,内存占用520 - 机器2:程序自身输出elapsed time为24.580000秒,
time命令统计real 24.59、user 24.58、sys 0.00,内存占用524
硬件配置对比
两台机器均为x86_64架构,支持32/64位运算、小端序,搭载2颗AMD EPYC 7542 32-Core Processor,共128个逻辑CPU(每核2线程、每插槽32核),2个NUMA节点,支持AMD-V虚拟化,各级缓存(L1d 32K、L1i 32K、L2 512K、L3 16384K)、NUMA拓扑、CPU步进完全一致,仅检测到运行时CPU瞬时频率、BogoMIPS存在极微小数值差异。
已完成的排查操作
- 使用
taskset将应用绑定到指定CPU核心运行 - 使用
nice、renice调整进程运行优先级 - 将可执行文件放到本地
/tmp目录运行,排除网络存储延迟影响 - 确认程序运行时两台机器均无其他额外负载
- 尝试使用
-O2、-O3等不同编译优化等级编译程序 - 使用sudo权限运行程序
以上所有排查场景下,两台机器的执行时间差均稳定存在。
待解决问题
相同可执行文件在同配置AMD机器上运行时,user态运行时间存在稳定差异的原因是什么?
内容的提问来源于stack exchange,提问作者Animesh Kumar Sinha
相关产品推荐
相关产品推荐

