我们有一段代码,会检测某个函数的运行时间,50ms 以上则计失败。该函数目前可以理解为一个std::this_thread::sleep_for(10ms)
。理论上有 40ms 的 margin 可以浪费。
在 AWS 的 x86_64 机器下,测试没有任何问题。但是偶尔地,在 AWS a1.4xlarge
(aarch64)机器下会超时。也没有超很多,1.66ms 。也就是说一个本应该执行 10ms 的函数 50ms 都没有执行完。
我知道 aarch64 系统的性能确实不如 x86_64,但是这么大的差距是合理的么?
1
dorafmon 2021-01-16 23:13:29 +08:00
好奇,蹲一个解释。这个函数没有做任何 io 么?
|
3
cz5424 2021-01-16 23:45:10 +08:00 via iPhone
是不是高峰期共享 cpu 计算影响了?我没用过 aws 乱说的😹😹
|
5
dinghao188 2021-01-16 23:58:26 +08:00
怎么检测的,能简单介绍下吗
|
6
Mohanson 2021-01-17 00:05:21 +08:00 via Android
试试不要跑你自己的函数,可以写个斐波那契函数在两个平台上跑跑就知道性能多少比多少了,云上面的性能都很玄学,我前段时间同台机器跑纯计算的仿真器测试代码,一会 6 分钟一会 4 分钟,妈蛋,当时有人给我提的 issue 我优化完代码,尽然无法确切知道这个优化到底有没有用…
|
7
Mohanson 2021-01-17 00:09:41 +08:00 via Android
半个月前的 issue,最后代码拉自己的游戏机上跑测试才测出快了 10 啪
https://github.com/mohanson/pywasm/issues/42#issuecomment-753610944 |
8
dangyuluo OP |
9
opengps 2021-01-17 00:32:35 +08:00 via Android
多开几个实例再试下,云集群里的实际物理资源位置每次新购都会有变动,说不定那次用的实例网络途径更短
|
10
dorafmon 2021-01-17 00:40:23 +08:00
我不明白的点在于要是只是 sleep_for 的话,那么应该两个机器上应该都只睡了 10ms 为什么会有不一样。
|
11
allAboutDbmss 2021-01-17 00:56:57 +08:00
没有任何思路
可以先找一台本地的 aarch64 arm 来跑一下 |
12
mepwang 2021-01-17 06:41:35 +08:00 via iPhone
代码里取 os 精确到纳秒的时间戳,看看是不是 sleep_for 调用不精确。我记得以前的 sleep 调用误差很大的
|
13
tianshilei1992 2021-01-17 08:03:27 +08:00
Blocks the execution of the current thread for at least the specified sleep_duration.
This function may block for longer than sleep_duration due to scheduling or resource contention delays. The standard recommends that a steady clock is used to measure the duration. If an implementation uses a system clock instead, the wait time may also be sensitive to clock adjustments. https://en.cppreference.com/w/cpp/thread/sleep_for |
14
dangyuluo OP @tianshilei1992 我也有猜测是调度器的问题,但是惊讶于调度器居然 40ms 还不会分配时间片给当前任务
|
15
wang93wei 2021-01-17 12:35:46 +08:00
如果遇到这个问题,,,为什么不提工单问一下呢?
|
17
52coder 2021-01-17 23:38:49 +08:00
本地跑遇到过类似的问题吗?性能上 aarch 不至于这么差,楼主有结论了麻烦更新下,最近也在移植程序到 aarch 和 mips
|