Python与Numpy性能波动异常排查:8小时测试中的跳变问题
元胞自动机性能测试异常问题
我正在开发一款元胞自动机(cell-automata),并对代码进行性能测试,测试代码如下:
while True: time_1 = perf_counter_ns() numpy.fnc1() time_2 = perf_counter_ns() numpy.fnc2() time_3 = perf_counter_ns() numpy.fnc3() time_4 = perf_counter_ns() numpy.fnc4() time_5 = perf_counter_ns() numpy.fnc5() time_6 = perf_counter_ns() numpy.fnc6() time_7 = perf_counter_ns() diff_1 = time_2 - time_1 diff_2 = time_3 - time_2 diff_3 = time_4 - time_3 diff_4 = time_5 - time_4 diff_5 = time_6 - time_5 diff_6 = time_7 - time_6 print(results)
测试观测与环境
- 核心现象:8小时长测试后,性能呈现跳变状态——快、慢状态交替出现,且快慢周期的时长随时间逐渐变长;快慢状态的平均性能差异至少2倍。累计完成约650万次循环。
- 耗时特征:各函数(
fnc1至fnc6)对应的耗时差值(diff_1至diff_6)快慢周期大致匹配,但不完全重合;diff_3的逐周期数据(多次放大)也呈现相同的跳变规律。 - 测试环境:Debian 11系统,AMD Ryzen 5 2600六核处理器,仅运行GUI无其他程序,多数核心处于闲置状态。
- 排除项:已排除常规系统进程干扰;排除数据驱动的性能变化——元胞自动机持续演化导致输入数据变化,但数组运算耗时不应受数值影响,且数据变化不可能引发整分钟级的稳定耗时波动。
问题
- 我观测到的具体现象是什么?
- 该现象的成因是什么?
我猜测可能与Python线程调度有关,但不确定Numpy是否使用线程——我的代码仅为单线程。同时希望找到方法让代码稳定在快状态。
内容的提问来源于stack exchange,提问作者Zoltan K.
相关产品推荐
相关产品推荐

